基于 Flask 的全球多市场 K 线回测分析与双盲操盘训练平台,支持 A 股、港股、美股、日股、韩股及贵金属(沪金/沪银)。
pip install -r requirements.txt
python app.py
# 访问 http://localhost:5555开发模式(启用热重载和调试器):
FLASK_DEBUG=1 python app.py自定义端口:
PORT=8080 python app.pysim_stock/
├── app.py # Flask 主入口 (port 5555)
├── requirements.txt # Python 依赖
├── api/ # API 蓝图
│ ├── stock_api.py # 股票数据 API
│ ├── backtest_api.py # 回测 API
│ └── training_api.py # 双盲训练 API
├── services/ # 业务逻辑
│ ├── data_service.py # 多市场数据抓取(腾讯/新浪)
│ ├── backtest_service.py # 回测引擎
│ ├── indicator_service.py # 技术指标计算(14种)
│ └── training_service.py # 双盲训练会话管理
├── static/ # 前端页面
│ ├── index.html # 首页导航
│ ├── backtest.html # 回测分析(含多周期联动)
│ ├── training.html # 双盲训练
│ └── dashboard.html # 成绩面板 / 排行榜
├── cache/ # K 线数据缓存(自动管理)
└── training_data/ # 训练会话持久化
| 市场 | 标识 | 数据源 | 支持周期 |
|---|---|---|---|
| A 股 | A |
腾讯财经 + 新浪财经 | 1m/5m/15m/30m/60m/2H/4H/日/周/月 |
| 港股 | HK |
腾讯财经 | 日/周/月 |
| 美股 | US |
腾讯财经 | 日/周/月 |
| 日股 | JP |
腾讯财经 | 日/周/月 |
| 韩股 | KR |
腾讯财经 | 日/周/月 |
| 黄金 | GOLD |
新浪国内期货 | 日 |
| 白银 | SILVER |
新浪国内期货 | 日 |
- 智能搜索:腾讯 SmartBox 搜索 + 贵金属关键词匹配 + 日韩股本地匹配
- 缓存机制:日线 4h / 分钟线 30min / 贵金属 1h,文件级 JSON 缓存
- ECharts K 线图:蜡烛图 + 成交量 + 多指标子图 + 买卖标记 + 数据缩放
- 多时间周期联动:一键切换显示上级/下级周期 K 线,大周期定方向、小周期找买点
- 操作类型:买入 / 卖出 / 加仓 / 减仓
- 费用模型:万三佣金 + 千一印花税(卖出)
- 统计指标:总收益率、年化收益、最大回撤、夏普比率、胜率、交易日志、净值曲线
四种训练模式:
| 模式 | 说明 |
|---|---|
| 裸 K 训练 | 仅 K 线 + 成交量,纯盘感训练 |
| 技术指标训练 | 可叠加 MA/BOLL/MACD/KDJ/RSI |
| 自选股训练 | 指定股票,显示真实信息 |
| 做空训练 | 支持 short/cover 做空操作 |
- 双盲设计:隐藏股票身份和真实日期,训练结束揭晓
- 随机选股池:A 股 50 只蓝筹 + 美股 24 只 + 港股 9 只
- 逐 K 推进:手动/自动(慢 500ms / 中 200ms / 快 50ms)
- 交易费用:万三佣金 + 千一印花税
- 复盘揭晓:完整 K 线走势 + 操作标记 + 统计回顾
- 历史记录:所有训练会话持久化存储,可随时回顾
- 综合统计:训练次数、总体胜率、平均收益率、最佳/最差战绩、连胜/连败
- 收益趋势图:累计收益曲线 + 单次收益柱状图
- 收益分布:按收益率区间分桶统计
- 模式/市场对比:雷达图 + 表格展示各模式和市场的胜率、平均收益、回撤
- 排行榜:最高收益/最大亏损/最近训练 Top 10
- 成就徽章:初出茅庐、久经沙场、一飞冲天、神射手等,根据表现自动解锁
| 分类 | 指标 |
|---|---|
| 趋势 | MA、EMA、布林带(BOLL)、SAR、VWAP、DMI |
| 动量 | MACD、KDJ、RSI、WR、CCI |
| 波动率 | ATR |
| 量能 | OBV、成交量均线(VOL_MA) |
| 端点 | 方法 | 说明 |
|---|---|---|
/api/stock/search?keyword= |
GET | 搜索股票 |
/api/stock/history?code=&market=&period=&start_date=&end_date= |
GET | 获取 K 线 |
/api/stock/periods?market= |
GET | 获取支持的周期 |
/api/stock/indicators |
POST | 计算技术指标 |
/api/stock/indicator_list |
GET | 可用指标列表 |
/api/stock/markets |
GET | 支持的市场列表 |
| 端点 | 方法 | 说明 |
|---|---|---|
/api/backtest/run |
POST | 运行回测(传入操作列表) |
| 端点 | 方法 | 说明 |
|---|---|---|
/api/training/create |
POST | 创建训练会话 |
/api/training/advance |
POST | 推进 K 线 |
/api/training/trade |
POST | 执行交易 |
/api/training/finish |
POST | 结束训练并揭晓 |
/api/training/state?session_id= |
GET | 获取会话状态 |
/api/training/history |
GET | 所有训练记录 |
/api/training/stats |
GET | 训练综合统计(Dashboard) |
- 后端:Flask + pandas + numpy + requests
- 前端:原生 HTML/CSS/JS + ECharts
- 数据源:腾讯财经 API、新浪财经 API
- 存储:文件系统(JSON 缓存 + 会话持久化),无需数据库
flask>=2.0.0
flask-cors>=4.0.0
pandas>=1.1.0
numpy>=1.19.0
requests>=2.25.0
pyarrow>=6.0.0
gunicorn>=20.0.0
本项目仅供学习和研究用途,不构成任何投资建议。股市有风险,投资需谨慎。数据来源于腾讯财经和新浪财经的公开接口,数据准确性请以官方为准。
欢迎提交 Issue 和 Pull Request!