附录 C:常见误区对照表
量化研究里大多数"看起来很美、实盘就崩"的结果,都源于少数几个反复出现的误区。本附录把全书各章强调过的陷阱汇成一张速查表,便于在动手前、复盘时对照自查。每条都标注了对应章节,便于回溯细节。
数据与回测口径
| ❌ 常见误区 |
✅ 正确做法 |
章节 |
| 在 \(T\) 时刻用到 \(T\) 之后才可得的数据(未来函数 / 前视偏差) |
严格时间戳对齐;向量化记得 shift(1),事件驱动天然杜绝 |
3、4、12 |
| 用不复权原始价回测,除权日出现跳空 |
回测用前复权(adjust="qfq") |
3 |
| 只用当前存续的标的回测(幸存者偏差) |
维护含退市标的的全集数据库 |
3 |
| 把向量化回测当成能模拟撮合/资金/T+1 |
需要路径依赖时改用事件驱动回测 |
4 |
| 裸回测得到漂亮高收益 |
计入佣金、印花税、滑点与换手成本 |
6、10 |
市场制度与账户语义
| ❌ 常见误区 |
✅ 正确做法 |
章节 |
| A 股当日买入当日卖出 |
检查 available_position(T+1 可用持仓) |
6 |
| 涨跌停封板仍假设能成交 |
用数据携带 can_buy / can_sell 等标记辅助判定 |
6 |
| 把期货保证金账户当现货账户,开仓即扣全额名义本金 |
看 equity / used_margin / notional_value 理解杠杆暴露 |
7 |
| 期权只押方向、忽略希腊字母 |
同时管理 Delta / Gamma / Theta / Vega 暴露 |
8 |
优化与验证
| ❌ 常见误区 |
✅ 正确做法 |
章节 |
| 直接采用样本内夏普最高的单点参数 |
寻找"参数平原",做样本外验证 |
11 |
| 试了很多组参数,挑最好的就上 |
用 DSR 按尝试次数抬高夏普门槛(多重检验校正) |
10、11 |
| 只用一条历史路径(单次 walk-forward)下结论 |
用 CPCV 得到夏普比率的概率分布 |
11 |
| 时间序列直接随机 K-Fold 交叉验证 |
用 Purged K-Fold + Embargo 防信息泄露 |
12 |
| 固定时间窗口标签忽略期间回撤 |
用三重屏障法(止盈/止损/时间)打标签 |
12 |
| 样本太短就断言策略有效 |
参考最小回测长度,低夏普策略需更长样本 |
11 |
指标与工程
| ❌ 常见误区 |
✅ 正确做法 |
章节 |
| 指标 warmup 未满就发出交易信号 |
计算后先剔除前部 NaN / 空值区段 |
16 |
| 迁移时不对齐结果就直接切 Rust 后端 |
先用 backend="python" 对齐基线,再切 rust |
16 |
多输出指标解包顺序记错(如 MACD/BBANDS) |
牢记解包顺序,结果不报错但语义会悄悄失真 |
16 |
| 只看全周期静态夏普,忽略局部波动 |
配合滚动夏普 / 滚动波动率观察稳定性 |
13 |
实盘运维
| ❌ 常见误区 |
✅ 正确做法 |
章节 |
| 凭"本地请求成功"就推进订单终态 |
CTP strict 模式下终态以柜台 OnRtnOrder 回报为准 |
15 |
把内置 MiniQMT/PTrade 当生产级开箱即用 |
视为占位骨架;A 股集合竞价/打新等需自定义或增强 broker |
15 |
| 不经模拟盘直接实盘 |
先 paper 充分验证,再 broker_live,灰度发布 |
15 |
| 实盘不开前置风控 |
RMS 前置风控(单笔上限、资金使用率、日内撤单数、策略级止损)是最后防线 |
15 |
一句话总结:量化里最贵的错误,往往不是模型不够复杂,而是悄悄用了未来信息、忽略了成本、或被多次尝试挑出的"运气"骗了。 对照本表,能避开其中大半。