MQL5 中的范畴论 (第 11 部分):图论
概述
在上一篇文章中,我们探索了典型幺半群中的对称性概念,深入研究了幺半群。在引入一个额外的公理,即一个幺半群的所有成员必须具有一个可逆的、限定镜像元素之间二元运算来产生衡点元素,我们扩展了幺半群在关键交易决策点的适用性。据此构建,我们现在通过验证图论,继续研究范畴论,及其在交易系统开发中的实际应用。
图论是复杂系统建模,以及各种组件之间关系可视化的强大工具。在交易系统开发的环节中,以 MQL5 实现范畴论图论能为我们如何看待决策过程提供有价值的见解和补充视角。我们之前的文章暗示了幺半群在重新分类,以及常规化幺半群集合在改善交易决策方面的潜力,然本文探索范畴论图论的实用性,即作为 MQL5 交易系统开发的一部分。尽管人们承认图论在范畴论中的广泛实用性和相互关联性,然本文旨在强调对交易系统开发的具体益处;尾随破位管理,如同我们在之前文章里曾研究过的交易系统。
通读本文,我们也许能揭示在 MQL5 中使用图论的其它优势,验证它们如何增强系统设计和组织,促进高级数据分析和可视化,以及对系统优化和性能改进的贡献;不过,它们并不是焦点。
理解范畴论中的图论
图论是一种“具体”定义在系统内顶点和箭头之间相互连接的方法。因此,在范畴论中,它们构成了四件事,即:顶点集、连接这些顶点的箭头集、从箭头集到顶点集的同态函数,该函数映射每个箭头的源顶点、最后是箭头目标到这些顶点集的另一个同态函数。
不过,在我们深入讨论之前,先谈谈图论和范畴论之间的主要区别可能会有所帮助。乍一看,两者似乎都是关于连接事项的,这可能会引出路人的问题:为什么它们不是一回事?为了回答这个问题,如果我们以烹饪过程为例,每一步都有其步骤和配方;图论专注于给定配方的准备步骤顺序,以及这些步骤(路径)迭代中的其它可替代或改进的配方。另一方面,范畴论将采取更抽象的观点,更多地关注每个烹饪步骤的转换,并研究如何将它们与其它食谱的烹饪步骤转换进行比较。如果我们把每个烹饪步骤都看作是一个包含配方清单的集合/域,那么另一份食谱则相当于另一个范畴。换句话说,范畴论更强调形态,或者在这种情况下是函子,而非步骤顺序。故此,我们在这里将图论视为范畴论的工具。有关该主题的更多信息,图形范畴对比范畴图论。
就我们的目的而言,图论可被视为一个互连系统中步骤顺序与其编号的一种归类手段。自从我们开始研究幺半群以来,我们已看过了遵循以下步骤的交易决策系统(每个节点都伴随幺半群):
- 选择时间帧
- 选择回溯期
- 选择应用价格
- 选择指标
- 最后选择交易动作
这可以用示意图表示,如下所示:
也可以绘制相同步骤的替代系统,如下所示:
选项 1
或选项 2
对于选项 1 和 2 的每一种,我们只是简单地在时间帧和交易动作之间迭代过渡步骤。正如我们将在下面的案例研究 2 中所见,创建不同路径的潜力呈现出不同的形态,这些形态可有助于制定一些交易决策。
从形式上讲,如果我们研究从时间帧到交易动作的默认系统,则图论会表示为两个表格:一个箭头表格、和顶点表格。如下所示:
其中箭头表格中的源索引和目标索引是顶点的索引值。箭头中的索引列仅作为箭头列举。
在重塑交易系统时,我们考虑并共享了报告,正如之前的文章一样,我们将轮流通过回顾、应用价格、和指标等内部步骤来探索图论的重要性。我们将维持同样的开始和结束步骤,以免令我们的逻辑过于复杂。此外,如果我们要研究“没有理想的系统,故期望在每根新柱线上发生变化”的假设,我们将考虑各种图形之间可能的同态;因此,我们将尝试投影给定的下一个图形同态,也就是说,最近的两个。
MQL5 和交易系统开发
在系列文章中,我们已查看了自内置 MQL5 向导库开发交易系统。用户只需使用 IDE 内置向导即可组装交易系统作为智能系统,在此过程中,可从函数库中选择可用的信号、资金管理方法、和尾随破位方法。对于这些文章,我们正寻求增加替代方案来扩展函数库,特别是尾随破位内置方法,用到了文章中探讨的范畴论概念。
MQL5 中的交易系统开发经常受到许多挑战的困扰,从调试相对编码简单的智能系统,到获取和使用准确的跳价数据,最后是依据相当长的历史记录进行测试。还有其它挑战,但我坚信这些可能是主要的。调试问题往往比其它问题更微妙,因为很多时候这些错误并非编译错误,这类错误编译器会通知您,但若您的智能系统逻辑中出错就不会报错了。直到您实战之前,只经由测试来发现全部这些错误并不可行。这就是为什么您的智能系统,要尽可能多地从标准库组装部件,如此可在很大程度上避开这种陷阱。由此,我们在这些文章中测试的系统,都通过向导使用公开的函数库和标准代码进行组装,仅有的修改是为了实现特定概念的自定义类。
探索图形在 MQL5 交易系统中的实用性
如果我们从寻找 MQL5 中图论的抽象益处开始,也许会有所帮助。这是因为总的来说,它们具有增强系统设计和组织的潜力。
如果参考我们的假设,即在时间帧选择和交易动作选择之间没有理想的交易步骤顺序,那么我们就能利用这些系统之间的变化作为图形同态。这些同态可用于研究序列的二次、甚至线性关系,由此查看是否可以进行预测。换其它方式,我们正在利用图论来更好地管理交易系统的组件关系。
如果我们能够在图形同态之间建立这样的关系,无论是二次关系还是线性关系,我们就可以在其它、或类似的价格动作状况下重用它,从而排除重新研究和计算这种关系的需要。说法不同,但我们正在提高交易系统的模块化和可重用性。
还有更多。如果我们跳出“封闭”交易系统之外,尝试看看各种图论的“路径”还能示意什么,我们能针对路径类型和价格行为之间的相关性进行分析。假设我们参考单根价格柱线,其有四个典型价格:开盘价、最高价、最低价和收盘价。我们可将这些视为一条路径,因为通常它们的顺序并不总是“开-高-低-收”。在看涨柱线中,尽管并非始终如此,但顺序可能是“开-低-高-收”。基于先前柱线内价格走势的路径类型,以及早期价格行为变化检测,这样和其它观察能引形态识别。
此外,如果我们简单地对 5-步交易系统的内部步骤进行代码上色,从时间帧选择开始,到交易行为选择结束,以及令我们的智能系统定期更新,并在其所附着的图表上显示这些上色的步骤顺序,我们就能一目了然地知道我们当时所用的是什么系统。如果我们坚持我们早前的假设,即理想的步骤序列可能会在每个新的图表价格柱线上变化,这将很有帮助。这种动态形式的交易系统的可视化表示对于交易者分析和理解长期价格行为趋势非常有帮助。
如果输入参数与图论设置相匹配,则也可以利用图论来优化和提升交易系统。举例,如果在一个与我们在研的不同交易系统中,我们试图为每种类型的柱线内价格步骤找到理想的入场信号(参见上面的 OHLC),这些信号可以在策略周期内进行优化,并进行前向验证测试,看看该策略是否有效。
不过,经由图论也存在瓶颈。最主要的是对视觉表现和解释的需求。在流动的交易环境中,这可能是一个相当大的拖累,这就是为什么使用图论的智能系统需要尽可能高效的内存方法,如各种系统步骤的索引,达到无缝和灵活,以便更流畅和高效的执行。
案例研究:以 MQL5 实现图论
案例研究 1:基于价格柱线内数值的图论:
对于我们的第一个案例研究,我们可以像之前的文章一样,检查滞后价格柱线内部的不同图论路径对后续价格柱线的最终高点和低点范围的影响。故此,回顾上面所研究的价格柱线内部顺序,开盘价、最低价、最高价、和收盘价。您始终以开盘价开始,以收盘价结束,但高点和低点的顺序没有标准,这种可变性令我们能够研究其后续变化余高、低点的任何关系。为了达成这一点,我们将像以前一样构造一个 Expert Trailing 类的实例,并与函数库中的其它现有的信号和资金管理类配对,从而形成一个智能系统。在这项研究中,我们的尾随类将与令人敬畏的振荡器信号类、和固定保证金资金管理类配对。
如果我们的测试基于 USDJPY、2022 年 6 月至今年 6 月、H1 时间帧,我们会得到以下报告中所示的结果。
案例研究 2:先前交易系统依据图论修改
对于第二项研究,我们可以研究一下前几篇文章中所用的交易系统,内部不同步骤迭代。回想一下,这些步骤是:时间帧选择、回溯周期选择、应用价格选择、指标选择,最后是交易决策选择。那么,由于我们限定了案例 1 中图论路径的第一个和最后一个顶点,我们还分别将时间帧选择和交易决策选择固定为第一个和最后一个顶点。因此,在测试和检查中,我们将迭代回溯期、应用价格和指标选择,从而得到不同的路径。每条路径的影响,如案例 1 一样,验证预测价格柱线范围之间变化的准确性。基于所选迭代做出的预测将用于调整尾随破位,就像之前的文章一样。
如果我们像案例 1 一样针对 USDJPY 进行测试,我们会得到以下报告中所示的结果。
潜在挑战和注意事项
据上述研究的 2 个案例中实现的智能系统测试可以看出,在交易系统中使用图论相当复杂,并且涉及陡峭的学习曲线才能获得有意义的结果。如果我们研究第一个智能系统,我们从柱线内开盘价、最高价、最低价和收盘价的价格步骤中导出我们的路径。这些路径被编码为一个基本类,甚至未包括每个箭头的权重,如果图论类实例随着时间的推移更新箭头信息,则此功能更加实用。我们用一个类实例来替代,该实例在每根新柱线上初始化,从而丢失了学习内存。理想情况下,实现后者需要将文件存储在这些图形的 IDE 沙箱之中,而这本身就要消耗内存。此外,与我们在案例研究中所用的简单类相比,测试时涉及的处理能力和时间将增加。此外,我们选择将每个顶点定义为柱线内的一个价格点,但我们可以使用计算效率更高的选项,将每个价格点定义为收盘价。这表明需要仔细权衡决策,并与系统预期准确度取得平衡。甚至,有许多类型的有向图形,这意味着开发人员需要仔细选择与他们心目中策略最相配的有向图形。糟糕的是,经纪商的价格数据从来都不是完整的,而且经常充斥着缺口和缺失的价格。此外,图形箭头的穿插关系,即连接的价格点,也是相当复杂。它受到许多因素的影响,包括市场状况、投资者情绪、和财经事件、以及诸多其它因素。图论系统开发人员有责任提出一种途径来捕获这一点,从而他的系统能从长远看获得有意义的交易结果,并且考虑到此处引入的歧义量,它肯定会令过程复杂化。最后,可扩展性是此处应该考虑的事情,因为随着新价格数据的发生,每天图形,尤其是带有权重的学习类型(我们在案例研究中尚未涉及)将需要更新。随着时间的流逝,图形的重新训练的计算量必然会变得更加密集,除非开发人员能够想出明智而有效的方法来编写他的类,避免这种情况。
目前还没有函数库,至少能适合帮助以 MQL5 实现图论。这意味着编程人员需要投入大量时间和资源来提出可行的解决方案。而且由于它们通常不是共享的,而是独立的,故它们必然容易出错。MQL5 IDE 中提供了大量的交易指标,实现了从相对强弱指标到布林带等一系列思路的交易指标(总共至少 47 个),故而无需从头开始编写代码。
如上强调,在 MQL5 中没有合适函数库的情况下,从头开始实现图论结构和算法不仅耗时,而且容易出错,并且必然需要交易者投入大量精力来编写可行的方案。这个过程不仅增加了开发时间,而且还带来了更高的出错和效率低下的风险。
与图论实现相比,其它若干使用广泛的交易概念在 MQL5 中有文档齐备的可用函数库。这些指标包括:内置技术指标,如移动平均线、振荡器和趋势线。交易者可以轻松访问和利用这些指标,无需重新发明轮子。甚至,交易社区开发了大量自定义指标,允许交易者从众多预构建的解决方案中进行选择。
此外,MQL5 提供了一套全面的数学函数,包括统计计算、数学变换、和概率分布。这些函数令交易者能够执行复杂的计算和分析,从而促进复杂交易策略的开发。
虽然 MQL5 擅长为许多交易概念提供函数库,但缺乏专门为图论实现量身定制的标准库,而这构成了重大挑战。希望将图论纳入其策略的交易者面临着花费时间和精力过多、可靠性和效率差、以及陡峭的学习曲线、等等障碍。
为了弥合 MQL5 实现图论的缺口,可以参考几种方式。这些可能包括社区贡献,鼓励 MQL5 社区开发和共享与图论相关的函数库,这些函数库可以显著提高预构建解决方案的可用性。促进协作、知识共享、和创建开源项目,培养一个充满活力的生态系统,令所有寻求基于图论开发策略的交易者受益。另一个途径是第三方函数库,可以考虑在 MQL5 生态系统之外进行探索,以便提供替代解决方案。各种编程语言,如 Python 或 C++,已经拥有广泛的图论函数库,可以通过自定义 DLL(动态链接库)、或 API(应用程序接口)与 MQL5 集成。最后,通过游说服务台在未来的 MQL5 更新中包含标准化图论函数库来支持,如此可以利用平台开发人员的专业知识。就此类函数库的必要性和益处提供反馈,请求增强,可能会激励平台提供商解决这一缺口。
此外,IDE 中提供的 Open-CL 可以帮助解决性能问题。
未来的发展方向和可能性
范畴论图论的进步导致交易系统的可能实现,每天都在发生。这里和这里的一些网站涵盖了这些问题。无须多言,与 chatGPT 4.0 等人工智能平台的集成也许不像 2 年前所说的那样深奥。很多事情正在发生。进一步的研究和开发,令有意义的影响和机会继续萌芽,这就是为什么我们也许会继续听到该领域更多令人兴奋的消息。
结束语
回顾一下,本文研究了以 MQL5 实现范畴论图论。重点放在图论在交易系统开发中的实用性。我们鼓励读者在自己的交易系统里采用之前,对所提供的材料和代码深入研究。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/12844