# StockStrategyBackTesting **Repository Path**: mooncalf/StockStrategyBackTesting ## Basic Information - **Project Name**: StockStrategyBackTesting - **Description**: 使用akshare、智谱AI和backtrader进行股票回测的尝试项目 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-19 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # StockStrategyBackTesting 股市策略回测工具,支持使用akshare获取真实股市数据,通过智谱AI将自然语言策略转换为可执行代码,并使用backtrader进行回测。 ## 功能特点 - 📊 **数据获取**:通过akshare获取A股历史数据,支持多种频率(日线、周线、月线、分钟线) - 📋 **股票列表**:提供A股股票列表页面,支持搜索、筛选和点击选择股票 - 🧠 **策略解析**:使用智谱AI将自然语言策略描述转换为backtrader可执行代码(使用HTTP请求调用API,不依赖zai-sdk) - ✅ **代码验证**:自动检查生成的策略代码是否符合backtrader文档要求,修复常见错误,包括: - 确保策略类正确继承自BaseStrategy - 验证指标参数名称是否正确(如Stochastic指标的参数) - 修复指标属性访问错误(如手动计算KDJ指标的J值) - 确保所有指标都通过register_indicator方法注册 - 修复指标名称错误(如OnBalanceVolume和OBV指标名称转换) - 检查并修复代码完整性问题(如未闭合的if语句、未闭合的f-string等) - 自动确保在next方法中调用super().next(),确保状态记录正常执行 - ✅ **资金管理与安全检查**:实现全面的资金管理和交易安全检查机制,包括: - 交易前资金影响评估:计算交易对资金的影响,确保不会导致负资金 - 强制资金管理检查:每个交易日开始时强制检查资金状态 - 交易环境验证:确保交易环境安全,避免异常交易 - 空头持仓控制:允许用户选择是否允许空头持仓,默认不允许 - 价格异常检查:检测价格异常情况,避免无效交易 - 资金安全检查:确保交易不会导致资金为负 - ✅ **策略代码缓存**:实现策略代码缓存机制,确保相同的自然语言描述生成相同的策略代码,提高回测结果的一致性 - ✅ **收益率计算优化**:改进了收益率计算逻辑,添加了异常处理和值范围限制,避免出现异常收益率值 - ✅ **可视化数据完整性**:确保所有回测都能生成完整的可视化数据,避免"没有可用的可视化数据"的问题 - 🔄 **策略回测**:基于backtrader库执行策略回测,支持多种回测参数配置 - ⚙️ **Web界面参数配置**:在Streamlit Web界面中提供直观的回测参数配置,支持自定义初始资金、佣金率和滑点 - 📊 **参数小数位数调整**:为不同类型的参数设置合理的小数位数,确保财务参数的准确性 - 📈 **结果可视化**:提供回测结果可视化功能,直观展示策略表现 - 💻 **多界面支持**:同时支持命令行界面和Web界面(基于Streamlit) - 🌐 **浏览器自动打开**:启动Web界面时自动在Chrome浏览器中打开网页,提供更好的用户体验 - 🛠️ **AI引擎连接测试**:允许用户检查并测试与AI引擎的连接情况,验证API密钥是否有效 - 🎨 **现代化Web界面**:全面改进Web界面设计,添加现代化的CSS样式和视觉效果 - 📊 **实时状态更新**:实现智能的状态更新系统,提供详细的AI API调用状态和进度条 - 🔧 **会话状态初始化修复**:修复了会话状态初始化错误,确保应用正常启动 ## 项目架构 ``` StockStrategyBackTesting/ ├── src/ # 源代码目录 │ ├── backtest/ # 回测模块 │ │ └── backtest_engine.py # 回测执行功能 │ ├── data/ # 数据模块 │ │ ├── data_fetcher.py # 数据爬取功能(基于akshare) │ │ ├── fallback_stocks.py # 备用股票列表(650只) │ │ └── stock_cache.py # 缓存管理器 │ ├── strategy/ # 策略模块 │ │ ├── strategy_parser.py # 策略解析功能 │ │ └── strategy_manager.py # 策略管理功能 │ ├── ui/ # 用户界面模块 │ │ └── streamlit_app.py # Web界面 │ └── utils/ # 工具模块 │ ├── logger.py # 日志系统 │ └── secure_config.py # 安全配置加载 ├── config/ # 配置文件目录 │ ├── config.yaml # 主配置文件 │ └── strategies/ # 策略文件 ├── scripts/ # 工具脚本 │ ├── migrate_config.py # 配置迁移脚本 │ ├── test_basic_functionality.py # 功能测试 │ └── test_stock_list.py # 股票列表测试 ├── data/ # 数据存储目录 ├── logs/ # 日志目录 ├── _backups/ # 备份目录 ├── main.py # 命令行入口 └── README.md # 项目说明 ``` ## 安装步骤 1. 克隆项目 2. 安装依赖 ```bash pip install -r requirements.txt ``` 3. 配置API密钥 - 复制 `config/config.yaml.example` 为 `config/config.yaml` - 编辑 `config/config.yaml`,填入你的智谱AI API密钥 ## 使用说明 ### 命令行界面 #### 1. 获取股票数据 ```bash python main.py fetch --code 000001.SZ --start 20230101 --end 20240101 --freq D ``` #### 2. 解析自然语言策略 ```bash python main.py parse --input "当股票价格突破20日均线时买入,跌破20日均线时卖出" --output ma_strategy.py ``` #### 3. 执行策略回测 ```bash python main.py backtest --code 000001.SZ --strategy "当股票价格突破20日均线时买入,跌破20日均线时卖出" --start 20230101 --end 20240101 --visualize ``` ### Web界面 启动Streamlit应用: ```bash streamlit run src/ui/streamlit_app.py ``` 然后在浏览器中访问显示的URL即可使用Web界面。 #### 功能模块 1. **股票列表**: - 显示A股股票代码和名称列表 - 支持搜索股票代码或名称 - 支持筛选上证或深证股票 - 点击"选择"按钮可直接跳转到策略回测页面 - 股票列表采用本地缓存机制,每日自动更新 2. **策略回测**: - 输入股票代码和回测时间范围 - 输入自然语言策略或直接编辑Python代码 - 配置回测参数: - 初始资金:默认100000元,可在Web界面中自定义 - 佣金率:默认0.0003,可在0.0-0.01之间调整 - 滑点:默认0.001,可在0.0-0.01之间调整 - 生成并确认策略代码(系统会自动验证代码是否符合backtrader文档要求) - 执行回测并查看结果 - 系统会自动修复常见错误,如指标参数名称错误、属性访问错误等 3. **AI引擎配置**: - 配置智谱AI API密钥和模型参数 - 支持切换不同的AI引擎 - 支持测试与AI引擎的连接状态,验证API密钥是否有效 - 支持添加新的AI引擎 4. **策略代码注释**: - 为策略代码添加详细注释 - 生成策略的自然语言描述 ## 配置说明 ### 配置文件 `config/config.yaml` ```yaml # 数据来源配置 data: source: "akshare" # 数据源,当前支持akshare # 智谱AI配置 ai: default_engine: zhipu engines: zhipu: api_key: "your_zhipu_api_key" # 替换为你的智谱AI api key base_url: "https://open.bigmodel.cn/api/paas/v4/" model: "glm-4.5-flash" type: zhipu # 回测配置 backtest: commission: 0.0003 initial_cash: 100000 slippage: 0.001 # 系统配置 system: data_dir: "./data" log_level: INFO ``` ## 策略示例 ### 自然语言策略 ``` 当股票价格突破20日均线时买入,跌破20日均线时卖出 ``` ### 生成的backtrader策略代码 ```python import backtrader as bt class GeneratedStrategy(bt.Strategy): params = ( ('sma_period', 20), ) def __init__(self): self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.sma_period) def next(self): if not self.position: if self.data.close[0] > self.sma[0]: self.buy(size=100) else: if self.data.close[0] < self.sma[0]: self.sell(size=100) ``` ## 回测报告 回测完成后,系统会生成详细的回测报告,包括: - 初始资金和最终资金 - 收益率和总收益率 - 夏普比率 - 最大回撤 - 交易次数和胜率 ## 注意事项 1. 确保你的智谱AI API密钥有效 2. akshare是免费数据源,但请合理使用,避免频繁请求 3. 分钟级数据获取可能需要较长时间 4. 复杂策略的解析可能需要多次调整自然语言描述 ## 扩展建议 1. 添加更多技术指标支持 2. 实现多股票组合回测 3. 添加风险评估功能 4. 支持策略参数优化 5. 实现实盘交易接口 ## 近期计划实现 以下是近期计划优先实现的功能: 1. ✅ **添加更多技术指标支持**:扩展支持的技术指标种类,包括MACD、RSI、KDJ等常用指标 2. ✅ **实现多股票组合回测**:支持同时对多只股票进行回测,评估组合策略表现 3. ✅ **添加风险评估功能**:增加风险指标计算,如VaR、CVaR等,全面评估策略风险 4. ✅ **支持策略参数优化**:实现参数自动优化功能,寻找最优策略参数组合 5. ✅ **Web界面回测参数配置**:在Streamlit Web界面中添加回测参数配置功能 6. ✅ **参数小数位数调整**:为不同类型的参数设置合理的小数位数 7. ✅ **初始资金计算修复**:修复回测报告中初始资金计算错误的问题 8. ✅ **现代化Web界面**:全面改进Web界面设计,添加现代化的CSS样式和视觉效果 9. ✅ **实时状态更新**:实现智能的状态更新系统,提供详细的AI API调用状态和进度条 10. ✅ **会话状态初始化修复**:修复了会话状态初始化错误,确保应用正常启动 > 注:✅ 表示已完成 ## 许可证 MIT ## 更新日志 ### 2025年2月 - 重构优化 #### 安全改进 - ✅ API密钥加密存储(SecureConfigLoader) - ✅ 备用股票列表(650只常用股票) #### 代码质量 - ✅ 类型提示(data_fetcher.py, strategy_parser.py, backtest_engine.py) - ✅ 日志系统优化(环境变量控制) - ✅ 错误处理改进 #### 项目清理 - ✅ 移除临时调试文件(_debug/) - ✅ 清理重复测试文件 - ✅ 优化目录结构