文章 "MetaTrader 5 机器学习蓝图(第一部分):数据泄露与时间戳修正"

 

新文章 MetaTrader 5 机器学习蓝图(第一部分):数据泄露与时间戳修正已发布:

在开始将机器学习用于 MetaTrader 5 交易之前,必须先处理一个常被忽视的关键问题:数据泄露。本文深入剖析了数据泄露,尤其是 MetaTrader 5 时间戳陷阱,说明它如何扭曲模型表现并导致不可靠的交易信号。通过深入研究这一问题的机理并提出预防策略,我们为构建稳健的机器学习模型铺平了道路,这些模型能够在实时交易环境中提供值得信赖的预测结果。

数据窥探或数据泄露可能看似微不足道,但其对机器学习模型的影响可能是巨大的,甚至是毁灭性的。想象一下,你在备考时无意中 提前偷看了答案。你感觉自己的满分是应得的,但实际上这是在作弊。这正是我们在机器学习中使用 MetaTrader 5 的默认时间戳时所发生的情况 —— 数据泄露会意外破坏模型的完整性。

MetaTrader 5 的时间戳如何欺骗你

EURUSD M5 - MetaTrader5

MetaTrader 5 将 18:55 开始的 5 分钟 K 线(即上图中倒数第二根 K 线)标记为:
时间 开盘价 最高价 最低价 收盘价

4 月 2 日 18:55

  1.08718

  1.08724

  1.08668

  1.08670

MetaTrader 5 通过在开始时打上时间戳,该 K 线的数据在 18:55:00 可用 —— 比实际收盘时间早了整整 5 分钟! 如果你的模型在训练时使用这个,那就像是在考试开始前 5 分钟给学生提供答案。为了解决这个问题,我们应该避免使用 MetaTrader 5 的预编译时间 K 线,而是使用 tick 数据来创建我们在模型中使用的柱。

作者:Patrick Murimi Njoroge

 

活动驱动条形图并不能解决你提到的时间条形图的所有问题。例如,您写道

The Subtle Intra-Bar Leakage: However, a more subtle form of data leakage can still occur within the very formation of that time bar. If a significant event transpires midway through a 1-minute bar (e.g., at 09:00:35), any features derived from that bar (such as its high price or a flag for the event) will inevitably incorporate this information by the bar's end.

如果您构建等量、等范围或其他基于刻度线的自定义条形图,无论如何您都会用单个标签标记这样的条形图,这样就会泄露(或者更准确地说,模糊)整个条形图的高价信息。

解决这个问题的唯一方法是在构建 "条形图 "时考虑到(您要使用的)特定功能。例如,如果高点或低点是主要特征,您就应该尝试 "之 "字形 "柱状图",并在柱状图外标注准确的时间。

实际上,使用恒定时间框架的方法,特别是将其限制为 M1 的方法,在 MT5 数据泄漏的情况下是有问题的。用结束时间标注 M1 条形图并不比用开始时间标注好多少。


对于那些有兴趣在 MT5 中本地构建自定义条形图(图表)的人,有一篇文章介绍了等量、等范围和 renko 条形图的 MQL5 实现。当然,您也可以在开放源代码中用结束时间标记条形图。

Custom symbols: Practical basics
Custom symbols: Practical basics
  • www.mql5.com
The article is devoted to the programmatic generation of custom symbols which are used to demonstrate some popular methods for displaying quotes. It describes a suggested variant of minimally invasive adaptation of Expert Advisors for trading a real symbol from a derived custom symbol chart. MQL source codes are attached to this article.
 
Stanislav Korotky #:

活动驱动条形图并不能解决你提到的时间条形图的所有问题。例如,你写道

如果您构建了等量、等范围或其他基于刻度线的自定义条形图,无论如何您都会用单个标签标记这样的条形图,这样就会泄露(或者更准确地说,模糊)整个条形图的高价信息。

解决这个问题的唯一方法是在构建 "条形图 "时考虑到(您要使用的)特定功能。例如,如果高点或低点是主要特征,那么您应该尝试 "之 "字形 "柱形图",并在柱形图外标注准确的时间。

实际上,使用恒定时间框架的方法,特别是将其限制为 M1 的方法,在 MT5 数据泄漏的情况下是有问题的。用结束时间标记 M1 条形图并不比用开始时间标记好多少。


对于那些有兴趣在 MT5 中本地构建自定义条形图(图表)的人,有一篇文章介绍了等量、等范围和 renko 条形图的 MQL5 实现。当然,您也可以在开放源代码中用结束时间标记条形图。

