数据与算法

三重屏障法标注金融数据:今晚复盘厘清的动态止盈止损与时间衰退逻辑

标签定义:…

三重屏障法标注金融数据:今晚复盘厘清的动态止盈止损与时间衰退逻辑

上屏障先触发 → +1

下屏障先触发 → -1

垂直屏障先触发 → 0

这不是交易信号。是金融机器学习中的目标变量构造方法。

传统固定时间窗口只比较起点与终点。例如,从第 \(t\) 根K线开始,观察未来十根K线后的收益率。终点上涨,标记为正;终点下跌,标记为负。中间发生过什么,不进入标签。

这会产生路径信息丢失。

价格可能在持仓期间先下跌并触发止损,随后反弹,最终收盘价仍高于入场价。固定窗口会把这笔样本标记为正收益。实际交易系统已经退出,标签却保留了一个不存在的盈利结果。

三重屏障法处理的不是预测模型本身,而是样本标签与交易规则之间的对应关系。它把止盈、止损和最大持仓时间同时写入标注逻辑。价格路径被纳入计算。时间衰退被纳入计算。金融数据不再只由两个时间点决定。

超越固定时间窗口:三重屏障法重构了什么

Marcos López de Prado 在 2018 年出版的《Advances in Financial Machine Learning》中提出三重屏障法。核心问题很明确:金融时间序列不是普通的独立同分布数据,价格变化具有路径依赖、波动聚集和时间重叠特征。

固定时间窗口的标签通常只有一个条件:

在固定的未来时刻,价格相对当前价格是上涨还是下跌。

三重屏障法把这个条件拆成三个竞争事件:

1. 价格先触及上屏障。

2. 价格先触及下屏障。

3. 在规定时间内没有触及任何水平屏障,最终到达垂直屏障。

第一个事件通常对应标签 +1。第二个事件对应 -1。第三个事件通常对应 0,也可以根据具体任务改造成其他标签体系。

这里的“先”是关键字。

标签不是由最终收益决定,而是由第一触发事件决定。价格路径上的第一次越界具有优先级。后续走势不再改变已经完成的标签。

固定窗口为什么会制造错误标签

设入场价为 \(P_t\),固定观察周期为 \(H\)。传统方法只计算:

\[

r_{t,H}=\frac{P_{t+H}}{P_t}-1

\]

如果 \(r_{t,H}>0\),标签为正。如果 \(r_{t,H}<0\),标签为负。

这个定义很简单。但它没有描述中间路径。

假设某个样本在入场后经历以下过程:

  • 价格先下跌,触及预设止损线;
  • 交易系统退出;
  • 价格随后反弹;
  • 固定窗口结束时,价格高于入场价。

固定窗口给出正标签。执行逻辑给出止损结果。两者不一致。

这不是小误差。标签代表的交易事件已经发生变化。

三重屏障法则把止损线和止盈线放入未来路径中。只要下屏障先被触及,样本就不再等待固定窗口结束。此时标签已经确定为 -1。之后的反弹不再参与该样本的结果判定。

只看终点收益,会把已经止损的路径误判为盈利样本。三重屏障法首先修复的是这个时间顺序错误。

固定窗口还有第二个问题:所有样本使用相同的持有时间。

十根K线对高波动资产和低波动资产的含义不同。对同一资产而言,平静阶段的十根K线与剧烈波动阶段的十根K线也不等价。固定时间长度并不等于固定风险暴露。

三重屏障法至少把风险边界和时间边界拆开:

  • 水平屏障描述价格风险;
  • 垂直屏障描述时间风险;
  • 触发顺序描述路径结果。

这使标签更接近实际交易系统的退出规则。

三重屏障不是三个独立标签

三重屏障法最终通常输出一个离散标签,而不是三个互相独立的变量。

对每一个事件起点 \(t\),建立:

  • 上屏障:\(U_t\)
  • 下屏障:\(L_t\)
  • 垂直屏障:\(V_t\)

随后扫描从 \(t+1\) 到 \(V_t\) 的价格路径。

如果价格在垂直屏障到达前触及 \(U_t\),标签为 +1。如果先触及 \(L_t\),标签为 -1。如果两个水平屏障都没有触及,直到 \(V_t\) 到达,标签通常为 0

