跳转至

⚠️ 免责声明:本章仅为教育与研究方法展示,不构成任何投资建议。 所有回测结果来自历史数据,不代表未来表现。投资有风险,决策需独立判断。

第八课:在线统计——你没有时光机

本章代码:code/lesson8_online_update.py 运行方式:python lesson8_online_update.py

8.0 策略概述

这是什么策略

这不是交易策略。这是诚实性检验

前七课所有的策略都有一个隐藏的问题:"参数是用全部数据调的。"我们回测 PE 策略时,先看了 18 年的全部数据,然后选了最好的参数。但 2010 年的投资者不可能用 2017 年的数据来调参数。

本课把"离线"(用全部数据)和"在线"(只用历史数据)两种统计方式做对比,让你看到差异有多大。

核心概念

离线(作弊) 在线(真实)
定义 用全部数据算统计量 只用"到今天为止"的数据
例子 2026 年回看 2000—2026,算出均值 0.27% 2008 年只能看到 2000—2008,算出均值 0.06%
问题 你的参数选择"预知"了未来 这才是真实投资中能用的数据

8.1 用真实数据跑一遍

# 离线(作弊):一次性用全部 8683 天算均值
offline_mean = np.mean(all_8683_days)

# 在线(真实):每一天只能看到"到今天为止"的数据
online_mean = [np.mean(daily_returns[:i+1]) for i in range(len(daily_returns))]

CSI300 的结果(跑 python code/lesson8_online_update.py 复现):

在线均值(只用过去):最终值 +0.033% / 天
离线均值(偷看 ±10 天):最终值 -0.535% / 天
过程中最大偏离:1.78 个百分点(发生在 2008 年附近)

为什么差这么多? 2008 年金融危机前后,每天的"±10 天中心化均值"把暴跌前后的数据一起算进去了——2008 年的投资者不可能知道未来 10 天还会跌多少。他能看到的只有"到今天为止"的数据。在线和离线的差值,就是"未来信息"的价格。


图 8-1:在线 vs 离线滚动均值(沪深300 日收益率 %)。 蓝线只用过去数据(在线),红线偷看未来 ±10 天(离线)。两条线之间的差距,就是"未来信息"的价格。

图 8-1

8.2 这解释了 PE 策略的悲剧

第二章里 PE 策略 +44.5% 的超额(深证红利,2008—2017),换个指数就变成 -7.5%(沪深300)——根本原因就在这一课。

仔细看第 1—5 课的策略:它们计算统计量时都用"在线"窗口(只用过去的数据),这一步没有作弊。但参数是看完全部数据后调的——WARMUP=96、20/30/60/80 分位、空仓利率 3.5%,任何一个数字你都可以"为了结果更好看"而调整。参数选完之后,回测当然好看——因为你选参数的时候,已经偷看了答案。

这不是策略失效。是"调完参数再回测"这个过程本身,等价于离线统计。 +44.5% 和 -7.5% 之间差的不只是指数——还有你"恰好"选了让结果好看的参数和窗口。


8.3 学完这一课你应该做的

每次你调参、回测、找到一个"看起来很好"的结果,问自己两个问题:

1. 我用的是全部数据还是滚动窗口? 如果参数是在全部数据上调的——这就是离线作弊。

2. 如果只用前一半数据调参、后一半数据验证,结果还一样吗? 如果不一样——你找到的不是规律,是噪音。


8.4 这一课教了你什么

  1. "离线均值"和"在线均值"可以差近 2 个百分点——未来数据污染统计的代价是实打实的。
  2. PE 策略的 +44.5% 与 -7.5% 之差,一半来自指数选择,一半来自"看完数据再调参"——这就是过拟合。
  3. 滚动窗口测试是唯一诚实的验证方法。
  4. 这一课没有教你新的策略——它教你怎么拆穿别人的策略。
  5. 以后有人给你看回测:第一个问题不是"收益率多少",是"你的训练集和测试集怎么分的"。

8.5 课堂问答

问:那之前跑的 PE 策略是不是全部作废了?

不是作废——是从\"交易策略\"降级为\"思维框架\"。PE 分位数的逻辑本身没有错。但你不能拿它直接下单。你可以拿它来回答\"上证 50 现在在历史上是什么位置\"——这是一个信息输入,不是一个交易指令。

问:这些量化策略是不是都太基础了,在现代市场根本无效?

对了一部分。这些策略捕捉的 alpha 来源是 20 年前的。2015 年之后,每个量化基金都在做同样的事,alpha 被挤光了。但你不需要和量化基金竞争——把同样的方法论迁移到量化基金不碰的领域——你的行业、你的专业、你每天接触的数据——你仍然有优势。


动手练习(第 8 课)

  1. 入门:改窗口。把"±10 天中心化"改成"±30 天",在线/离线偏离变大还是变小? 窗口越长,偷看未来的代价越大吗?
  2. 进阶:真正的 walk-forward。只用 2005-2015 的数据调第 2 课的参数, 然后在 2016-2026 上回测。和"看完 2026 再调参"的结果对比—— 差多少?这就是"没有时光机"的代价。
  3. 挑战:审计一次你自己的决策。回忆你最近一次投资或业务决策: 你是先有假设再找数据,还是先看了数据再编理由? 诚实回答,然后想想下次怎么改。

下节预告: 前八课你学会了看收益、看风险、看分布、看日历、看在线统计。现在该做一个真正的策略对决了——PE(价值)vs 动量(趋势),谁赢?第九课。