新手三大错误:未来函数、无视成本、无限调参
我的掌握程度:
先掌握这个答案
三错误详解:①未来函数:shift少写一个、rolling方向反了、财务对齐用报告期、全样本标准化——防错:代码审查清单+截断重跑检验(q-063);②无视成本:「先看信号好不好」的侥幸心理——防错:回测框架默认强制扣费(不可关闭),让没有成本假设的回测直接报错;③无限调参:20日动量试成18/19/21/22日,直到年化最高——防错:参数敏感性报告(参数±20%结果应平滑),调参次数记账(每多调一次,可信度打折)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
以信息可得时间对齐
财报报告期结束日不是市场获知信息的时间。对每个特征记录available_at,并确认不晚于决策时点;盘后数据通常不能用于同日收盘前下单。保留历史修订与退市样本,检查删尾重跑是否稳定。
成本必须按成交口径计算
声明换手是单向还是双向,是否有单笔最低佣金、卖出税费、借券利息和期货展期。成交价差、冲击与资金占用不能混为一个固定常数;对费率和参与率做压力测试。
本阶段实战方法 · 把行情数字变成可比较的收益
看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。
- 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
- 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
- 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。
使用边界
- 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
- 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
四大杀手在新手身上的典型化身是三个动作:代码里悄悄用了未来数据、回测不计成本、参数调到图表好看为止。每一个都让「学习」变成「自我欺骗的排练」。
由此产生的问题
三大错误的具体形态和防错机制是什么?
核心概念
三错误详解:①未来函数:shift少写一个、rolling方向反了、财务对齐用报告期、全样本标准化——防错:代码审查清单+截断重跑检验(q-063);②无视成本:「先看信号好不好」的侥幸心理——防错:回测框架默认强制扣费(不可关闭),让没有成本假设的回测直接报错;③无限调参:20日动量试成18/19/21/22日,直到年化最高——防错:参数敏感性报告(参数±20%结果应平滑),调参次数记账(每多调一次,可信度打折)。
为什么需要它
①错误的复利:三个错误常常叠加,回测虚高50%+很常见;②习惯的力量:新手期养成的每个坏习惯都会带进正式研究——现在多花10分钟做对,未来少付一年学费;③诚实的复利:学术界的「预注册」思想(先写假设和参数再跑数据)是最好的解药,量化研究同样适用。
实际应用场景
三件防错工具:①回测框架强制成本参数;②每次实验登记(日期/假设/参数/结果)的实验日志;③「预注册」习惯:分析前把假设写死,跑完不许改口径再重跑「直到好看」。
与之前知识的联系
q-084的宏观认知落到三个微观习惯。q-086的费曼检验会从外部再设一道防线。
⚠ 常见误解
- 只犯一点点没关系:前视哪怕只影响5%的交易日,也可能贡献大部分超额(错误集中在信息事件日)
- 调参是优化,不是错误:调参本身中性,无限调参+只报告最好结果=多重检验欺诈;报告分布而非最优值
- 以后工作了有同事把关就不怕:坏习惯在无人监督的个人研究期养成的概率最大——现在就是养成期
🛠 本题实践任务
建立你的「实验日志」模板(Excel/Notion):日期、假设、关键参数、结果指标、结论(入库/放弃/待定)。并写下第一条记录:本课程至今你印象最深的一个失败认知。
💡 提示(先自己想5分钟再看)
模板五列就够;失败认知示例:曾以为分红是白赚的/回测不计成本也没差多少。
✅ 验收标准
日志模板建成+第一条记录。研究记忆外置化,是从业余走向专业的仪式。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(四大杀手),再用案例、公式和代码帮助理解。此功能需要先启用服务。