2、核心概念:价格序列、波动率、噪音、信号与阈值的关系、过拟合风险

做量化交易,说白了就是跟价格数据打交道。但价格数据不是金子,里面掺着大量沙子。怎么把沙子筛掉,留下金子?这就是阈值要做的事。这一章,我们先把几个核心概念理清楚。你只有把这些概念吃透了,后面设定阈值时才不会跑偏。

2.1 价格序列:交易的原始素材

价格序列,就是按时间顺序排列的价格数据。你打开任何一个交易软件,看到的那条K线图,本质上就是一条价格序列。它是最原始的素材,所有策略都从这里开始。

价格序列有几种常见频率:

  • Tick 级别 – 每笔成交都记录,数据量巨大,噪音也多。
  • 分钟级别 – 1分钟、5分钟、15分钟,短线交易常用。
  • 小时级别 – 1小时、4小时,很多趋势策略喜欢用。
  • 日线级别 – 最经典,回测快,信号相对干净。

我早期做交易时,直接拿收盘价序列就跑策略,结果回测漂亮得一塌糊涂,实盘却亏得怀疑人生。后来才明白,价格序列里除了趋势,还有大量我不了解的「杂质」。那些杂质,就是噪音和波动率的混合体。

这里有个关键点你要记住:价格序列不是独立同分布的。它有趋势性、自相关性,还有波动率聚集效应——也就是大波动后面往往跟着大波动。这些特征直接影响你该怎么设阈值。

核心观点:价格序列是阈值设定的输入层。输入质量决定输出上限。如果你用的频率太高、数据太脏,后面再怎么调阈值都很难救回来。

2.2 波动率:市场的呼吸节奏

波动率,通俗讲就是价格跳动的幅度。市场安静时波动率低,消息出来时波动率飙升。它就像市场的呼吸节奏——有时候平稳,有时候急促。

我个人习惯用 ATR(平均真实波幅) 来度量波动率,因为它比标准差更抗极端值。计算方式很简单:

# 伪代码:计算20周期ATR
high = [12.5, 12.8, 12.6, ...]
low  = [12.3, 12.4, 12.2, ...]
close = [12.4, 12.6, 12.5, ...]

def calc_atr(high, low, close, period=20):
    tr_list = []
    for i in range(1, len(high)):
        tr = max(high[i] - low[i],
                 abs(high[i] - close[i-1]),
                 abs(low[i] - close[i-1]))
        tr_list.append(tr)
    atr = avg(tr_list[-period:])
    return atr

波动率和阈值的关系非常直接:波动率越大,阈值应该越宽。为什么?因为波动大的时候,价格正常的摆动幅度就大,如果你阈值设得太小,会把正常的波动也当成信号过滤掉,那就得不偿失了。

我记得有一次在BTC现货上做波动率过滤,把ATR阈值设成了固定值1.5%。结果市场一波动,这个值要么太紧要么太松,怎么调都不对。后来改成动态阈值,用ATR乘以一个倍数,才稳定下来。这个教训让我记住了:阈值必须跟着波动率走。

市场状态 波动率水平 阈值建议
盘整期 低(ATR < 1%) 收紧,用1.5~2倍ATR
趋势启动 中(ATR 1%~3%) 适中,用2~3倍ATR
重大消息期 高(ATR > 3%) 放宽,用3~5倍ATR

2.3 噪音与信号:如何分辨真伪

信号,是你想捕捉的可重复价格模式。比如突破前高、均线金叉、RSI超卖——这些如果统计上显著,就是信号。

噪音,是那些你无法解释、也不该去解释的随机波动。它可能来自:

  • 微观结构噪音 – 买卖盘口瞬间不平衡造成的毛刺。
  • 流动性噪音 – 大单砸穿盘口时的异常跳动。
  • 情绪噪音 – 散户追涨杀跌造成的无规律波动。

我见过最典型的案例:有人在15分钟图上发现了一个「高胜率」形态,回测胜率70%。兴冲冲跑实盘,结果连续亏损。复盘发现,那个形态只是在盘整期的噪音中凑巧出现的模式,根本不是信号。这就是把噪音当信号的典型。

那么,怎么区分信号和噪音?我给出三个判断维度:

  1. 可重复性 – 信号必须在不同时间段、不同品种上都能出现。
  2. 统计显著性 – 信号的出现频率不能太低,收益分布要有明显的偏移。
  3. 逻辑合理性 – 必须有交易逻辑支撑,不能是纯数据挖掘结果。
阈值设定核心概念关系图 价格序列(原始数据) 波动率计算(ATR/Std) 信号与噪音分离 阈值设定(决策边界) 过拟合风险(⚠ 警戒区) 💡 关系要点 • 波动率决定阈值基准 • 噪音影响阈值调整方向 • 过拟合是优化的边界 • 阈值是信号/噪音的分界

2.4 阈值:信号与噪音的分界线

阈值本质上是一条分界线。线上算信号,线下算噪音。就这么简单。但这条线画在哪里,直接决定了你的策略是赚钱还是亏钱。

我早期用过很粗糙的固定阈值法。比如价格波动超过2%就开仓。结果呢?震荡市里反复打脸,趋势市里又常常踏空。后来我改用动态阈值——用波动率去校准。你想想看,市场的节奏一直在变,阈值不变怎么行?

下面这张表总结了三种常见的阈值设定策略,你可以根据品种和市场状态来选:

策略类型 计算方法 适用场景 优缺点
固定阈值 常数,如 2% 波动率稳定的品种 简单但不灵活,容易失效
波动率倍数阈值 ATR × 倍数 大部分趋势策略 自适应强,但倍数需要调
分位数阈值 历史价格变动分位数 盘整突破策略 统计合理,但计算较复杂
我的建议:新手从波动率倍数阈值入手。用ATR作为基准,倍数从2倍开始试,然后根据回测结果微调。这样既不过拟合,又保留了自适应能力。

2.5 过拟合风险:警惕过度优化

过拟合,是阈值设定里最大的坑。说白了就是:你的策略在历史数据上表现完美,一到实盘就原形毕露。为什么?因为你把历史数据里的噪音也当成信号去拟合了。

我曾经做过一个BTC的突破策略。回测时反复调整阈值参数,把胜率从55%硬生生调到了68%。当时觉得自己发现了圣杯。结果实盘第一个月就亏了12%。后来复盘发现,那个68%的胜率完全是对历史数据中几段特殊行情的过拟合。一旦市场结构变了,策略立刻失效。

过拟合的几个典型表现:

  • 参数敏感 – 阈值稍微变一点,绩效就大幅波动。
  • 样本内外差异大 – 回测和实盘差距超过30%。
  • 逻辑牵强 – 你解释不清为什么阈值恰好是那个值。
⚠ 警惕信号:如果你发现自己在调整阈值时,开始针对某一段特定行情做优化,比如「把阈值设成2.37%就能抓住那次大涨」——请立刻停下来。你正在走向过拟合。阈值应该是稳健的,而不是为某一次行情量身定做的。

怎么避免过拟合?我的经验是三个方法:

  1. 样本外验证 – 至少留出30%的数据不做任何调整,最后一次性验证。
  2. 简化阈值结构 – 能用1个参数解决的问题,别用3个。
  3. 引入波动率锚定 – 让阈值跟随市场波动自然变化,减少手动干预。

嗯,说到最后,其实阈值设定的核心就一句话:找到那条能稳定区分信号和噪音的线,并且让它跟着市场节奏走。过拟合是这条路上最大的敌人,但只要你对波动率、噪音和信号的关系有清晰的理解,就能避开大部分陷阱。