活动驱动条形图旨在改进条形图中包含的统计属性信息,如减少异方差性和改进正态性。我提出的解决"微妙的柱状图内泄漏"问题的方法是使用柱状图的结束时间来标注柱状图,这样柱状图内发生的所有事件都能在时间戳中捕捉到。一个有用的例子是在训练模型时使用从时间戳中提取的特征,如傅立叶变换。如果使用 MetaTrader5 的惯例,即按周期开始时间标注条形图,那么就会给模型带来误导。对于某些模型来说,这种区别可能并不重要,但对于那些旨在利用市场周期性的模型来说,这种区别会产生巨大影响。


 
Stanislav Korotky #:

基于活动的条形图并不能解决你提到的时间条形图的所有问题。例如,你写道

如果您创建了相同的交易量、交易范围或其他基于刻度线的自定义条形图,那么无论如何您都会用一个标签来标记这样的条形图,而最高价格的信息会在整个条形图中泄露(或者更准确地说,模糊不清)。

解决这个问题的唯一方法是在创建 "条形图 "时考虑到(您将使用的)具体特征。 例如,如果高点或低点是主要特征,则应尝试创建 "人字形条形图",并在时间上准确标注价外值。

在 MT5 数据泄漏的情况下,恒定时间框架方法,尤其是对 M1 的限制,是有问题的。用结束时间标记 M1 条形图并不比用开始时间标记好多少。


对于那些有兴趣在 MT5 中创建本地自定义条形图(图表)的人,有一篇文章介绍了等量、等范围和 Renko 条形图的 MQL5 实现。当然,您也可以在开放源代码中用结束时间标记条形图。

当您说 "如果您创建相同成交量、范围的条形图或其他基于 tick 的自定义条形图,无论如何,您都将用单一标签标记这样的条形图,最高价格的信息将在整个条形图中泄露(或更准确地说,模糊)"时,您是什么意思?

 
Patrick Murimi Njoroge #:

您说 "如果您创建了相同数量、范围的条形图,或其他基于刻度线的自定义条形图,那么无论如何您都会用一个标签来标记这样的条形图,而最高价格的信息会在整个条形图上泄露(或者更准确地说,模糊)",这是什么意思?

我不明白哪里不清楚。我的发言是对您的发言的直接回复,您可以看看我上一篇文章 中的引文。无论你如何形成条形图,条形图的每一个属性都是由一个时间戳归属的,而属性的实际 "事件 "与该时间不匹配。
 
Stanislav Korotky # :
我不明白有什么不清楚的。我的这句话是对您 在上一篇文章中 引用的一句话的直接回复。 无论你如何形成条形图,条形图的所有属性都是由一个时间戳归属的,而属性的实际 "事件 "与该时间并不匹配。时间。

现在我明白模糊的含义了。

 
Patrick Murimi Njoroge #:

现在我明白了模糊的含义。

我的解决方案考虑到了用户将使用三重障碍标记来训练模型。在我看来,防止上述模糊的复杂性大于在这种情况下获得的信息。不过,我还是会考虑到这一点进行一些实验。如果您已经做过实验,请与我分享您的结果和实验设置。
 
Patrick Murimi Njoroge #:

现在我明白了模糊的含义。

你说得对,基于活动的条形图并不能解决条形图内的模糊问题。当美元条形图关闭时,其高点特征反映的是该条形图中某个较早刻度的价格。条形图的时间戳是正确的,但特征的时间起源却丢失了。任何柱形图类型--时间、刻度、成交量、美元或不平衡--都无法消除这种情况,因为聚合本身就是柱形图构建的机制。人字形柱状图的构造确实解决了高/低点的具体问题:极值总是在收盘时出现。对于以价格极值为主要特征的策略来说,这是一个真正的优势。

我要反驳的是将模糊与前瞻性偏差混为一谈的观点。这是两个不同的问题。前瞻性偏差是指在构建标签时,所使用的信息是在观察结果所附时间戳之后的信息--即模型是基于未来的。基于活动的条形图可以解决这个问题:时间戳是条形图信息集完整的时刻,因此没有标签能看到时间戳之外的信息。条形图内的模糊指的是特征在时间上的聚合,而不记录条形图内每个分量的到达时间。这会降低分辨率,但不会导致模型看不到未来。时间戳错误的 M1 条形图和时间戳正确的美元条形图都会模糊其特征,但只有一个会导致前瞻性偏差。

关于 M1 标签的结束时间与开始时间:我不会说结束时间只是略胜一筹。它消除了本系列第一部分中描述的特定陷阱,即 MetaTrader 5 的默认时间戳意味着在条形收盘前五分钟信息可用。这是造成回测性能膨胀的一个具体、可测量的原因,而不是表面上的修复。至于是否能额外解决条形图内模糊问题,则是另外一个问题。

你更广泛的观点是,这篇文章没有充分区分基于活动的采样解决了什么问题和没有解决什么问题,这是很公平的。未来的版本应该明确指出,逐点特征工程,而不是条形图选择,是理论上解决模糊问题的完整方案,但代价是数据和建模的复杂性大大增加。我会在结论中补充说明这一点。我目前正在精简本系列的资料库,但我也会很快编辑此类错误。