可以将其表示为:

\[

y_t=

\begin{cases}

+1,& \tau_U<\tau_L \ 且 \ \tau_U\leq V_t\\

-1,& \tau_L<\tau_U \ 且 \ \tau_L\leq V_t\\

0,& \tau_U>V_t 且 \tau_L>V_t

\end{cases}

\]

其中,\(\tau_U\) 是首次触及上屏障的时间,\(\tau_L\) 是首次触及下屏障的时间。

公式没有预测功能。它只是规定标签如何生成。

波动率驱动的动态屏障

三重屏障法的核心不在于“设置三个价格点”,而在于水平屏障应随波动率变化。

固定百分比止盈止损不是标准三重屏障法的必要定义。De Prado 建议使用资产波动率动态调整水平屏障宽度。常见做法是使用滚动波动率,或者使用指数加权标准差。

20 日滚动波动率是一个常见指标。它不是唯一选项,也不是固定规范。

屏障宽度的基本构造

设当前价格为 \(P_t\),估计得到的波动率为 \(\sigma_t\)。上、下屏障可以写成:

\[

U_t=P_t(1+m_u\sigma_t)

\]

\[

L_t=P_t(1-m_l\sigma_t)

\]

其中,\(m_u\) 和 \(m_l\) 是上下方向的波动率倍数。

如果采用对数收益率,也可以在对数价格空间内定义屏障。两种写法的数值表现不同,但逻辑一致:波动率越高,屏障距离越宽;波动率越低,屏障距离越窄。

重点不是公式形式,而是屏障与当前风险状态保持一致。

在低波动阶段使用过宽的固定止损线,样本可能长时间停留在无结果状态。模型看到大量接近中性的标签。高波动阶段仍使用相同固定比例,则可能产生大量快速触发样本,标签分布被短期波动主导。

动态屏障试图降低这种尺度不一致。

为什么不能直接使用固定百分比

固定比例的缺陷不在于它永远错误,而在于它没有表达波动率状态。

例如,某资产当前价格波动很小。固定百分比止损可能远高于近期正常波动范围。交易在垂直屏障前可能始终无法触发水平屏障,最终大量样本被标为 0

当波动率突然上升时,同样的固定比例又可能过窄。价格只发生一次正常幅度的波动,就触及止损或止盈。标签变成短周期波动的记录,而不是策略所要识别的事件。

动态屏障把价格变化转换为波动率单位。可以理解为:

  • 不再问价格上涨了多少绝对比例;
  • 而是问价格变化是否超过当前波动状态下的合理幅度。

这对跨阶段比较更加稳定。

波动率估计本身也会污染标签

动态屏障不是自动正确。

波动率是输入变量。波动率估计错误,屏障位置就会错误。常见问题包括以下几类。

  • 使用未来数据计算当前波动率,形成前视偏差;
  • 滚动窗口太短,波动率对单根异常K线过度敏感;
  • 滚动窗口太长,波动率滞后于市场状态变化;
  • 直接使用收盘收益率,忽略高低价路径中的日内风险;
  • 将不同交易时段、不同合约换月阶段的数据混在一起计算。

标签生成时使用的波动率,必须只依赖事件起点之前可获得的数据。若在 \(t\) 时刻生成标签,却使用 \(t+1\) 之后的数据估计 \(\sigma_t\),即使模型训练阶段没有直接使用未来特征,标签边界也已经被未来信息修改。

这种泄漏不容易在最终回测曲线上直接发现。必须在数据管道层面排除。

上下屏障不一定对称

对称屏障意味着:

\[

m_u=m_l

\]

这在基准实验中比较方便。但实际交易任务未必需要对称结构。

多头策略可以设置不同的止盈与止损倍数。期货合约、加密资产、股票指数的收益分布也可能存在偏度。若策略的目标不是简单判断方向,而是判断一个候选交易是否达到预期收益,则上下屏障可以承担不同作用。

但参数不对称不能成为调参自由度的无限扩张。

每增加一个屏障参数,就增加一个过拟合通道。参数组合越多,训练集中的偶然路径越容易被解释为稳定规律。最终需要在时间外推测试、滚动测试和不同波动阶段中验证。

屏障参数应先定义语义,再进行优化

