本文主要是介绍期货量化交易软件:MQL5 中的范畴论 (第 15 部分)函子与图论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
概述
在上一篇文章中,我们目睹了前期文章中涵盖的概念(如线性序)如何视作范畴,以及为什么它们的“态射”在与其它范畴相关时即构成函子。在本文中,我们赫兹量化软件将阐述来自前期文章中的概括,即通过查看图论如何具有与上一篇文章中查看的线性序类似的用途。为了使用图论,我们赫兹量化将 MQL5 日历数据重构为图形,由此作为一个范畴。这将是一个关键焦点。本文的目的仍然会像我们之前的一篇,寻求明示在两个范畴之间函子的波动性预测潜力。不过,在这种情况下,我们的域范畴是一个图形,而协域将在预排序时间序列中显示标准普尔 500 指数波动率值(并非 VIX)。
MQL5 日历灌注数据重构为图形
当我们把范畴论与数据库制程联系起来时,MQL5 财经日历已被涵盖,故此在此重新涉及它与交易者的相关性并不适宜。为了将其表示为图形,即一连串的边线和节点,首先需要预先选择我们将包含在范畴中的新闻项目的子集。从财经日历网站上可以明显看出,有很多项目可供选择,不过,如果我们决定基于一个松散的假设只选择四个项目,并将它们连接起来,如下图所示:
添加图片注释,不超过 140 字(可选)
那么我们的假设会颇具争议,零售销售数字是制造业采购经理人指数(PMI)数据的函数,其派生自 CPI,而 CPI 又是由国债竞售业绩的结果而来,而国债竞售业绩也基于零售销售数字。因此,这是一个简单的循环,其准确性不是本文的主题,而更多意味着从财经日历数据勾勒可能的图形构图。
图论通过创建两个直截了当的表格,一个是顶点的配对表,另一个用作顶点的索引,来简化复杂的互连系统。图形可以被视为一个范畴,因为顶点可以被视为对象(域),这意味着边线当作态射。作为旁注,这与上一篇文章中看到的线性序有何不同,顾名思义,是线性。图论倾向于容纳更复杂的连接,其中对象/域可以连接到多个对象。
故此,我们不会像上一篇文章中关于线性序那样,将该范畴中的单个对象与标普波动率范畴中的对象配对,而是将顶点对的行数与标普范畴配对。这意味着它不能同构,由于鉴于标普是基于时间的,故多行被捆绑,并与标普中的单个对象(数据点)配对。这也意味着我们的域对象将构成四个元素(循环中四个项目的各自最后数值)。
范畴论和函子回顾
正如本文中已经提到的,范畴论已有许多应用,但大多数公开参考文献在代数拓扑方面倾向于零,这可能是因为该主题的原始作者,这就是为什么将 MQL5 应用于交易看似很新颖的原因。事实上,大多数熟悉 MQL5 的交易者倾向于使用神经网络来开发他们的前沿系统,或许是因为与范相比,它们经历的研究更久,这不应该阻止探索范畴,因为底线是大多数交易者都在寻求前沿,如果一个系统或方法太常见,那么能找到一个的几率就会降低。
函子,正如我们在上一篇文章中曾提过的,实际上是范畴之间的态射。这些“态射”不仅将两个范畴中的对象连接起来,而且还将范畴之间的同态连接起来。
在上一篇文章中,我们测试了两个场景,一个是使用两个范畴之间的对象连接,另一个是考虑相同范畴之间的态射连接。函子是两者的对数,出于我们的意图,尽管我们一次取一个来探索两者之间的差异,并为每个提供策略测试报告,这些突显出预测纳斯达克波动率的相对重要性。鉴于 2020年 1 月 1 日至 2020年 3 月 15 日的测试窗口较短,无法得出哪种映射更佳的结论,但结果当中的差异表明具有高度敏感性,因此需要强调一个盖过其它。
创建标准普尔 500 指数波动率范畴
SP500 波动率数据的收集和处理很简单,类似于我们在上一篇文章中衡量纳斯达克波动率的方式。VIX 是我们将在这里研究的单独指标,读者注意这一点很重要。故此,当前的波动率读数将在以下清单之后在每根新柱线上重新计算:
double _float_value=0.0; //where R is an instance of MqlRates... _float_value=(R.high-R.low)/Point();
如前所述,标普将形成我们的协域,对象捕获的波动率值作为一个对象的集合,以及它们之间的态射捕获波动率读数之间的相对变化。此范畴的初始化可以按如下方式处理:
正如我们在上一篇文章中所见,如果我们能将一个带有滞后的域映射到这个协域,我们就具备对标普 500 指数的波动性进行一些预测的能力。与上一篇文章一样,我们将在相同的信号和资金管理设置上分别测试对象和态射函子,从而衡量灵敏度。
从财经日历到标普 500 指数的函子
我们将使用以下清单构建财经日历数据的范畴:
该域中的每个对象都有两个顶点,它们是成对的日历值,其中至少有一个顶点位于协域中波动率值的时间范围内。由于这些财经数据大约每隔一个月发布一次,我们将在月度时间帧内进行测试。与上一篇文章一样,我们的函子映射将含有对象中每个数据点的系数。此处的区别在于,我们面临着多个对象映射到协域中同一波动性的可能性。理想情况下,我们需要分别从每个对象获取系数(对于线性映射),并在预测中使用它们。这意味着它们捆绑后必然会在态射映射提供的预测之上造成相互冲突的预测。这就是为什么出于本文目的,我们可以权衡从日历数据到标普范畴的每个函子映射,并将所有值的点积总和映射到波动率值。
这篇关于期货量化交易软件:MQL5 中的范畴论 (第 15 部分)函子与图论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!