多策略接入流程图
总体思路
现有“原始信号 + 策略共振”可以视为第一套策略:共振策略。
新增打板策略时,不建议把打板信号塞进共振池。更好的方式是:
- 共振策略保留自己的信号池和共振池。
- 打板策略新增自己的前池、观察池、触发池。
- 两个策略最终都输出统一的交易意图。
- 统一策略协调器负责去重、仲裁、风控、额度控制,再写入订单队列。
并行流程图
flowchart TD subgraph R["共振策略"] R1["量化云原始信号"] --> R2["信号清洗/去重<br/>proc_signal_listener"] R2 --> R3["原始信号池<br/>raw_signals / cleaned_signals"] R3 --> R4["共振候选池<br/>resonance_detailed"] R4 --> R5["共振策略判断<br/>共振次数/积分/概念过滤/档位"] R5 --> R6["共振交易意图<br/>strategy_intents"] end subgraph L["打板策略"] L1["打板候选来源<br/>涨幅榜/昨日涨停/竞价强/手动池/共振候选"] L1 --> L2["打板前池<br/>limit_up_pre_pool"] L2 --> L3["基础过滤<br/>价格/市值/ST/新股/流动性/黑名单"] L3 --> L4["打板观察池<br/>limit_up_watch_pool"] L4 --> L5["实时盯板<br/>接近涨停/封板/炸板/回封/封单变化"] L5 --> L6["打板触发池<br/>limit_up_triggered"] L6 --> L7["打板策略判断<br/>封板强度/回封速度/炸板次数/时间窗口"] L7 --> L8["打板交易意图<br/>strategy_intents"] end R6 --> C["统一策略协调器<br/>proc_strategy_router"] L8 --> C C --> C1["同票去重"] C1 --> C2["策略优先级仲裁"] C2 --> C3["统一风控<br/>黑名单/价格/市值/涨幅/仓位"] C3 --> C4["额度控制<br/>单策略限额/总买入次数/资金预算"] C4 --> O["订单队列<br/>order_queue"] O --> E["执行引擎<br/>proc_execution_engine"] E --> T["同花顺交易"]两套策略对比
阶段 共振策略 打板策略 数据来源 量化云原始信号 涨幅榜、昨日涨停、竞价强、手动池、共振候选 前池 raw_signals / cleaned_signals limit_up_pre_pool 策略池 resonance_detailed limit_up_watch_pool 触发池 共振次数/积分达标 limit_up_triggered 判断重点 多源共振、权重积分、概念强度 封板强度、炸板回封、封单、时间窗口 输出 strategy_intents strategy_intents 下单协调 proc_strategy_router proc_strategy_router WebUI 展示建议
策略观察区 ├── 共振策略 │ ├── 原始信号 │ └── 策略共振 │ ├── 打板策略 │ ├── 打板前池 │ ├── 打板观察 │ └── 打板触发 │ └── 统一交易意图 ├── 待仲裁 ├── 已通过 └── 已下单关键原则
共振策略和打板策略各有自己的池; 只有最终交易意图进入统一协调器。这样做的好处:
- 不污染现有共振池语义。
- 打板策略可以拥有独立的高频观察逻辑。
- WebUI 可以横向对比不同策略状态。
- 多策略同时命中同一只股票时,由统一协调器仲裁。
- 后续添加第三个策略时,不需要再改执行引擎。
建议新增模块
模块 作用 proc_limit_up_strategy.py 打板策略引擎,维护打板前池、观察池、触发池 proc_strategy_router.py 多策略统一协调器,负责去重、优先级、风控、额度 strategy_intents Redis 统一交易意图池 limit_up_pre_pool 打板前池 limit_up_watch_pool 打板观察池 limit_up_triggered 打板触发池 limit_up_detailed WebUI 打板策略详情展示 统一交易意图示例
共振策略输出:
{ "strategy_id": "resonance_v1", "strategy_type": "resonance", "symbol": "002170", "side": "buy", "intent": "open", "priority": 10, "score": 4.8, "suggested_amount": 100, "reason": "多源共振,积分达基础档", "tags": ["共振", "T+1量化", "强势"], "raw": {} }打板策略输出:
{ "strategy_id": "limit_up_v1", "strategy_type": "limit_up", "symbol": "600388", "side": "buy", "intent": "open", "priority": 12, "score": 87, "suggested_amount": 100, "reason": "首次封板,回封强,封单充足", "tags": ["打板", "首板", "回封"], "raw": { "seal_amount": 83000000, "open_board_count": 1, "first_seal_time": "09:42:16", "last_reseal_time": "09:48:03" } }接入顺序建议
第一阶段:先可视化和最小接入。
1. 新增 proc_limit_up_strategy.py 2. 新增 limit_up_pre_pool / limit_up_watch_pool / limit_up_triggered / limit_up_detailed 3. WebUI 增加打板策略展示区 4. 打板策略先只输出观察和触发,不急着实盘下单第二阶段:加入统一协调器。
1. 新增 strategy_intents 2. 新增 proc_strategy_router.py 3. 共振策略和打板策略都只提交交易意图 4. router 统一决定是否写入 order_queue第三阶段:实盘运行。
1. 配置每个策略的 enabled / priority / max_daily_buys / buy_amount 2. 打开打板策略下单开关 3. 观察同票冲突、资金占用、下单延迟 4. 再逐步优化打板评分模型同一只股票同时被多个策略命中时,更推荐合并成一笔订单并按比例归属,还是选一个主策略负责持仓和退出、其他策略只保留命中标签?这部分会直接影响后续卖出规则和策略收益统计。
@ostaer_summar #1 多个策略命中的时候属于共振,的确是要只算一笔委托。
精细化的做法是给每个策略设置分值,共振的时候加起来的分值,按分值的比例买入。
比如竞价多头5分,阿尔法6分,T+1是3分(只是打个比方)标记一处地点📍