参数优化不应从网格搜索开始。

先明确每个参数的交易含义:

参数作用失真后果
波动率窗口决定风险状态的估计速度太短会放大噪声,太长会产生滞后
上屏障倍数定义正向事件的收益距离过窄会增加快速触发,过宽会减少正标签
下屏障倍数定义负向事件的风险距离过窄会把正常波动标成失败
垂直屏障长度定义最大持仓时间太短会产生过多中性标签,太长会扩大资金占用
价格采样频率决定路径检测精度频率过低会遗漏盘中触发
标签事件起点决定哪些时刻进入样本过密会导致样本重叠与依赖增强

这张表的作用不是给出统一参数,而是限定优化问题的边界。

先决定标签要表示什么。再决定参数如何表达这个含义。反过来用回测收益寻找参数,容易把标签生成过程变成策略曲线拟合器。

垂直屏障:时间衰退不是附属条件

上、下屏障解决价格方向与风险边界。垂直屏障解决时间问题。

如果没有垂直屏障,一个样本可能在水平屏障触发前无限期等待。价格长期横盘,资本持续占用。特征信息逐渐过时。训练样本的实际持有期失去控制。

垂直屏障提供一个最大持仓时间。可以按固定的K线数量定义,也可以按照交易日、小时或其他时间单位定义。

到达垂直屏障时,如果上下屏障都未触发,样本通常标记为 0。这表示在指定时间范围内,没有达到预设的正向或负向事件阈值。

时间衰退的计算含义

金融数据的预测能力不是永久存在的。

某个信号在事件起点有效,不代表它在更长时间后仍然有效。特征与标签之间的关系可能随时间衰减。垂直屏障把这种衰减写进标签构造过程:

  • 在限定期限内达到目标,记录方向结果;
  • 在限定期限内达到风险边界,记录失败结果;
  • 超过期限仍未达到任何边界,记录中性结果并结束样本。

这里的 0 不是“价格没有变化”。它是“在最大持仓期限内没有触发指定事件”。

两者不同。

如果价格缓慢上涨,但始终没有触及上屏障,到期后仍然可能标记为 0。这不是错误。标签定义的目标不是记录所有收益,而是记录是否在规定时间内达到事件阈值。

垂直屏障的长度如何理解

垂直屏障不是越长越好。

设置过短,会产生以下结果:

  • 大量交易还没有充分发展就被强制结算;
  • 0 标签比例上升;
  • 模型学习到的是短期价格噪声;
  • 水平屏障的设计作用被削弱。

设置过长,则可能出现:

  • 交易持有时间失控;
  • 特征与标签之间的时间距离扩大;
  • 样本重叠更加严重;
  • 资金占用和换手成本被低估;
  • 一个事件跨越多个市场状态。

垂直屏障必须与策略的信号更新频率、交易成本、流动性和资金使用周期对应。日频模型与分钟级模型不能直接共用相同的“十根K线”概念。

时间单位必须先定义清楚。

时间屏障与交易成本

如果标签只考虑价格触发,不考虑手续费、滑点和冲击成本,屏障距离过窄时会产生大量没有经济意义的正负标签。

例如,上屏障只略高于入场价。价格路径可以触及该水平,但扣除交易成本后,实际收益可能并不为正。此时标签记录的是价格事件,不是净收益事件。

三重屏障法本身不自动处理交易成本。成本应当在屏障距离、标签解释或后续策略评估中显式加入。

可以将上屏障定义在毛收益空间,也可以将成本预留在净收益空间。两者都可以,但不能在训练阶段使用毛收益标签,在回测阶段再突然加入成本,却仍然把标签称为同一个交易目标。

标签语义必须前后一致。

垂直屏障的价值不只是防止无限持仓。它把信号的有效期变成一个可计算参数。

从标签到策略:一条可复现的数据处理路径

三重屏障法最容易被误解为一个完整交易策略。它不是。

它主要负责把事件起点转换成监督学习目标。模型仍然需要特征。特征仍然需要时间对齐。交易规则仍然需要执行模拟。三重屏障法不能替代这些环节。

一个较完整的处理路径可以拆成以下步骤。

第一步:定义事件起点

不能默认每一根K线都生成一个新事件。

