一个基于Python的股票技术指标参数优化与历史回测系统,通过算法搜索最优参数组合,辅助确定股票交易策略的最佳参数配置。系统集成了完整的风险管理功能,支持13种技术指标的智能参数优化。
- 多数据源支持: 使用akshare接口获取A股历史行情数据,支持前复权处理
- 多时间周期: 支持日线、周线、月线多种时间周期选择
- 数据验证: 自动数据清洗和异常处理,确保数据质量
- 13种技术指标: 基于TA-Lib实现完整的技术指标体系
- 趋势类: MACD、均线、ADX、动量指标、抛物线SAR
- 震荡类: RSI、KDJ、威廉指标、CCI、乖离率
- 波动率类: 布林带、ATR
- 成交量类: OBV
- 智能信号生成: 每个指标都有专门的买卖信号生成逻辑
- 参数优化: 支持参数范围的智能优化和自动调整
- 网格搜索优化: 全局搜索参数空间,找到最优参数组合
- 遗传算法优化: 智能优化算法,适合复杂参数空间搜索
- 并行计算支持: 多核并行处理,大幅提升优化效率
- 进度可视化: 实时显示优化进度和结果统计
- 智能仓位管理: 基于风险暴露计算最优仓位大小
- 自动止损止盈: 动态止损止盈,保护资本安全
- 风险等级评估: 实时评估交易风险等级,自动调整策略
- 风险违规监控: 完整的风险违规记录和预警机制
- 完整交易逻辑: 包含买卖信号、仓位管理、风险控制等
- 手续费滑点: 真实的交易成本模拟(万三手续费、万分之一滑点)
- 绩效计算: 全面的回测绩效指标计算
- 交易记录: 详细的交易记录和风险控制日志
- 现代化界面: 基于Streamlit的专业Web界面
- 交互式配置: 直观的参数配置和指标选择
- 实时反馈: 优化进度显示和结果可视化
- 风险控制开关: 用户可选择启用或禁用风险控制功能
- 编程语言: Python 3.11
- 前端框架: Streamlit
- 数据获取: akshare
- 技术指标: TA-Lib
- 优化算法: scikit-learn, DEAP (遗传算法)
- 可视化: Plotly
- 并行计算: joblib
stock_parameter_optimizer/
├── app.py # 主应用程序入口
├── requirements.txt # 项目依赖
├── README.md # 项目文档
├── config/ # 配置文件
│ └── INDICATOR_PARAMS.py # 指标参数配置
├── data/ # 数据获取模块
│ ├── __init__.py
│ └── data_fetcher.py # 股票数据获取器
├── indicators/ # 技术指标模块
│ ├── __init__.py
│ └── technical_indicators.py # 技术指标计算器
├── backtest/ # 回测引擎模块
│ ├── __init__.py
│ └── backtest_engine.py # 回测引擎
├── optimization/ # 参数优化模块
│ ├── __init__.py
│ ├── optimizer.py # 参数优化器
│ └── param_evaluator.py # 参数评估包装
├── risk_management/ # 风险管理模块
│ ├── __init__.py
│ └── risk_manager.py # 风险管理器
└── utils/ # 工具模块
├── __init__.py
└── project_utils.py # 项目工具类
# 克隆项目
git clone [项目地址]
cd stock_parameter_optimizer
# 安装依赖
pip install -r requirements.txtstreamlit run app.py在浏览器中打开: http://localhost:8501
- 配置参数: 输入股票代码(如:000001.SZ)
- 选择指标: 从13种技术指标中选择要优化的指标
- 设置范围: 配置参数搜索范围
- 选择算法: 选择网格搜索或遗传算法
- 风险控制: 选择是否启用风险控制功能
- 开始优化: 点击"🚀 开始参数优化"按钮
| 指标 | 买入信号 | 卖出信号 | 适用场景 |
|---|---|---|---|
| MACD | MACD线上穿信号线(金叉) | MACD线下穿信号线(死叉) | 趋势明显的市场 |
| 均线 | 价格上穿均线 | 价格下穿均线 | 趋势跟踪,过滤噪音 |
| ADX | 无直接信号(趋势强度判断) | 无直接信号(趋势强度判断) | 趋势强度确认 |
| 动量指标 | 动量上穿零轴 | 动量下穿零轴 | 价格动量分析 |
| 抛物线SAR | 价格上穿SAR线 | 价格下穿SAR线 | 趋势跟踪止损 |
| 指标 | 买入信号 | 卖出信号 | 适用场景 |
|---|---|---|---|
| RSI | RSI < 30(超卖) | RSI > 70(超买) | 震荡市场 |
| KDJ | K线上穿D线且J值 < 20 | K线下穿D线且J值 > 80 | 短期交易 |
| 威廉指标 | 威廉 < -80(超卖) | 威廉 > -20(超买) | 短期反转 |
| CCI | CCI < -100(超卖) | CCI > 100(超买) | 周期性分析 |
| 乖离率 | 乖离率 < -6% | 乖离率 > 6% | 价格回归分析 |
| 指标 | 买入信号 | 卖出信号 | 适用场景 |
|---|---|---|---|
| 布林带 | 价格跌破下轨 | 价格突破上轨 | 波动率分析 |
| ATR | 无直接信号(辅助指标) | 无直接信号(辅助指标) | 仓位管理参考 |
| OBV | OBV连续上升突破高点 | OBV连续下降跌破低点 | 量价确认 |
| 指标 | 参数 | 默认范围 | 说明 |
|---|---|---|---|
| MACD | fastperiod | 5-20 | 快线周期 |
| MACD | slowperiod | 15-40 | 慢线周期 |
| MACD | signalperiod | 3-15 | 信号线周期 |
| RSI | timeperiod | 6-30 | 计算周期 |
| KDJ | fastk_period | 5-15 | K值周期 |
| KDJ | slowk_period | 2-5 | K值平滑周期 |
| KDJ | slowd_period | 2-5 | D值平滑周期 |
- 种群大小: 20-50
- 进化代数: 5-20
- 交叉概率: 0.6-0.8
- 变异概率: 0.1-0.3
- 风险仓位计算: 基于ATR和风险暴露计算最优仓位
- 动态调整: 高风险交易自动减半仓位
- 风险等级评估: 低/中/高/极高风险等级分类
- 止损机制: 价格跌破买入价5%时自动卖出
- 止盈机制: 价格达到预期收益目标时自动卖出
- 风险回报比: 基于风险调整卖出决策
- 实时评估: 实时评估交易风险等级
- 违规记录: 详细记录风险违规情况
- 预警机制:极高风险情况自动预警
- 信号执行: 基于技术指标规则生成买卖信号
- 仓位管理: 支持全仓买卖交易
- 成本模拟: 真实的手续费和滑点成本模拟
- 收益指标: 年化收益率、总收益率、净利润
- 风险指标: 最大回撤、年化波动率
- 风险调整指标: 夏普比率、索提诺比率
- 交易指标: 胜率、交易次数、平均持仓天数
- 净值曲线: 策略收益vs基准收益对比
- 交易信号: 买卖信号在价格图上的标记
- 绩效报告: 详细的回测绩效分析报告
- 📊 回测参数设置: 股票代码、时间周期、回测范围
- 📈 技术指标选择: 13种技术指标选择和说明
- 🛡️ 风险控制设置: 风险控制开关和详细说明
- ⚙️ 优化设置: 算法选择和配置
- 🔧 参数范围设置: 动态参数范围配置
- 📊 数据预览: 股票行情K线图
- 🎯 最优参数: 最优参数组合显示
- 📈 回测曲线: 策略收益vs基准收益曲线
- 📋 优化结果: 所有参数组合的详细结果表
- 🎯 实时进度: 参数优化进度条和状态显示
- 📋 指标说明: 可展开的技术指标详细说明
- 🛡️ 风险说明: 可展开的风险控制功能说明
- 在
indicators/technical_indicators.py中添加指标计算方法 - 在
config/INDICATOR_PARAMS.py中添加参数配置 - 在
app.py中添加指标说明文字
- 在
optimization/optimizer.py中实现新算法 - 在
app.py中添加算法选项 - 更新前端界面配置
- 在
risk_management/risk_manager.py中实现新策略 - 在
backtest/backtest_engine.py中集成风险控制 - 更新风险控制配置选项
- 并行处理: 支持多核CPU并行计算
- 内存优化: 分批处理大数据集,避免内存溢出
- 缓存机制: 智能缓存计算结果,提升效率
- 数据规模: 支持3年内日线数据的优化
- 参数空间: 支持上千种参数组合的搜索
- 计算时间: 优化时间控制在可接受范围内
A: 目前支持A股市场,股票代码格式为000001.SZ或600036.SH。
A: 不是必需的,用户可以选择开启或关闭风险控制功能。
A: 系统使用历史数据进行优化,结果仅供参考,实际交易需谨慎。
A: 支持并行计算,对于1年数据和合理参数范围,优化时间在分钟级别。
GPL License
欢迎提交Issue和Pull Request来改进项目!
- 遵循PEP 8代码规范
- 添加适当的注释和文档
- 确保代码测试通过
如有问题或建议,请通过以下方式联系:
注意: 本系统仅供学习和研究使用,不构成投资建议。实际交易请谨慎评估风险。