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%。兴冲冲跑实盘,结果连续亏损。复盘发现,那个形态只是在盘整期的噪音中凑巧出现的模式,根本不是信号。这就是把噪音当信号的典型。
那么,怎么区分信号和噪音?我给出三个判断维度:
- 可重复性 – 信号必须在不同时间段、不同品种上都能出现。
- 统计显著性 – 信号的出现频率不能太低,收益分布要有明显的偏移。
- 逻辑合理性 – 必须有交易逻辑支撑,不能是纯数据挖掘结果。
2.4 阈值:信号与噪音的分界线
阈值本质上是一条分界线。线上算信号,线下算噪音。就这么简单。但这条线画在哪里,直接决定了你的策略是赚钱还是亏钱。
我早期用过很粗糙的固定阈值法。比如价格波动超过2%就开仓。结果呢?震荡市里反复打脸,趋势市里又常常踏空。后来我改用动态阈值——用波动率去校准。你想想看,市场的节奏一直在变,阈值不变怎么行?
下面这张表总结了三种常见的阈值设定策略,你可以根据品种和市场状态来选:
| 策略类型 | 计算方法 | 适用场景 | 优缺点 |
|---|---|---|---|
| 固定阈值 | 常数,如 2% | 波动率稳定的品种 | 简单但不灵活,容易失效 |
| 波动率倍数阈值 | ATR × 倍数 | 大部分趋势策略 | 自适应强,但倍数需要调 |
| 分位数阈值 | 历史价格变动分位数 | 盘整突破策略 | 统计合理,但计算较复杂 |
2.5 过拟合风险:警惕过度优化
过拟合,是阈值设定里最大的坑。说白了就是:你的策略在历史数据上表现完美,一到实盘就原形毕露。为什么?因为你把历史数据里的噪音也当成信号去拟合了。
我曾经做过一个BTC的突破策略。回测时反复调整阈值参数,把胜率从55%硬生生调到了68%。当时觉得自己发现了圣杯。结果实盘第一个月就亏了12%。后来复盘发现,那个68%的胜率完全是对历史数据中几段特殊行情的过拟合。一旦市场结构变了,策略立刻失效。
过拟合的几个典型表现:
- 参数敏感 – 阈值稍微变一点,绩效就大幅波动。
- 样本内外差异大 – 回测和实盘差距超过30%。
- 逻辑牵强 – 你解释不清为什么阈值恰好是那个值。
怎么避免过拟合?我的经验是三个方法:
- 样本外验证 – 至少留出30%的数据不做任何调整,最后一次性验证。
- 简化阈值结构 – 能用1个参数解决的问题,别用3个。
- 引入波动率锚定 – 让阈值跟随市场波动自然变化,减少手动干预。
嗯,说到最后,其实阈值设定的核心就一句话:找到那条能稳定区分信号和噪音的线,并且让它跟着市场节奏走。过拟合是这条路上最大的敌人,但只要你对波动率、噪音和信号的关系有清晰的理解,就能避开大部分陷阱。