如果每根K线都作为起点,连续样本会高度重叠。第 \(t\) 根K线开始的事件尚未结束,第 \(t+1\) 根K线又生成新事件。此时多个标签共享同一段未来价格路径。

这会带来两个问题:

1. 样本之间不独立。

2. 训练集与验证集可能共享同一事件的价格信息。

事件起点可以来自外部信号,也可以使用波动阈值、价格突破或其他事件采样机制。但事件定义必须先于标签定义。不能先看结果,再挑选看起来更有意义的起点。

第二步:计算起点时刻可用的波动率

波动率计算使用起点之前的数据。

如果使用 20 日滚动波动率,则每个事件起点都要取当时已经完成的历史窗口。缺失窗口时不能直接填入未来计算值。可以删除早期样本,或者使用明确的初始化规则。

对于指数加权标准差,衰减参数也属于模型设置。它改变屏障对近期波动的敏感程度。不能把它当成无关紧要的预处理细节。

波动率序列应该单独保存。标签生成之后,需要检查:

  • 波动率是否出现异常跳变;
  • 合约切换时是否存在价格不连续;
  • 停牌、涨跌停或流动性缺失是否改变了收益分布;
  • 夜盘与日盘是否被正确拼接;
  • 不同资产之间的波动率量纲是否一致。

第三步:生成上下水平屏障

使用波动率将屏障距离转换为价格距离。

对于多头事件,上屏障通常表示目标收益,下屏障表示风险边界。对于空头事件,方向需要相应调整。不能只改变特征方向,却继续使用同一套标签解释。

屏障生成过程应该记录每个事件的:

  • 入场价格;
  • 波动率;
  • 上屏障价格;
  • 下屏障价格;
  • 垂直屏障时间;
  • 方向信息;
  • 数据频率;
  • 交易成本假设。

如果只保留最终标签,不保留屏障元数据,后续很难解释标签分布变化。

第四步:扫描未来路径

从事件起点之后开始,逐根扫描价格。

对收盘价数据,可以检查收盘价是否越过屏障。对包含最高价和最低价的K线,则需要根据具体执行假设检查盘中路径。

这里存在一个技术问题:同一根K线内,最高价可能已经超过上屏障,最低价也可能低于下屏障。仅凭开、高、低、收四个价格,无法确定两个屏障的真实先后顺序。

如果数据粒度足够高,可以使用更细级别的数据重建先后关系。如果没有更细数据,则必须制定确定性的处理规则,并在结果中保留这个限制。

不能把同一根K线的上下触发顺序当作已知事实。

第五步:确定首个触发事件

触发判断要基于时间顺序。

  • 上屏障先触发,标记 +1
  • 下屏障先触发,标记 -1
  • 到达垂直屏障而未触及水平屏障,标记 0

如果使用带方向的事件,标签也可以理解为方向调整后的结果。例如,空头事件中,价格下跌触及目标可能对应正标签。此时标签代表的是相对于交易方向的结果,不再是绝对价格方向。

文档中必须明确这一点。否则,模型输出的 +1 容易被错误解释为价格上涨。

第六步:保存标签生成时间与结束时间

每个标签至少有两个时间点:

  • 事件起点时间;
  • 事件结束时间。

事件结束时间可能是上屏障触发时间、下屏障触发时间或垂直屏障到达时间。

这两个时间点对训练切分非常重要。

如果仅按事件起点随机切分,可能发生信息泄漏。一个事件从训练集起点开始,却跨越到验证集时间段。另一组事件从验证集起点开始,但与训练集事件共享未来价格路径。

金融时间序列不能简单套用普通随机划分。

标签分布不是越均衡越好

三重屏障法生成的标签可能严重不平衡。

某一组参数下,0 标签可能占据大多数。另一组参数下,+1-1 可能因为屏障宽度或市场趋势阶段而偏斜。标签不平衡本身不代表算法错误。

需要先确认不平衡来自哪里:

  • 波动率窗口是否失配;
  • 垂直屏障是否过短或过长;
  • 上下屏障是否存在结构性不对称;
  • 事件起点是否集中在某一类市场阶段;
  • 价格数据是否有缺失或错误;
  • 标签扫描是否把同一根K线重复计数。

