📋 概述
Strategy 系统是一个用于发现和回测用户自定义策略的框架。系统采用配置驱动的方式,允许用户通过 Python 配置文件定义策略,框架自动执行扫描、枚举和回测。
为什么需要 Strategy 系统?
在量化交易中,我们需要:
- 策略发现:从市场中发现投资机会
- 策略验证:回测历史数据,验证策略效果
- 资金管理:模拟真实资金约束下的交易
Strategy 系统通过四层架构解决了这些问题,其中 OpportunityEnumerator + 双模拟器分层 是整个框架的核心亮点:
- ✅ Layer 0(OpportunityEnumerator):完整枚举所有可能机会 —— 作为「底层枚举器」,一次性把所有可能的交易机会(SOT:source of truth)算出来并持久化:
- 一次计算,多次复用:后续所有模拟、分析、机器学习训练都复用同一份枚举结果,而不再重复跑 on-bar 回测
- 可追溯:任何时刻都可以回到某只股票、某天、某机会的完整路径,极大方便调试
- 对分析/ML 友好:SOT 本质上就是一个结构化的数据集,天然适合分析工具和模型训练使用
- 相当于回测缓存层:把昂贵的 on-bar 回测拆成「先枚举机会,再叠加模拟」,大幅缩短迭代时间
- ✅ Layer 1(Scanner):实时机会扫描
- ✅ Layer 2(PriceFactorSimulator):价格因子模拟(无资金约束)
- ✅ Layer 3(CapitalAllocationSimulator):资金分配模拟(真实资金约束)
核心概念
投资机会(Opportunity)
一个投资机会,包含触发信息、回测结果和状态管理。
触发信息:
trigger_date:触发日期trigger_price:触发价格trigger_conditions:触发条件
回测结果:
sell_date:卖出日期sell_price:卖出价格sell_reason:卖出原因(止盈/止损/到期)roi:收益率
状态:
active:正在追踪中closed:已完成open:未完成
等量交易(Price Factor)
只关注股价波动(价格变化),不分析金钱盈亏。
示例:
买入价格:10 元
卖出价格:11 元
收益率:(11 - 10) / 10 = 10%目的:关注策略本身的效果(价格预测能力),独立于资金规模。
三层架构
Layer 1: OpportunityEnumerator(底层公用组件)
- 完整枚举所有可能的投资机会
- 每天都扫描,不跳过任何机会
- 同时追踪多个机会(不受持仓限制)
- 输出:CSV 双表(
opportunities.csv+targets.csv)
Layer 2: PriceFactorSimulator(验证层)
- 验证策略效果(价格层面),只关注「价格是否走对了」,不涉及资金规模和仓位
- 无资金约束,只关心等量交易的收益曲线,天然对应「价格因子」视角
- 基于 OpportunityEnumerator 的 SOT 结果,复用枚举缓存,速度非常快,适合频繁调整策略与参数
- 输出:Investment 记录(JSON 格式),可直接用于统计分析和可视化
Layer 3: CapitalAllocationSimulator(执行层)
- 模拟资金分配执行(资金层面),在确定了价格层面策略可行之后,进一步回答「多少钱、怎么买、怎么买多只」
- 真实资金约束,考虑费用、持仓限制、多股票间的资金竞争等
- 同样基于 OpportunityEnumerator 的 SOT 结果,在价格模拟验证通过后再叠加资金管理逻辑,避免过早卷入复杂度
- 输出:Trade 记录、Equity Curve、Summary(JSON 格式),帮助用户真正制定和调试仓位分配策略
使用场景
场景 1:实时机会扫描
需求:每天扫描市场,发现当前的投资机会
实现:
- 实现
scan_opportunity()方法 - 调用
manager.scan(strategy_name="my_strategy") - 结果保存在
results/scan/{date}/opportunities.json
场景 2:完整机会枚举
需求:枚举历史所有可能的机会,供后续分析使用
实现:
- 调用
OpportunityEnumerator.enumerate() - 结果保存在
results/opportunity_enums/{strategy_name}/{version_dir}/ - 输出 CSV 双表(
opportunities.csv+targets.csv)
场景 3:价格因子验证
需求:快速验证策略的信号质量,不考虑资金约束
实现:
- 先运行 OpportunityEnumerator 生成 SOT 结果
- 调用
PriceFactorSimulator.run() - 结果保存在
results/price_factor/{strategy_name}/{version_dir}/
场景 4:资金分配回测
需求:在真实资金约束下回测策略效果
实现:
- 先运行 OpportunityEnumerator 生成 SOT 结果
- 调用
CapitalAllocationSimulator.run() - 结果保存在
results/capital_allocation/{strategy_name}/{version_dir}/ - 包含交易记录、权益曲线、汇总统计