文章 "通过配对交易中的均值回归进行统计套利:用数学战胜市场"

 

新文章 通过配对交易中的均值回归进行统计套利:用数学战胜市场已发布:

本文描述了投资组合层面的统计套利基础知识。其目标是帮助没有深厚数学知识的读者理解统计套利的原则,并提出一个概念性的起点框架。文章包含一个可运行的智能交易系统(EA)、一些关于其一年回测的笔记,以及用于复现实验的相应回测配置设置(.ini 文件)。

本文绝不是试图复现,或者更糟地,“揭示”文艺复兴科技/吉姆·西蒙斯的“秘密代码”。如上所述,对于任何没有直接参与他们运作的人来说,这都是不可能的。这是为了与您分享我对驱动他们模型的通用原理的理解。这些原理可以为最卑微的散户交易者的交易系统提供信息。不同之处在于结果的规模,这将与投入到系统和运营中的资源数量成正比。

因此,您接下来将读到的内容,是我在书籍、视频纪录片和专业互联网社区中研究的成果,并结合了我在金融领域(更多是在业务层面而非开发者层面)几年的个人经验。文艺复兴科技运行的规模是巨大的,但我们在这里将看到的是一个微缩版,可以说,是一个超级英雄的玩具人偶,一座摩天大楼的比例模型。 

其目标是贡献一种低成本、轻量级且易于开发的分析方法,普通散户交易者可以使用消费级笔记本电脑(可能是低端笔记本)上运行的 MetaTrader 5 平台中已有的工具进行测试和改进。该方法应该对算法交易者和自主交易者都有用。我们将从最直接的设置开始,仅足以描述整个过程。

在理解了模型背后的通用概念后,我们将为最简单形式的统计套利构建一个最小的投资组合,通过一个智能交易系统以自动化模式进行交易,记录一些关于结果的笔记,最后思考必要的后续步骤。我希望这次经验能帮助您开始使用这种强大的交易技术,并能够在以后扩展这些知识,将其他品种引入投资组合,并测试这里描述之外的其他算法,从而逐步构建适合您资源和目标的、功能齐全的统计套利策略。

作者:Jocimar Lopes


作者:Jocimar Lopes

 

我不明白你的方法和代码。既然您使用 5 秒定时器和更新报价数组,为什么最初要对 _Period使用 CopyClose?您无法在同一个数组中比较和处理 5 秒间隔和任何标准时间框架(甚至是 M1)。

在初始 CopyClose 之后,您将拥有一个报价数组,其顺序是从最晚(0-th)到最近(n-1-th)的元素。

然后,您(通过计时器)更新数组,删除最后(最近)的元素,并在第 0 个索引处插入一个新的收盘值(最过时的元素存储在该索引处)。

您从未在出现新的条形图时移动过报价数组,也就是说您的数组是以 5 秒为间隔的,但其中一种模式是将这些值与_周期内的 MAs 进行比较。这又是一个很大的矛盾。

另外,如果您打算最终使用条形图(目前您的意图还不明确),请确保您通过时间戳同步不同符号的条形图。

 
Stanislav Korotky 使用 CopyClose?您不能在同一个数组中比较和处理 5 秒间隔和任何标准时间框架(甚至是 M1)。

在初始 CopyClose 之后,您将拥有一个报价数组,其顺序是从最晚(0-th)到最近(n-1-th)的元素。

然后(通过计时器)更新数组,删除最后(最近)的元素,并在第 0 个索引处插入一个新的收盘值(最过时的元素存储在该索引处)。

您从未在出现新的条形图时移动过报价数组,也就是说您的数组是以 5 秒为间隔的,但其中一种模式是将这些值与_周期内的 MAs 进行比较。这又是一个很大的矛盾。

另外,如果您打算最终使用条形图(目前您的意图还不明确),请确保不同符号的条形图与时间戳同步。

感谢您花时间检查代码。

目前 5 秒的间隔是任意的。可以是 1 秒或 10 秒。我们的想法是设置一个初始窗口来计算平均价差,并最终计算 CountQuotes 所覆盖时间段内的其他统计数据。然后,无论时间框架如何,都以 X 秒的间隔不断更新移动窗口。

关于条形图,你说得对:我对它们不感兴趣,也不想让它们保持同步,因为在我看来,它们与这种特定情况无关。几乎所有的交易都持续几秒钟,在柱状图内开盘和收盘。

话虽如此,你对这种方法有什么看法?现在更清楚了吗?您认为有什么关键缺陷会导致计算错误、影响性能或其他问题吗?

非常感谢您的评论,我期待着更多的评论。这段代码将在这里公开演进,而你已经给了我思考的动力。)

周末愉快

 

亲爱的朋友们,我在上传 Tester 配置文件(*.ini 设置)时犯了一个错误。显然,回溯测试应该在零 TP/SL 的情况下运行,也就是说,应该在价差 "回归均值 "时平仓,而不是通过止损或止盈平仓。

要正确重现文章中报告的回溯测试,请使用此处附带的配置文件。

对于这个错误给您带来的不便,我深表歉意。

 

非常感谢你的分享,我忙了一整天都在研究你的素材,非常有趣。在这里和那里做了一些调整......哦,还添加了几个过滤器。

过去 3 个月的一些图表

欧元兑美元


XAUUSD

您的工作非常出色,干杯!

 
Eric Ruvalcaba #:

非常感谢你的分享,我忙了一整天都在研究你的素材,非常有趣。在这里和那里做了一些调整......哦,还添加了几个滤镜。

过去 3 个月的一些图表

欧元兑美元


XAUUSD

你们做得很好,干杯!

我很高兴你能检查它,埃里克。

有一点需要注意:在真实账户中运行时一定要小心。滑点和大户提前执行订单会导致损失。

祝你好运,交易愉快

 
Jocimar Lopes #:

我很高兴你正在检查它,埃里克。

但有一点要注意:在真实账户中运行时一定要小心。滑点和大玩家抢先下单会导致损失。

祝你好运,交易愉快!

谢谢您的提醒,您说得对,我会先试运行,必要时再做调整。

您的忠实粉丝

 

你好。这篇文章非常有趣。我试图复制这些结果,但什么也没发生。我错过了什么?我上传了pairs-trading.mq5 和PairsTradingFunctions.mqh 文件。

谢谢

 

xxxusd = xxxeur *eurusd

xxx = xau, aud, ....

 
Jocimar Lopes #:

在这一点上,5 秒的间隔是任意的。可以是 1 秒或 10 秒。我们的想法是建立一个初始窗口来计算平均价差,并最终计算 CountQuotes 所覆盖时间段内的其他统计数据。然后,无论时间框架如何,都以 X 秒的间隔不断更新移动窗口。

关于条形图,你说得对:我对它们不感兴趣,也不想让它们保持同步,因为在我看来,它们与这种特定情况无关。几乎所有的交易都持续几秒钟,在柱状图内开盘和收盘。

话虽如此,你对这种方法有什么看法?现在更清楚了吗?您认为有什么关键缺陷会导致计算错误、影响性能或其他问题吗?

那么使用 iMA 的整个模式都是不正确的,因为它与条形图绑定在一起。您需要通过 5 秒采样手动计算 MA。

 
Stanislav Korotky #:

那么使用 iMA 的整个模式都是不正确的,因为它与条形图绑定。您需要手动计算 5 秒采样的 MA。

如何计算