不能为了得到“好看”的类别比例,直接调整标签直到接近三等分。那样做可能破坏真实事件分布。

类别比例应该是诊断结果,不是优化目标。

复盘中的陷阱:动态屏障不是固定比例策略的别名

三重屏障法经常被简化成“设置止盈、止损和时间限制”。这个描述没有错,但不完整。

如果把上屏障固定为入场价上方某个百分比,把下屏障固定为入场价下方某个百分比,再配一个最大持仓时间,得到的是三屏障结构的一个简化实现。它不等于标准意义上的波动率动态屏障。

差异集中在水平屏障。

固定比例:

\[

U_t=P_t(1+a), \quad L_t=P_t(1-b)

\]

动态波动率:

\[

U_t=P_t(1+m_u\sigma_t), \quad L_t=P_t(1-m_l\sigma_t)

\]

第一种方法的屏障宽度只由价格决定。第二种方法还依赖当时的风险状态。

两者可以进行对照实验。但不能在研究结论中混用。

陷阱一:用未来波动率生成当前标签

这是最严重的问题之一。

如果研究者先计算完整样本区间的波动率,再将其回填到历史事件中,就可能把未来波动状态带入过去。即使标签扫描没有直接读取未来收盘价,屏障位置已经被未来信息影响。

正确做法是对每个事件起点单独使用当时可见的数据。滚动统计必须向后看,不能向前看。

陷阱二:把标签当作收益率

+1 不等于固定盈利比例。它只表示上屏障先被触发。

实际收益还取决于:

  • 上屏障的波动率倍数;
  • 入场与触发之间的价格变化;
  • 交易成本;
  • 滑点;
  • 订单成交规则;
  • 同一根K线内的路径假设;
  • 是否存在跳空。

同理,-1 也不必然代表相同幅度的亏损。标签是类别编码,不是收益金额。

如果需要回归目标,应当另外保存实现收益、持有时间和退出原因。

陷阱三:忽略跳空

在低频数据中,价格可能从屏障一侧直接跳到另一侧。此时触发价格未必等于屏障价格。

例如,前一根K线收盘价尚未触及下屏障,下一根K线开盘价已经低于下屏障。标签可以判定为下屏障触发,但成交价模拟不能简单地使用下屏障价格。

这属于标签与执行价格的分离问题。

标签回答“哪一个风险事件先发生”。回测回答“以什么价格成交”。两者应当分层处理。

陷阱四:同一根K线同时触发上下屏障

如果使用日线或分钟线,只保存最高价和最低价,就无法知道先上后下,还是先下后上。

常见处理方式包括:

  • 使用更细级别数据;
  • 按保守规则优先处理不利屏障;
  • 将该样本标记为不确定并剔除;
  • 使用额外的路径模型估计触发顺序。

无论选择哪一种,都必须固定规则。不能在不同样本中根据最终回测结果临时选择有利顺序。

陷阱五:忽略重叠事件

事件窗口越长,重叠概率越高。

事件 \(i\) 从 \(t_i\) 开始,到 \(T_i\) 结束。如果另一个事件 \(j\) 的区间与它重叠,则两者标签共享部分未来价格路径。随机打乱后,模型可能通过相邻样本间接获得验证集信息。

处理方式可以包括:

  • 使用时间顺序划分;
  • 在训练与验证之间留出间隔;
  • 对跨越边界的事件进行剔除;
  • 根据事件持续时间进行加权;
  • 使用适合金融事件标签的净化交叉验证。

这些措施不属于三重屏障法本身,但属于其机器学习应用的必要配套。

陷阱六:把参数搜索当作科学验证

屏障倍数、波动率窗口、垂直屏障长度都可以调参。但每个参数都会增加自由度。

如果使用同一段历史数据反复搜索参数,并用同一段数据评估模型,最终得到的不是泛化能力,而是数据集的路径记忆。

参数优化需要分层:

1. 用训练区间确定候选参数;

2. 用时间外验证区间检查标签和模型稳定性;

3. 用未参与选择的测试区间进行最终评估;

4. 按不同波动率状态拆分结果;

5. 检查标签比例、持有时间和交易成本敏感性。

只看准确率不够。

