涨停买不进、跌停卖不出:回测必须模拟的现实
我的掌握程度:
先掌握这个答案
回测必须内置的涨跌停规则:①买入信号出现在涨停(尤其一字板/巨单封板)→ 放弃或顺延,成交概率按封单/成交量估计;②卖出信号(含止损)出现在跌停 → 无法成交,持仓继续暴露,顺延到可卖日;③开盘一字板的当日收益率不能计入「可获得的收益」;④统计影响:小盘策略、ST策略、题材策略的回测受此约束影响最大。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
每一笔收益都要有可执行时间线
打印数据截止时间、信号时间、订单时间、成交时间和持仓收益区间。收盘信号不能乘当天完整收益;次日开盘成交也不能无条件拿到整个close-to-close收益。用原始价格判断可成交性,并纳入停牌与涨跌停。
本阶段实战方法 · 把行情数字变成可比较的收益
看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。
- 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
- 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
- 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。
使用边界
- 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
- 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
回测里,策略在第100天「完美地」以跌停价止损、又「精准地」买到次日的涨停股,年化收益漂亮得发光。实盘中,这两笔交易都不会发生——涨跌停的一侧根本没有对手盘。
由此产生的问题
涨跌停对回测真实性有哪些具体破坏?正确的处理规则是什么?
核心概念
回测必须内置的涨跌停规则:①买入信号出现在涨停(尤其一字板/巨单封板)→ 放弃或顺延,成交概率按封单/成交量估计;②卖出信号(含止损)出现在跌停 → 无法成交,持仓继续暴露,顺延到可卖日;③开盘一字板的当日收益率不能计入「可获得的收益」;④统计影响:小盘策略、ST策略、题材策略的回测受此约束影响最大。
为什么需要它
①防自欺:忽略涨跌停的回测普遍高估收益2-10个点/年(策略越偏短线越严重);②信号衰减的真实机制:很多「涨停次日买入」的策略在实盘中的滑点就是涨停打开的缺口本身;③风控设计:既然极端时刻卖不出,仓位必须事前控制(单票上限、行业分散),这是规则倒逼出的风控哲学。
实际应用场景
聚宽/回测引擎的「成交限制」设置;实盘算法遇到涨停股自动跳过;统计「因涨跌停未成交的交易占比」是评估回测真实性的诊断指标。
与之前知识的联系
q-043讲了制度,本题讲它的量化工程落地——第一个「回测陷阱」提前预习(阶段6有完整清单)。q-046停牌是流动性中断的另一形态,处理逻辑同源。
⚠ 常见误解
- 回测加上涨跌停约束就完全真实了:还有滑点、冲击、流动性、撮合排队等,约束是必要不充分
- 涨停买入顺延次日就能成交:次日往往高开(信号被别人抢走),顺延价差本身就是成本
- 大盘蓝筹不受影响:极端行情(2015年7月)千股跌停时,权重股同样卖不出
🛠 本题实践任务
找一只最近连续涨停(≥2连板)的股票,看它每天的成交量变化:连板越久成交量是否越小(想买买不到)?开板那天的量有多大?
💡 提示(先自己想5分钟再看)
涨停股排行页可筛选连板股;观察「一字缩量→放量开板」的经典节奏。
✅ 验收标准
记录连续几天的成交量序列+一句话描述流动性如何随连板枯竭。这是「纸面收益≠可得收益」最直观的市场样本。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(涨跌停、流动性),再用案例、公式和代码帮助理解。此功能需要先启用服务。