涨停追击策略(zt-chaser)设计方案 v0.1
来源: Obsidian Vault
涨停追击策略(zt-chaser)设计方案 v0.1
一、策略定位
不是全自动交易机器人。A股涨停封单瞬间抢单有物理障碍(通道延迟、排单规则),纯程序化追板不现实。定位为:
> 半自动决策辅助系统 = 量化筛选候选 + 多因子评分 + 实时监控预警 + 人工确认下单
两个产出物:
1. 盘后/盘前回测引擎:验证葵花宝典规则在历史数据上的有效性,输出每条规则的预测力
2. 盘中实时筛选器:每分钟扫描全市场涨停股,按评分排序推送Top-N候选到飞书/终端
二、规则→数据→因子 映射表(已验证可行)
| 规则 | 原文要点 | 数据源字段 | 量化定义 | 可回测 |
|--------|----------------------------|-------------------------|------------------------------|------------|
| A | 涨停时间<10:10,越早越好 | up_limit_time | 时间戳转分钟数,≤10:10=1分 | ✅ |
| B | 换手率小(普通<2%, ST<1%) | turnover_ration_real | 直接数值比较 | ✅ |
| C | 盘整突破>超跌反弹>连续上攻 | daily K线(20日) | N日箱体突破/跌幅/连阳判定 | ✅ |
| D | 大盘破位不追,波段上涨胆大 | updown_distribution | 涨跌家数比、涨停数、市场评语 | ✅ |
| E | 第一个涨停>第二个 | up_limit_keep_times | ==1最高分,递减 | ✅ |
| F | 高开高走,开盘=最低最好 | daily open/low/close | (open-low)/(high-low)比值 | ✅ |
| G | 重大利好首次披露 | reason文本 | 关键词匹配+首次出现标记 | ⚠️半结构化 |
| H | 龙头股>跟风股 | uplimit_hot+板块内排序 | 板块涨停数×个股板块内排序 | ✅ |
| I1 | 均价线保持向上 | stk_mins 1min | VWAP斜率>0 | ✅ |
| I2 | 涨停前量:涨停后量>3:1 | stk_mins 1min | 按涨停时间戳分割求和比 | ✅ |
| I3 | 涨停后量极度萎缩 | stk_mins 1min | 涨停后每分钟均量/涨停前均量 | ✅ |
| 封单 | 封单>5位数(>万手) | fd_close/fengdan_volumn | 直接数值 | ✅ |
| 未开板 | 涨停板未被打开过 | stk_mins 1min | 涨停后low≥涨停价×(1-0.1%) | ✅ |
| 委托盘 | 买盘不比卖盘大很多 | Level-2盘口 | ❌无数据源 | ❌ |
结论:14条规则中13条可回测,仅"委托盘对比"缺失(实盘人工看盘补充)。
三、因子体系设计(9维+1辅助)
因子分三层:
L1 硬性过滤(不满足直接排除):
- ST股换手>1% 或 普通股换手>5% (排除异常放量)
- 大盘暴跌日(涨跌家数比<0.3) (规则D硬过滤)
- 连板≥4 (抛压过大)
L2 核心评分因子(0-100加权):
F1 涨停时间 权重20 (09:30=100, 10:10=60, 10:10后=0-40递减)
F2 换手率 权重15 (<1%=100, 2%=60, >3%=0)
F3 连板数 权重15 (1板=100, 2板=50, 3板=20)
F4 封单强度 权重15 (fd_close≥5万手=100, 按流通市值归一化)
F5 量比 权重15 (涨停前量:涨停后量, ≥4:1=100, 3:1=80)
F6 个股形态 权重10 (盘整突破=100, 超跌反弹=60, 连续上攻=30)
F7 板块龙头 权重5 (板块涨停≥3且个股板块内涨幅Top3=100)
F8 开盘强度 权重5 (开盘=最低=100, 高开高走=80, 低走=20)
L3 加分项(可选,各+5分上限+15):
G1 一字板 (+5)
G2 涨停板全程未打开 (+5)
G3 首次利好披露(reason含"首次") (+5)
权重初始值来自葵花宝典原文的强调程度,Phase 2用vectorbt网格寻优确定最优权重组合。
四、回测方法论(严格合规)
4.1 回测Y变量(3个维度)
入场: 涨停日T收盘确认信号(非盘中追入,用收盘数据评分)
买入: T+1开盘价(模拟次日竞价买入, 贴近实战)
卖出: 三种出场策略对比:
Y1 保守: T+1开盘即卖(next_open_pct)
Y2 标准: T+1盘中最高90%卖出(需daily high补充)
Y3 激进: T+1收盘卖(next_close_pct)
4.2 回测区间
- 主测:近6个月(约120交易日),每日约50-120只涨停股,样本量6000-14000笔
- 样本外:再往前3个月做out-of-sample验证
4.3 合规清单(对照七层框架)
| # | 检查项 | 本策略处理 |
|-----|------------|---------------------------------------------------------------|
| 1 | T+1约束 | T日涨停确认→T+1开盘买入,天然T+1 |
| 2 | 交易成本 | 买入佣金万1+卖出佣金万1+印花税0.05% |
| 3 | 前视偏差 | 因子只用T日收盘前数据,next_*字段仅做Y变量 |
| 4 | 整手约束 | 按手数取整 |
| 5 | 涨停买不到 | 关键! 盘中追板能否成交是概率事件,回测需加成交率折扣(待标定) |
4.4 ⚠️ 回测的核心局限(必须诚实面对)
1. 成交率假设:回测假设"追入必成交",实盘中强势涨停板根本买不到。需引入成交率模型(封单越大成交概率越低)或直接改用"T日尾盘确认→T+1开盘买入"的保守模式
2. 封单数据是收盘值:盘中封单会变化,收盘封单≠你追入时刻的封单
3. 滑点:次日开盘买入有竞价滑点
→ 建议回测同时输出两套结果:理想(假设成交) vs 保守(成交率折扣0.5)
五、分阶段实施计划
Phase 1:因子有效性验证(2-3天)
目标:用数据证明葵花宝典每条规则是否有预测力
输入: 近6个月每日uplimit_stocks + review_uplimit_reason
产出: factor_analysis_report.html
内容:
- 每条规则(A-I)分5档,画出各档次日收益&胜率
- 例: 涨停时间 09:30-09:45 vs 09:45-10:10 vs 10:10后 的次日表现对比
- 热力图: 因子组合的胜率分布
- baseline对比: 全部涨停67.5%胜率 vs 规则筛选后胜率
决策点: 哪些因子有效(保留), 哪些无效(剔除或降权)
Phase 2:评分模型+参数寻优(2-3天)
目标:确定最优因子权重组合
输入: Phase 1验证有效的因子
方法: vectorbt参数网格扫描(各因子权重排列组合)
产出:
- 最优权重组合(config.yaml)
- 回测报告(净值曲线/夏普/回撤/胜率)
- 参数敏感性热力图(7组扰动回撤差<5pp才上线)
技术栈: PyBroker回测框架(与现有策略一致)
Phase 3:实盘盘中筛选器(2-3天)
目标:每分钟输出候选股评分
运行: 盘中9:25-10:30高频运行(cron每分钟)
流程:
1. 拉取当前涨停股列表(uplimit_stocks实时)
2. 补充分时数据(stk_mins)算量比/均价线
3. 评分模型计算每只候选股总分
4. 推送Top-5到飞书(含评分明细+建议买入价+止损位)
人工: 用户看到推送后自行决定是否追入
六、关键决策点(需你确认)
D1. 策略定位确认:半自动(量化筛选+人工下单)?还是你有全自动抢单的券商接口?
D2. 回测入场假设:我倾向"T日收盘确认信号→T+1开盘买入"(可回测、保守、无成交率问题)。原文说的"盘中追涨停"更适合做实盘筛选器的预警逻辑,而非回测入场点。你同意这个拆分吗?
D3. 策略命名:zt-chaser(涨停追击)?或你有偏好的名字?
D4. 代码位置:放策略库 mystocks/策略/zt-chaser/?技术栈用PyBroker(与eod-overnight一致)?
D5. 实施范围:先只做Phase 1(因子验证)?还是三个Phase一起规划、逐个审批实施?