还应观察:

  • 各类别的精确率与召回率;
  • 混淆矩阵;
  • 不同时间段的类别稳定性;
  • 标签结束时间的分布;
  • 触发上、下、垂直屏障的比例;
  • 不同参数下模型输出是否发生结构性变化。

模型可能在标签比例稳定时仍然失效。也可能准确率下降,但交易目标收益改善。指标必须服务于目标定义。

三重屏障法与金融机器学习的连接

三重屏障法常被放在监督学习的数据预处理阶段。其意义是把连续价格路径转换为具有交易含义的分类目标。

这一步连接了三个层面:

第一层:市场数据

原始数据通常包括开盘价、最高价、最低价、收盘价、成交量和时间戳。数据需要经过清洗、复权、合约连续化或交易时段处理。

数据错误会直接变成标签错误。

例如,复权处理不一致会制造虚假跳变。期货换月拼接不正确会改变屏障触发位置。停牌期间的时间索引处理不当,会让垂直屏障长度失去实际含义。

第二层:事件标签

三重屏障法将未来价格路径映射为离散结果。

模型不再直接预测固定周期收益,而是预测:

  • 当前事件是否先达到目标;
  • 是否先达到风险边界;
  • 是否在期限内没有完成任何一项。

这种标签更接近交易决策,但也更依赖屏障定义。

第三层:执行与评估

模型预测出某类事件后,还要经过仓位、订单、成本和风险控制规则。

如果标签使用动态止盈止损,回测执行也应当保持一致。标签描述的退出逻辑与回测逻辑不一致,模型评估就不再闭合。

一个典型错误是:

  • 训练标签使用波动率动态屏障;
  • 回测时却采用固定止损;
  • 最后把模型结果解释为动态屏障策略的收益。

这不是同一套系统。

方向标签与元标签

在更复杂的架构中,可以将三重屏障法用于元标签。

第一层模型负责判断方向或生成候选事件。第二层模型判断是否接受该信号。三重屏障标签可以作为第二层模型的目标,描述候选事件在风险边界和时间限制下是否成功。

但这会增加数据对齐难度。第一层信号的生成时间、第二层标签的结束时间、特征可用时间必须严格分离。

不能因为标签生成使用了未来路径,就允许特征管道读取未来变量。标签可以看未来。特征不可以。

这是监督学习的基本因果边界。

参数优化:从稳定性而不是收益曲线出发

三重屏障法的参数没有普适最优值。

不同资产、不同频率、不同交易成本和不同信号周期,都会改变参数含义。20 日滚动波动率是常见起点,不是最终答案。垂直屏障的具体K线数量也不能脱离策略持有周期单独决定。

优化时可以关注四个稳定性维度。

标签稳定性

检查不同时间段内:

  • +1-10 的比例;
  • 水平屏障触发占比;
  • 垂直屏障到期占比;
  • 平均和分位数持有时间。

如果训练阶段几乎没有 0,测试阶段却大量出现,说明时间屏障或波动率状态发生了明显变化。此时不能只重新训练分类器,应先审查标签生成机制。

路径稳定性

将样本按波动率、成交量、趋势强度或时间阶段拆分。观察同一组屏障参数在不同子样本中的表现。

如果参数只在单一阶段有效,通常存在过拟合风险。不能用全样本平均结果掩盖分段失效。

成本稳定性

将手续费和滑点作为敏感性变量,而不是回测最后才加入的扣减项。

当屏障距离接近交易成本时,标签的经济含义会迅速下降。一个触发频率很高的模型,可能只是不断识别不可交易的微小价格变化。

采样稳定性

改变K线频率,检查标签触发顺序是否发生大量变化。

如果日线数据将大量样本标为 0,而分钟数据把它们拆成明确的 +1-1,说明采样频率正在改变事件定义。此时不能把两个结果当成同一标签体系的重复实验。

一个可执行的复盘框架

复盘不应从收益曲线开始。先审查标签。

可以按以下顺序进行:

1. 确认事件起点。

明确样本为什么在这个时间生成。每根K线、信号触发点或波动阈值事件,含义不同。

2. 确认波动率来源。

检查波动率窗口是否只使用历史数据。记录缺失值、极端值和换月断点。

3. 确认屏障单位。

明确使用价格比例、对数收益还是波动率倍数。固定比例与动态屏障不能混写。

