按 strategy-mindmap 需求文档从零实现的量化回测系统(Phase 1:回测引擎 + 专业 Web 终端)。
策略核心严格遵循需求文档,并叠加 4 项增强:整体止损、绩效指标、等权多标的、诚实建模保本。
uv sync # 创建环境并安装依赖
# 命令行回测
uv run python scripts/run_backtest.py \
--codes sh.603341 sz.000063 sz.002465 \
--start 2025-12-03 --end 2026-06-12 \
--capital 1000000 --stop-loss 0.10 \
--out report --trades
# Web 终端
uv run uvicorn quant_trading.web.app:app --port 8090
# 浏览器打开 http://127.0.0.1:8090/
# 测试
uv run --extra dev pytest策略核心只产出"买卖意图",成交交给可替换的执行器——回测期用模拟撮合, 将来实盘期换成券商执行器即可,策略逻辑不变(为 Phase 2 实盘留口子)。
quant_trading/
├── config.py # 策略参数 + 回测请求模型(pydantic)
├── data/
│ ├── loader.py # 通达信 5 分钟 txt 加载、代码↔文件名
│ └── indicators.py # MA / RSI / MACD(日线,防未来函数)
├── strategy/
│ ├── subposition.py # 子阵地状态机(风险仓/安全底仓/T+1 额度)
│ └── grid_strategy.py # 规则:入场/补仓/做T/保本/熔断/止损 → 成交
├── engine/
│ ├── executor.py # 撮合执行器(跳空感知,回测/实盘解耦点)
│ ├── backtest.py # 单股回测主循环
│ └── portfolio.py # 多标的等权 + 组合聚合 + 大盘基准
├── metrics/performance.py # 最大回撤/夏普/年化/卡玛/波动率/胜率
├── report/report.py # JSON + Markdown 报告
└── web/ # FastAPI + 专业前端(ECharts)
| 模块 | 规则 |
|---|---|
| 首单入场 | 模式 A 趋势(MA5上方)/ B RSI<30 抄底 / C 水下金叉,三选一 |
| 网格补仓 | 跌破最低成本 drop_pct、层数未满、趋势允许 → 加一层 |
| 高抛低吸做T | 摸高 rise_pct → 回撤 sell_pullback 卖半 → 跌 add_pullback 接回,每阵地 max_add_count 次 |
| 保本防线 | 安全底仓跌破 成本×breakeven_coef → 卖出(跳空会破线小亏,非"绝对不亏") |
| 暴涨熔断 | 较 surge_days 日最低涨 surge_pct → 停开新仓(已有仓位正常做T继续) |
| T+1 拦截 | 分离"总持仓/今日可卖",当天买入当日不可卖,所有卖出前校验 |
| 整体止损(增强) | 风险仓跌破成本 stop_loss_pct → 认赔清仓(默认关闭) |
默认复用老项目 数据库/*.txt(通达信 5 分钟、前复权),可用 --data-dir 覆盖。
实盘下单(QMT/Ptrade)、状态持久化/断点续跑、手动干预、钉钉通知——架构已预留接口。