三重障碍法:金融事件标注详解
了解止盈阈值、止损阈值和最长持有时间如何共同确定事件标签,以及如何处理价格路径歧义和结果区间重叠。
本指南内容三个条件共同定义一个事件标签
简短摘要
三重障碍法根据事件开始后最先发生的条件,为金融事件赋予标签:上方止盈阈值、下方止损阈值,或最长持有期限。每个事件的阈值依据起始价格 P₀ 和事件开始时已知的波动率尺度 σᵢ设定。本文约定,先触及上方障碍标为 +1,先触及下方障碍标为 −1,两条水平障碍都未触及便到期则标为 0。有些实现会改用到期收益的正负号,因此研究中应明确记录采用的规则。
三个条件共同定义一个事件标签
对事件 i,记录开始时间 tᵢ、价格 P₀、收益尺度估计 σᵢ、系数 m_PT 和 m_SL,以及最长持有时间 Tᵢ。若采用简单收益,上方价格阈值为 P₀ × (1 + m_PT σᵢ),下方阈值为 P₀ × (1 − m_SL σᵢ)。前两者是水平障碍,时间 Tᵢ 则是垂直障碍。
例如,m_PT = 2 表示上方目标位于起始价格上方两个尺度处;m_SL = 1.5 表示下方止损位于起始价格下方 1.5 个尺度处。若在 Tᵢ 到来之前先触及任一水平阈值,事件便在该处结束,并按触及的方向赋标签。如果到期前两条水平阈值都未触及,事件便在垂直障碍处结束。
障碍可以按简单收益或对数收益定义;当价格变动较大时,两种方法对应的价格并不完全相同。构造目标变量和模拟成交时,应选定一种收益定义并保持一致。《Advances in Financial Machine Learning》第3章介绍了事件式标注及按波动率尺度设置障碍的方法。
波动率尺度必须在事件开始时已知
σᵢ 根据该事件的波动尺度确定障碍距离。它可以根据历史收益或预先指定的模型估算,但只能使用在 tᵢ 时或之前可获得的数据。如果波动率估算包含未来区间,阈值便已经泄漏了未来信息,即使特征构造本身没有问题。
固定百分比容易解释,但在市场平静时可能过于接近,在波动时又可能过远。按波动率缩放可以让距离随当下的市场状态变化。不过,σᵢ 不是未来波动率的保证,也不是精确预测;它只是预先规定的标签规则中的一项输入。
为每个事件保存起始价格、σᵢ、各阈值系数、起止时间、结束原因及判定触及所用的价格。保留这些信息,才能重现标签、检查各事件的时长,并审计是否误用了未来数据。
事件触发器与结果标签回答不同的问题
触发器决定何时开始观察事件。例如,CUSUM 滤波器可以在累积价格变动超过阈值时生成事件,而不是每根 K 线都建立一个样本。触发器回答“何时开始形成样本”,三重障碍规则回答“开始之后,哪个结果先发生”。
不要把触发器与标签或交易信号混为一谈。障碍标注会利用后续价格路径生成目标变量 y。这是计算训练结果所必需的;但事件的特征和 σᵢ 必须只依据开始时已知的信息。这个区分见于 mlfinpy 的标注文档,并体现在三重障碍实现代码中。
示例说明每道障碍如何发挥作用
假设 P₀ = $100、σᵢ = 2%、m_PT = 2、m_SL = 1.5,垂直障碍在未来第3根 K 线结束时到期。按简单收益计算,上方价位为 $104,下方价位为 $97。
- 路径 $100 → $104.50 在第1根未来 K 线上触及上方阈值,因此标签为 +1;之后价格即使反转,也不改变首次触及结果。
- 路径 $100 → $96.50 在第1根未来 K 线上、到期前触及下方阈值,因此标签为 −1。
- 路径 $100 → $101 → $102 → $101.50 未触及任一水平阈值。未来第3根 K 线结束时到期后,按本文规则标为 0,尽管最终收益为 +1.5%。
最后一个例子表明,本文中的 0 表示“到期前未触及水平障碍”,而不是“收益为零”。有些实现把到期时间仅用作观察终点,然后根据终点收益的正负号分类。这是另一套规则,应清楚记录,不要混合不同规则生成的标签。

方向标签与元标签是不同的任务
在方向预测任务中,+1 和 −1 表示价格先触及哪一侧阈值;本文将到期情况单独记为 0。模型可以用事件开始时已知的特征预测这些类别。标签说明的是相对于既定障碍的结果,本身并不代表扣除成本后获利的概率。
元标签方法先由一个主模型提出仓位方向,例如做多或做空;随后在计算收益时纳入这个方向,并用障碍生成结果标签,再由第二个模型判断是否采纳该信号。因此,标签和阈值的含义取决于是否使用了仓位方向。应在数据中明确保存主模型提出的方向,不要把所有 +1 标签都当成买入建议。
市场数据可能无法揭示触及顺序
只使用收盘价的数据可能漏掉盘中触及:最高价或最低价可能在收盘前已经越过障碍。如果同一根 OHLC K 线的最高价超过上方阈值、最低价也低于下方阈值,这四个数值无法说明哪道障碍先被触及,不能据此可靠地选出结果。
如果触及顺序会影响标签,应使用足够高频、能还原顺序的数据。若没有这样的数据,就预先制定保守且可重复的双边触及规则,例如按不利结果处理,并对所有事件一致应用。应在方法说明中披露这种不确定性,不要把假设的先后顺序写成观察到的事实。
还要明确“触及”指成交价、买卖报价、收盘价,还是可实际成交的价格。跳空、价差和下单延迟都可能使真实仓位无法在图表上的阈值成交。
重叠事件需要在验证划分中处理
多个事件可能同时持续,并用到部分相同的未来价格走势来生成标签。因此,若随机将样本行划入训练集和测试集,两边可能出现结果区间重叠的样本。验证时应使用每个事件从开始到触及障碍或到期的实际时间区间,并依据既定规则,从训练集中剔除与测试结果区间重叠的样本。
金融时间序列的 purged cross-validation 与 embargo 指南进一步介绍了这种处理方式。Purging 能减少标签区间重叠造成的信息泄漏,但不能修正含有未来数据的特征、反复挑选模型或不现实的成交假设。
交易成本会改变结果的含义
训练前先记录所用规则
说明事件如何触发、P₀ 与 σᵢ 的来源、使用的系数和期限、判定触及所用的价格流,以及如何处理双边触及。还应写明到期是否一律赋 0,还是按终点收益的正负号分类,以及结果按成本前还是成本后计算。
把规则记录下来,才能审查和重现数据集。即使使用同一份原始数据,不同参数也会构造出不同的预测任务。
常见问题
Q1事件到期时的标签一定要设为 0 吗?
不一定。本文把 0 设为一个单独类别,表示到垂直障碍为止都未触及水平障碍。其他实现可能按到期收益的正负号赋标签。关键是明确选定一种规则并始终如一地使用。
Q2事件触发器与三重障碍法有什么区别?
CUSUM 等触发器决定样本何时开始;三道障碍决定开始后哪项结果条件先发生。这是构建训练集时两个不同的步骤。
Q3+1 标签是否保证扣除成本后盈利?
不能保证。它只表示按给定价格数据和规则,上方阈值最先被触及。价差、手续费、资金费率、滑点、仓位规模和成交方式都可能改变净结果。
资料来源与延伸阅读
报告问题
我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈
快速检查
读完指南后,用 3 道题检查一下
问题 01
如果事件在第1根未来 K 线上先触及上方障碍,早于下方障碍和到期时间,应赋予什么标签?
选择答案即可查看解释