4. 确认路径数据。

价格触发使用收盘价、最高最低价,还是更细级别数据。数据频率决定触发顺序的可识别程度。

5. 确认同K线冲突规则。

一根K线同时穿过上下屏障时,必须存在预先设定的处理方式。

6. 确认垂直屏障。

最大持仓时间需要与策略的更新频率和资金占用周期一致。

7. 确认标签结束时间。

保存事件结束时间,为时间切分、重叠处理和持有期分析提供依据。

8. 确认成本模型。

屏障距离如果小于成本与滑点的合计范围,标签即使统计上有效,也可能不具备交易价值。

9. 确认样本切分。

避免随机打乱造成路径泄漏。训练、验证和测试应按时间组织。

10. 确认模型局限。

标签质量提高,不代表模型自动盈利。三重屏障法不会创造预测能力。

其中最容易被跳过的是第七步。很多数据集只保存事件起点和最终标签,不保存事件结束时间。这样会丢失持仓长度、重叠关系和垂直屏障触发信息。后续再做净化切分或持有期分析时,只能重新运行整套流程。

数据表结构从一开始就应当面向复盘,而不是只面向训练。

三重屏障法的边界

三重屏障法解决的是标签构造问题。它不能解决以下问题:

  • 价格数据本身错误;
  • 特征存在前视偏差;
  • 交易成本估计错误;
  • 订单无法按回测价格成交;
  • 训练样本与验证样本发生时间泄漏;
  • 市场制度发生变化;
  • 模型无法处理类别漂移;
  • 风险敞口超过资金管理约束。

它也不能保证交易策略盈利。

如果标签设计得更贴近交易规则,模型学习目标会更清晰。但清晰的目标仍然可能没有可预测性。模型可能只是在估计一个接近随机的首达事件。标签越精确,不代表事件越容易预测。

还需要区分两种失败:

  • 标签错误:路径扫描、时间对齐或屏障计算存在问题;
  • 预测失败:标签正确,但特征没有足够的信息。

这两类问题的排查方式完全不同。

前者检查数据管道。后者检查模型与信号。

结论:先定义事件,再谈预测

三重屏障法的价值可以压缩为三点:

  • 用上屏障和下屏障记录价格路径中的首个风险事件;
  • 用波动率动态调整水平屏障,使风险边界适应当前波动状态;
  • 用垂直屏障限制最大持仓时间,把时间衰退和资金占用写入标签。

它不是止盈止损模板。也不是盈利策略。更不是把固定比例参数换成几个名称之后的包装。

正确实现需要同时处理波动率估计、事件起点、路径粒度、同K线冲突、跳空、交易成本、样本重叠和时间切分。

参数优化应从稳定性开始,而不是从最高收益开始。优先检查标签在不同时间段、不同波动率状态和不同采样频率下是否保持一致。随后再评估模型的分类能力。最后才进入执行层面的收益分析。

模型的局限性也很明确:三重屏障法只规定了结果如何被标记,没有提供结果为何发生的解释。它能降低固定时间窗口带来的标签失真,但不能消除非平稳性、噪声和结构变化。

标签先正确。验证再严格。预测结果才有解释价值。

相关阅读: 移动止损与固定止损:趋势追踪与硬性防守的策略博弈.

常见问题

三重屏障法中的标签是如何定义的?
标签由价格路径中首个触发的屏障决定:上屏障先触发记为+1,下屏障先触发记为-1,若在垂直屏障时间内均未触发则记为0。
为什么固定时间窗口标注金融数据会产生错误?
固定窗口仅关注起点与终点的收益,会忽略持仓期间已触发止损的路径,导致将实际亏损的交易误判为盈利样本。
为什么要使用动态波动率来设置屏障?
固定比例屏障无法反映市场风险状态,动态屏障能根据波动率自动调整宽度,确保在不同波动环境下标签的经济含义保持一致。
垂直屏障在标注中起什么作用?
它设定了最大持仓时间,防止样本无限期等待,并将时间衰退和信号有效期作为可计算参数写入标签。
三重屏障法可以直接作为交易策略使用吗?
不可以。三重屏障法仅用于金融机器学习中的目标变量构造,负责将价格路径转换为监督学习的分类标签,而非直接生成交易信号。