alphax/docs/MULTI_STRATEGY_ARCHITECTURE.md
2026-06-07 20:58:35 +08:00

263 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AlphaX 多策略改造计划
本文档定义 AlphaX 从“单一综合评分链路”升级为“多策略并行研究与交易验证平台”的改造计划。
核心原则:**因子不等于策略**。因子只能作为证据、条件或风控输入;策略必须是一套完整的交易剧本,包含适用环境、触发、确认、入场、退出、失效、仓位和复盘口径。
## 1. 为什么要改
当前系统已经有 `strategy_version`、`FactorScorer`、`factor_score_breakdown` 和 paper trading 归因,但综合确认策略仍更像一个“大而全评分器”:
- 很多因子在同一个确认函数里叠加,容易把单根行情重复加分。
- 推荐和 paper trading 更容易知道“综合分高不高”,但不容易知道“到底是哪套策略赚了钱”。
- 复盘能看到因子胜率,但很难独立评估一个完整交易模型的胜率、回撤、盈亏比和适用行情。
- 新增强形态时容易误把一个因子升级为策略,例如 `box_breakout_pullback_4h`
改造目标是让系统支持多个独立策略同时运行,并让每个策略从发现到交易账本都有独立记录和评价体系。
## 0. 架构红线
这是基础设施重构,不是简单加几个字段。后续实现必须遵守:
- `strategy_code` 表示策略身份,`strategy_version` 表示版本,两者不能混用。
- 策略输出必须走统一契约,不能每个策略自定义一套不可比的 JSON。
- 推荐、挂单、持仓、事件日志、复盘都必须保留策略血缘。
- 因子角色必须显式声明,未知因子不能默认成为交易触发。
- 历史综合确认策略可以兼容为 `main_composite_v1`,但它与其他策略平等运行;新数据不允许没有策略来源。
- 策略中文名、描述、启用状态要集中维护,不能散落在页面和业务代码里。
- 多策略架构上线后,收益评价必须按策略拆分;总收益只能作为账户层结果,不能替代策略评价。
## 2. 基本概念
### 2.1 因子角色
每个因子必须先归类,不允许默认都作为策略核心触发。
- `prerequisite`:先决条件。决定能不能看,例如交易量、交易宇宙、市场环境、是否异常币。不能单独产生交易信号。
- `trigger`触发条件。让策略产生候选例如箱体突破回踩、1H 量价齐飞、短周期启动。
- `confirmation`确认条件。提高交易可信度例如板块共振、舆情共振、大户偏多、1H 未衰竭。
- `entry`:入场条件。决定现在能不能买,例如 15m 承接、离箱体上沿距离、盈亏比。
- `risk`:风控条件。一票否决或降级,例如 risk_off、假突破、止损过宽、账户回撤过大。
- `attribution`:归因条件。用于复盘解释,不一定参与实时决策。
### 2.2 策略成立标准
一个策略至少要定义:
- `strategy_code`:稳定代码,例如 `long_box_retest_4h_v1`
- `strategy_version`:版本,例如 `v2026.05.26-r1`
- `market_regime`:适用市场环境。
- `universe_filter`:交易宇宙要求。
- `prerequisites`:先决条件。
- `trigger_model`:核心触发模型。
- `confirmation_model`:辅助确认模型。
- `entry_model`:入场模型。
- `exit_model`:止盈、止损、移动止盈、失效退出。
- `risk_model`:仓位、杠杆、账户级约束。
- `review_metrics`:胜率、收益率、最大回撤、盈亏比、持仓时长、机会转化率。
如果只有一个强因子,没有完整入场/退出/风控/复盘口径,只能叫“策略候选”或“因子”,不能叫正式策略。
## 3. 目标链路
```text
统一交易宇宙
-> 策略 A 独立扫描
-> 策略 B 独立扫描
-> 策略 C 独立扫描
-> 信号标准化
-> 冲突与重复仲裁
-> 推荐/观察/挂单
-> paper trading 保留策略血缘
-> 按策略独立复盘
-> 策略灰度/发布/淘汰
```
统一交易宇宙只负责把明显不适合交易的币剔除例如稳定币、封装币、inactive 交易对、异常交易对和长期流动性不合格的币。它不是策略,也不直接产生交易动作。
## 4. 初始策略池建议
### 4.1 `long_box_retest_4h_v1`
定位:底部箱体突破后,第一次或第二次回踩箱体上沿/EMA 承接。
- 先决条件:非 risk_off交易量合格非异常交易对箱体宽度合理。
- 核心触发:`box_breakout_pullback_4h`。
- 确认条件1H 不衰竭15m 有承接,板块或市场环境不拖后腿。
- 入场条件:当前价不能离箱体上沿太远,盈亏比合格。
- 失效条件:跌回箱体、放量冲高回落、突破后过久才回踩。
- 复盘口径:回踩入场后的 24h/72h 收益、最大回撤、止损触发率。
注意:`box_breakout_pullback_4h` 是该策略的核心触发因子,但不等于策略本身。
### 4.2 `long_intraday_momentum_15m_1h_v1`
定位1H 量价齐飞后的加速机会。
- 核心触发:`vp_fly_1h_current`。
- 风险重点:追高、假突破、短线衰竭。
- 入场要求:必须有 15m 承接或回踩,不允许单纯因为放量就直接买。
### 4.3 `long_compression_breakout_1h_4h_v1`
定位1H/4H 低波动压缩后放量突破,捕捉启动前后第一段。
- 核心触发:`compression_breakout_1h_4h`。
- 入场要求:必须有 15m 当前触发或回踩确认。
- 风险重点假突破、放量冲高回落、RR不足。
### 4.4 `long_second_wave_pullback_1h_v1`
定位:强势榜币种第一波后,回踩承接走二波。
- 先决条件:不是纯追涨,涨幅后必须有回踩和承接。
- 核心触发:强势榜 + 回踩结构。
- 风险重点高位回落、流动性退潮、meme 过热。
### 4.5 `short_breakdown_retest_1h_v1`
定位1H 支撑/箱体下沿破位后反抽失败。
- 核心触发:`breakdown_retest_1h_short`。
- 入场要求:反抽失败确认、离反抽区不能太远。
- 风险重点重新站回破位区、BTC/ETH 快速转强。
### 4.6 `short_weak_bounce_failure_15m_1h_v1`
定位:弱势环境下 15m/1H 反弹无量,反抽均线或前支撑后再次转弱。
- 核心触发:`weak_bounce_failure_15m_1h_short`。
- 确认条件risk_off/high/critical 环境或相对弱势。
- 风险重点反弹转强、空头拥挤、RR不足。
## 5. 数据模型改造
### 5.1 第一阶段:兼容式加字段
优先在现有表增加策略血缘字段,避免一次性重构过大。
- `recommendation.strategy_code`
- `recommendation.strategy_signal_id`
- `recommendation.strategy_snapshot_json`
- `recommendation.factor_roles_json`
- `paper_trades.strategy_code`
- `paper_trades.strategy_signal_id`
- `paper_trades.strategy_snapshot_json`
- `paper_orders.strategy_code`
- `paper_orders.strategy_signal_id`
当前已有 `strategy_version`,后续它表示策略版本,不再替代策略身份。
### 5.2 第二阶段:新增策略信号表
新增 `strategy_signals`,作为策略输出的标准事实表:
- `id`
- `run_id`
- `strategy_code`
- `strategy_version`
- `symbol`
- `direction`
- `signal_status`
- `confidence`
- `market_regime`
- `trigger_json`
- `factor_roles_json`
- `entry_plan_json`
- `risk_plan_json`
- `decision_log_json`
- `created_at`
推荐、挂单、持仓都引用 `strategy_signal_id`,形成完整链路。
### 5.3 第三阶段:策略运行与评价表
新增:
- `strategy_catalog`:策略注册、启用状态、适用市场、版本。
- `strategy_run_log`:每次策略扫描的运行结果。
- `strategy_performance_daily`:按日聚合策略表现。
## 6. 执行模块改造
### P0先做策略规范和血缘记录
目标:不大改链路,先保证每个推荐和 paper trading 记录知道“来自哪套策略”。
- 建立 `app/core/strategy_contract.py`,定义策略输出结构。
- 建立 `app/core/factor_roles.py`,统一因子角色分类。
-`recommendation` / `paper_trades` / `paper_orders``strategy_code``strategy_signal_id`
- 在确认层先把现有综合确认策略标为 `main_composite_v1`
-`box_breakout_pullback_4h` 标记为 `long_box_retest_4h_v1` 的核心触发候选,但仍通过完整策略条件判断。
### P1拆出第一个独立策略
目标:让 `long_box_retest_4h_v1` 独立运行,与其他策略平等并行。
- 新增 `app/strategies/box_retest_4h.py`
- 让它消费统一交易宇宙和 4H K线。
- 输出标准 `strategy_signal`
- 推荐层只消费标准信号,不关心策略内部细节。
- paper trading 保留 `strategy_code`
- 复盘页按策略展示表现。
### P2多策略编排与仲裁
目标:多个策略同时运行,但同一币种不要重复乱开仓。
- 新增 `strategy_orchestrator`
- 支持启用/禁用策略。
- 支持同币种冲突仲裁:同方向合并、不同方向拒绝或降级。
- 支持策略优先级和市场环境开关。
- 同一币种同一方向进入 paper trading 前必须检查账户集中度和累计杠杆。
### P3策略独立复盘与发布机制
目标:策略按独立样本晋级/淘汰,不再只看总评分。
- 每个策略独立统计:候选数、推荐数、成交数、胜率、平均收益、最大回撤、盈亏比、平均持仓时长。
- 每个策略按 market regime 拆分表现。
- 策略改动先进入灰度版本,不直接覆盖主版本。
- 连续低表现策略自动降级为 observe-only 或暂停。
## 7. 页面改造计划
### 策略交易页
- 持仓、挂单、已完成、日志增加 `策略` 列。
- 策略筛选器:全部 / 箱体突破回踩 / 量价加速 / 短周期观察 / 舆情确认。
- 交易详情展示当时的 `strategy_snapshot`
### 机会总览页
- 列表只显示核心结论。
- 详情页展示策略来源、触发因子、确认因子、入场因子、风险因子。
### 复盘中心
- 增加“按策略”视图。
- 每个策略显示:样本数、转化率、胜率、收益、最大回撤、适用行情。
- 因子归因仍保留,但作为策略内部解释,不再替代策略评价。
## 8. 验收标准
第一阶段完成后,至少满足:
- 任意一条 recommendation 能看到 `strategy_code`
- 任意一笔 paper trade 能看到 `strategy_code`
- 任意一笔 paper order 能看到 `strategy_code`
- 任意一个策略信号能追溯到 `strategy_signals` 或标准 `StrategySignal` 快照。
- 复盘能按 `strategy_code` 聚合收益和胜率。
- `box_breakout_pullback_4h` 不会被文档或代码误称为完整策略。
- 新增策略必须通过策略成立标准检查。
- 新数据不得出现空 `strategy_code`
## 9. 开发纪律
- 不能因为一个因子表现好,就直接让它下单。
- 不能把先决条件当作策略触发。
- 不能把归因因子当作实时交易条件。
- 不能让 paper trading 丢失策略来源。
- 不能只看总收益,必须按策略看收益和回撤。
- 新策略必须先 observe-only 或 paper-only积累样本后再考虑真实同步。