上屏障先触发 → +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、-1、0的比例;- 水平屏障触发占比;
- 垂直屏障到期占比;
- 平均和分位数持有时间。
如果训练阶段几乎没有 0,测试阶段却大量出现,说明时间屏障或波动率状态发生了明显变化。此时不能只重新训练分类器,应先审查标签生成机制。
路径稳定性
将样本按波动率、成交量、趋势强度或时间阶段拆分。观察同一组屏障参数在不同子样本中的表现。
如果参数只在单一阶段有效,通常存在过拟合风险。不能用全样本平均结果掩盖分段失效。
成本稳定性
将手续费和滑点作为敏感性变量,而不是回测最后才加入的扣减项。
当屏障距离接近交易成本时,标签的经济含义会迅速下降。一个触发频率很高的模型,可能只是不断识别不可交易的微小价格变化。
采样稳定性
改变K线频率,检查标签触发顺序是否发生大量变化。
如果日线数据将大量样本标为 0,而分钟数据把它们拆成明确的 +1 或 -1,说明采样频率正在改变事件定义。此时不能把两个结果当成同一标签体系的重复实验。
一个可执行的复盘框架
复盘不应从收益曲线开始。先审查标签。
可以按以下顺序进行:
1. 确认事件起点。
明确样本为什么在这个时间生成。每根K线、信号触发点或波动阈值事件,含义不同。
2. 确认波动率来源。
检查波动率窗口是否只使用历史数据。记录缺失值、极端值和换月断点。
3. 确认屏障单位。
明确使用价格比例、对数收益还是波动率倍数。固定比例与动态屏障不能混写。
4. 确认路径数据。
价格触发使用收盘价、最高最低价,还是更细级别数据。数据频率决定触发顺序的可识别程度。
5. 确认同K线冲突规则。
一根K线同时穿过上下屏障时,必须存在预先设定的处理方式。
6. 确认垂直屏障。
最大持仓时间需要与策略的更新频率和资金占用周期一致。
7. 确认标签结束时间。
保存事件结束时间,为时间切分、重叠处理和持有期分析提供依据。
8. 确认成本模型。
屏障距离如果小于成本与滑点的合计范围,标签即使统计上有效,也可能不具备交易价值。
9. 确认样本切分。
避免随机打乱造成路径泄漏。训练、验证和测试应按时间组织。
10. 确认模型局限。
标签质量提高,不代表模型自动盈利。三重屏障法不会创造预测能力。
其中最容易被跳过的是第七步。很多数据集只保存事件起点和最终标签,不保存事件结束时间。这样会丢失持仓长度、重叠关系和垂直屏障触发信息。后续再做净化切分或持有期分析时,只能重新运行整套流程。
数据表结构从一开始就应当面向复盘,而不是只面向训练。
三重屏障法的边界
三重屏障法解决的是标签构造问题。它不能解决以下问题:
- 价格数据本身错误;
- 特征存在前视偏差;
- 交易成本估计错误;
- 订单无法按回测价格成交;
- 训练样本与验证样本发生时间泄漏;
- 市场制度发生变化;
- 模型无法处理类别漂移;
- 风险敞口超过资金管理约束。
它也不能保证交易策略盈利。
如果标签设计得更贴近交易规则,模型学习目标会更清晰。但清晰的目标仍然可能没有可预测性。模型可能只是在估计一个接近随机的首达事件。标签越精确,不代表事件越容易预测。
还需要区分两种失败:
- 标签错误:路径扫描、时间对齐或屏障计算存在问题;
- 预测失败:标签正确,但特征没有足够的信息。
这两类问题的排查方式完全不同。
前者检查数据管道。后者检查模型与信号。
结论:先定义事件,再谈预测
三重屏障法的价值可以压缩为三点:
- 用上屏障和下屏障记录价格路径中的首个风险事件;
- 用波动率动态调整水平屏障,使风险边界适应当前波动状态;
- 用垂直屏障限制最大持仓时间,把时间衰退和资金占用写入标签。
它不是止盈止损模板。也不是盈利策略。更不是把固定比例参数换成几个名称之后的包装。
正确实现需要同时处理波动率估计、事件起点、路径粒度、同K线冲突、跳空、交易成本、样本重叠和时间切分。
参数优化应从稳定性开始,而不是从最高收益开始。优先检查标签在不同时间段、不同波动率状态和不同采样频率下是否保持一致。随后再评估模型的分类能力。最后才进入执行层面的收益分析。
模型的局限性也很明确:三重屏障法只规定了结果如何被标记,没有提供结果为何发生的解释。它能降低固定时间窗口带来的标签失真,但不能消除非平稳性、噪声和结构变化。
标签先正确。验证再严格。预测结果才有解释价值。
相关阅读: 移动止损与固定止损:趋势追踪与硬性防守的策略博弈.
