Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
分析图块偏差有两种方法:图块是随机走动的--我们使用统计函数(阶乘等);图块是完全不随机的运动--我们使用过去运动的统计数据。如果您长期关注方格图的形成,您可能已经注意到方格图取决于构建的初始点。如果我们在每根蜡烛开盘时构建图表,那么蜡烛 N 和 N+1 时的图表会略有不同。因此,有两种方法可以生成过去区块的统计数据:同样在每根蜡烛开盘时或定期(例如每小时/天/周)生成一次,但同时应从同一零点开始绘制区块图。在每个柱状图上重新计算所有数据的方法是可行的,但速度非常慢。
分析图块偏差有两种方法:图块是随机走动的--我们使用统计函数(关于阶乘等);图块是不完全随机的运动--我们使用关于过去运动的统计数据。如果您长期关注方格图的形成,您可能已经注意到方格图取决于构建的初始点。如果我们在每根蜡烛开盘时构建图表,那么蜡烛 N 和 N+1 时的图表会略有不同。因此,有两种方法可以生成过去区块的统计数据:同样在每根蜡烛开盘时或定期(例如每小时/天/周)生成一次,但同时应从同一零点开始绘制区块图。在每个柱状图中重新计算所有数据的方法是可行的,但速度非常慢。
..我认为没有必要在智能交易系统中为每一对货币对重新计算这些参考值。您只需编写一个运行几天的脚本,就可以了--这里是文件中的参考值,让机器人从文件中读取。一年后,重新计算。即使在这么长的时间内,这些分布也不太可能发生变化。即使有变化,也不会太大......
数学数据不会有任何变化。我建议我们缓存这些计算结果。我附上了一个文件,其中包含这些阶乘、概率、概率之和、计算出的平均振幅的计算结果,并为工作时间缓存了所有这些数据。我想,除了我之外,其他人可能也会发现它很有用。因此,计算这些数值,甚至是每一格的数值,都不再是件难事。
但是,在过去,在每一个新的条形图上重新构建区块,而且是在多个区块大小的情况下....。规模越大,必须处理的条数就越多,才能获得分析所需的该规模的块数。
在我看来,假设价格在下跌条形图中经过 (O->H->L->L->C),在上涨条形图中经过 (O->L->H->H->C),比只假设收盘更有用。当然,这种方法计算量(绝对时间)增加不多,但也有优点。例如,可以更快地输入所需的反向块数。从 M1 切换到 M5 时,键入图像的变化不大。而当切换到 M15 或更高版本时,与 M5 相比则没有变化,甚至变化更小。这也为提高性能提供了前景。在构建前向块时,就没那么有趣了,因为在 "运动 "过程中,您可以构建一幅图像(例如,通过刻度立即构建),而在重新计算时,又可以构建另一幅图像。同样,如果要在下一栏收盘时绘制前向块,也可以使用 OHLC。"我当然不是大师",熊猫曾经这样说过,但我根据这篇文章,经过多次优化(其中第一次优化是统计计算的缓存)后,用自己的膝盖构建的结果大致如此:
- 美元兑日元 M1 货币,以开盘价计算,区块组从 24 到 40,区块大小从 90 点开始,在前一个区块的基础上再增加 10%(最大 256 点),总共 12 个大小。
- 在一个日历月内,简单运行平均需要 2.5 分钟,其中交易 处理份额仅为 10%。对趋势检测的要求越严格,开仓信号出现的频率就越低,区块大小和搜索时间就越多。信号出现的频率越高,固定回档和仅计算前向时间的频率也就越高,这也是非常快速的。
根据一个月 2.5 分钟的计算结果,很难找出细微差别或优化某些运行参数,但还是有可能的:)
文章中的想法很有趣,看起来简单明了。但是,正如一位女孩所说,"我不知道自己是否理解了......"。以上所说的并不是关于这个想法本身或对它的评价,而只是关于它的具体实现(当然,这是我自己的理解,并不完整)。
附注:开始时,我怀疑 24 个街区的平均徘徊率将为 3.8 :)
简单的数学计算不会有任何变化。我建议缓存这些计算。我附上了一个文件,其中包含这些阶乘、概率、概率之和、计算出的平均振幅的计算结果,并为工作时间缓存了所有这些计算结果。我想,除了我之外,其他人可能也会发现它很有用。因此,计算这些数值,甚至是每一格的数值,都不再是件难事。
但是,在过去,在每一个新的条形图上重新构建区块,而且是在多个区块大小的情况下....。规模越大,必须处理的条数就越多,才能获得分析所需的该规模的块数。
在我看来,假设价格在下跌条形图中经过 (O->H->L->L->C),在上涨条形图中经过 (O->L->H->H->C),比只假设收盘更有用。当然,这种方法计算量(绝对时间)增加不多,但也有优点。例如,可以更快地输入所需的反向块数。从 M1 切换到 M5 时,键入图像的变化不大。而当切换到 M15 或更高版本时,与 M5 相比则没有变化,甚至变化更小。这也为提高性能提供了前景。在构建前向块时,就没那么有趣了,因为在 "运动 "过程中,您可以构建一幅图像(例如,通过刻度立即构建),而在重新计算时,又可以构建另一幅图像。同样,如果要在下一栏收盘时绘制前向块,也可以使用 OHLC。"我当然不是大师",熊猫曾经这样说过,但我根据这篇文章,经过多次优化(其中第一次优化是统计计算的缓存)后,用自己的膝盖构建的结果大致如此:
- 美元兑日元 M1 货币,以开盘价计算,区块组从 24 到 40,区块大小从 90 点开始,在前一个区块的基础上再增加 10%(最大 256 点),总共 12 个大小。
- 在一个日历月内,简单运行平均需要 2.5 分钟,其中交易 处理份额仅为 10%。对趋势检测的要求越严格,开仓信号出现的频率就越低,区块大小和搜索时间就越多。信号出现的频率越高,固定回档和仅计算前向时间的频率也就越高,这也是非常快速的。
根据一个月 2.5 分钟的计算结果,很难找出细微差别或优化某些运行参数,但还是有可能的:)
文章中的想法很有趣,看起来简单明了。但是,正如一个女孩所说,"我不知道自己是否理解了......"。以上所说的并不是关于这个想法本身或对它的评价,而只是关于它的具体实现(当然,这是我自己的理解,并不完整)。
附注:开始时,我怀疑 24 个街区的平均徘徊率将为 3.8 :)
是的,我的数学运算是在运行时缓存的。测试很长...我正在为下一篇文章准备测试,在新年之前,我把测试放到了测试中。测试仪是单线程的,所以我把测试分成了 2 年(28 种货币对)的不同部分,并加载了 5 个终端。所有这些都测试了 14 天,然后我的路由器坏了,我开始直接用电缆连接互联网,结果在所有测试器中都出现了发送错误 10054 的错误....。所以下一篇文章不会很快...顺便问一下,谁知道发送错误 10054 是 什么样的错误,将来如何避免?
文章中还没有描述所有内容,ToR 中几乎描述了所有内容,但也没有描述所有内容))。现在我正在做一个更好的版本。
顺便问一下,对图 3.8 的疑虑是如何消失的?)
目前,我将提供从 2010.06.25 到 2012.02.27 这 1.5 年的结果。所有工具的参数相同
顺便问一下,谁知道发送错误 10054 的 错误原因是什么?
对数字 3,8 消失的疑虑是如何产生的?)疑虑消失了,数学。
据说 10054 是由于网络连接中断而导致的网络协议 错误。事实上,重新插上电源并不起作用。在许多程序中,当您拔掉网卡的链接(或断开路由器的连接)时,问题通常就会出现。在这种情况下(尤其是在接收到 dhcp ip 的情况下),Windows 会开始认为它不再拥有一个正常工作的网络设备,因此网络服务就会中断。同时,通过网络连接在本地运行的程序(例如,连接到本地地址 127.0.0.1 的程序)也会中断。
下面的方法帮了我:我创建了一个虚拟网络设备(loopback,你可以用谷歌搜索),给它分配了一个类似 127.0.1.1 的 IP 地址,并在主机中写入了我的电脑名称和这个地址。结果发现,系统中始终有一个活动的网络设备,电脑可以通过名称和这个地址与自己联系,网络服务也会启动,通过 tcp/ip 与自己通信的程序也会启动。
我也总是禁用 ipv6。
再说一次,我已经很久没有发现这个问题了,要么是我一直都在联网,要么是什么地方发生了变化......疑虑消失了,数学。
而 10054 大概是由于网络连接中断造成的网络协议错误。事实上,重新插入网卡并不起作用。在许多程序中,当您拔掉网卡的链接(或断开路由器的连接)时,问题通常就会出现。在这种情况下(尤其是在接收到 dhcp ip 的情况下),Windows 会开始认为它不再拥有一个正常工作的网络设备,因此网络服务就会中断。同时,通过网络连接在本地运行的程序(例如,连接到本地地址 127.0.0.1 的程序)也会中断。
下面的方法帮了我:我创建了一个虚拟网络设备(loopback,你可以用谷歌搜索),给它分配了一个类似 127.0.1.1 的 IP 地址,并在主机中写入了我的电脑名称和这个地址。结果发现,系统中始终有一个活动的网络设备,电脑可以通过名称和这个地址与自己联系,网络服务也会启动,通过 tcp/ip 与自己通信的程序也会启动。
我也总是禁用 ipv6。
再说一次,我已经很久没有发现这个问题了,要么是我一直都在联网,要么是什么地方发生了变化......谢谢我想我找到原因了,我不小心断开了网卡,我想这就是 windup 惊慌失措、测试仪停止工作的原因。谢谢!
请附上 MT5 EA 示例,以便我们按照您的想法测试您的理论。
请附上 MT5 EA 示例,以便我们按照您的想法测试您的理论。
该算法未在公共领域发布,但在下一篇文章中,我将以回溯测试 为例说明其工作原理。
问候。
一些想法及其结果。有点长。
分析图块偏差有两种方法:图块是随机走动的--我们使用统计函数(阶乘等);图块是完全不随机的运动--我们使用过去运动的统计数据。如果您长期关注方格图的形成,您可能已经注意到方格图取决于构建的初始点。如果我们在每根蜡烛开盘时构建图表,那么蜡烛 N 和 N+1 时的图表会略有不同。因此,有两种方法可以生成过去区块的统计数据:同样在每根蜡烛开盘时或定期(例如每小时/天/周)生成一次,但同时应从同一零点开始绘制区块图。在每个柱状图上重新计算所有数据的方法是可行的,但速度非常慢。
我绝望地在测试器中选择/测试了这个选项,并在演示版和在线版上测试了所有猜测或最佳参数,还在线控制了权益/平衡图表的结果。我必须说,在这些短时间内(最近一次是从 2001 年 1 月 21 日到现在),算法(以及我所理解和实施的算法)是相当稳定的。顺便说一下,我不是在每一格都根据信号开仓,而是根据新的信号开仓(例如,在 H 区块 150 便士时有买入信号,我买入,下一格开在买入 H=165,如果进入负值,就开在负值)。在 8 个模拟账户中,只有一个设置非常激进,余额为 1000 美元,杠杆为 1:1000,使用了 48 种货币对、金属、2 种石油,没有控制货币对的对冲("对冲")。- 当您买入 USDJPY 时,您不能买入 USDCAD,但您可以买入 EURUSD 等整套符号,文章中有),在交易中分配 10 美元,手数自适应,取决于块的大小,退出时仅根据符号上的交易总和或所有打开符号上的利润总和的累积利润。
稳定,是的,但缩水很大。当我们 "走错方向 "并继续建立头寸时,处于负值是可以理解的。但不太激进的设置并没有杀死其他账户,是的。
回到区块的计算方式。我现在使用以下变体。我们以上周五的收盘价为参考点。在此基础上,我们(1 次!)按照文章中的高度(*1.1)建立过去的区块组。我将初始点的 (iATR(sy, PERIOD_M1, 1440) X 5) 作为初始高度。我们立即建立长度为 StepMax+MAX_STAT 的集合(例如,48+1000),并以块为单位计算每个长度的运行频率分布等(假设从 24 到 48)。然后,在每一个新的条形图上,我们完成前向集,在长度范围(例如)[24;48] 区块内寻找每个 H 的信号,在之前计算的统计数据的指导下,选择一个合适的信号,决定打开一个新的信号,关闭/升级一个旧的信号,等等....。这种方法大大提高了计算速度,而且我认为与文章中提出的方法(在每条柱状图上 "从头开始 "计算)差别不大。同时,还出现了一些额外的可能性。特别是,如果水平在一周内没有变化,那么如果出现 H=180p 的信号(例如),您可以在预期的运动方向上放置网格订单....。
更进一步。这种方法允许不使用纯粹的统计数据,而是测量特定符号和区块大小的特定分布和预期。与 "纯粹徘徊 "相比,这种方法略微改善了结果。同时,我们还收集了徘徊模数长度的数据(在统计函数中,我也使用了移动模数长度,可以理解为随机游走一般情况下对零对称)。我应该单独指出,1000 个单位的样本量可以被称为 "统计上可靠",但这不是重点。
好了,接下来我试着收集里程长度在区块中的分布情况,并将其符号(向上或向下)考虑在内。结果更糟了。出乎意料。
我检查了 "28 种主要货币 "符号集和每种主要货币(*澳元*等)的符号集。这在 MT5 中已经存在。我检查了不同时期、区块结构参数、输入输出的各种细微差别....。
总的结论(根据现有结果)是,如果考虑到区块运动长度的方向,系统的效率就会降低。如果有人能解释一下,我将很高兴知道是什么和如何降低的。此外,如果有人有类似的经验,但结果却相反,我也很乐意进行讨论和比较。
您好
一些想法及其结果。有点长。
分析图块偏差有两种方法:图块是随机走动的--我们使用统计函数(关于阶乘等);图块是不完全随机的运动--我们使用关于过去运动的统计数据。如果您长期关注方格图的形成,您可能已经注意到方格图取决于构建的初始点。如果我们在每根蜡烛开盘时构建图表,那么蜡烛 N 和 N+1 时的图表会略有不同。因此,有两种方法可以生成过去区块的统计数据:同样在每根蜡烛开盘时或定期(例如每小时/天/周)生成一次,但同时应从同一零点开始绘制区块图。在每个柱状图中重新计算所有数据的方法是可行的,但速度非常慢。
我绝望地在测试器中选择/测试了这个选项,并在演示版和在线版上测试了所有猜测或最佳参数,还在线控制了权益/平衡图表的结果。我必须说,在这些短时间内(最近一次是从 2001 年 1 月 21 日到现在),算法(以及我所理解和实施的算法)是相当稳定的。顺便说一下,我不是在每一格都根据信号开仓,而是根据新的信号开仓(例如,H 区块 150 便士时有买入信号,我买入,下一格时买入 H=165,如果进入负值,就开仓)。在 8 个模拟账户中,只有一个设置非常激进,余额为 1000 美元,杠杆为 1:1000,使用了 48 种货币对、金属、2 种石油,没有控制货币对的对冲("对冲")。- 当您买入 USDJPY 时,您不能买入 USDCAD,但您可以在整套符号上买入 EURUSD 等,文章中有),在交易上分配 10 美元,手数自适应,取决于区块的大小,退出时仅在符号上的交易总和或所有未结符号上的利润总和上累计利润。
稳定,是的,但缩水很大。当我们 "走错方向 "并继续建立头寸时,处于负值是可以理解的。但不太激进的设置并没有杀死其他账户,是的。
回到区块的计算方式。我现在使用以下变体。我们以上周五的收盘价为参考点。在此基础上,我们(1 次!)按照文章中的高度(*1.1)建立过去的区块组。我将初始点的 (iATR(sy, PERIOD_M1, 1440) X 5) 作为初始高度。我们立即建立长度为 StepMax+MAX_STAT 的集合(例如,48+1000),并以块为单位计算每个长度的运行频率分布等(假设从 24 到 48)。然后,在每一个新的条形图上,我们完成前向集,在长度范围(例如)[24;48] 区块内寻找每个 H 的信号,在之前计算的统计数据的指导下,选择一个合适的信号,决定打开一个新的信号,关闭/升级一个旧的信号,等等....。这种方法大大提高了计算速度,而且我认为与文章中提出的方法(在每条柱状图上 "从头开始 "计算)差别不大。同时,还出现了一些额外的可能性。特别是,如果水平在一周内没有变化,那么如果出现 H=180p 的信号(例如),您可以按照预期的运动方向下单....。
更进一步。这种方法允许不使用纯粹的统计数据,而是测量特定符号和区块大小的特定分布和预期。与 "纯粹徘徊 "相比,这种方法略微改善了结果。同时,我们还收集了徘徊模数长度的数据(在统计函数中,我也使用了移动模数长度,可以理解为随机游走一般情况下对零对称)。我想单独指出的是,1000 个单位的样本量可以有条件地称为 "统计可靠",但这不是重点。
好了,接下来我试着收集里程长度在区块中的分布情况,并将其符号(向上或向下)考虑在内。结果更糟了。出乎意料的是
我检查了 "28 种主要货币 "符号集和每种主要货币(*澳元*等)的符号集。这在 MT5 中已经存在。我检查了不同时期、区块结构参数、输入输出的各种细微差别.....。
总的结论(根据现有结果)是,如果考虑到区块运动长度的方向,系统的效率就会降低。如果有人能解释一下,我将很高兴知道是什么和如何降低的。此外,如果有人有类似的经验,但结果却相反,我也很乐意进行讨论和比较。
是的,图表取决于构建的初始点,这样做的目的有两个,一是为了让算法在区块的帮助下克服价格舍入的误差,更好地找到最大刻度,二是为了避免与历史拟合。当图表随起始点变化时,就能更准确地评估算法本身的质量。
我在测试器中对其进行了测试,并将在下一篇文章中展示其工作原理。在演示版中,时间较长,信息量不大。对 28 种货币对进行为期 1 年的测试需要 15 天(Ryzen 3700)。按照描述的方式,收益并不高,但它能非常稳定地通过回溯测试。我现在正在改进算法。
该工具的统计特性有一个特点。它可以提取统计特征,并根据这些特征调整超额收益的百分比,但有必要使用大样本值来评估工具的整体特征。可以捕捉局部偏差,但要出于其他目的。在我的测试中,多头和空头仓位的单独加权参数在股票上效果很好,也就是说,当考虑到不对称性时,效果会更好,我也会在下一篇文章中简要说明这一点。
还应该根据当前的市场情况调整初始区块大小。我最初是通过波动性来调整的,但现在我正在重新修改,以考虑到市场的特殊性。
但我的想法是先做一个基本算法,然后再用统计数据来覆盖它。统计数据不能就这样测量,我们需要考虑到,我们是在一个大的窗口上测量统计特征的,如果它们偏离了随机漫步,未来就会趋向于随机漫步,我们需要提前使用次优参数。统计不应该是赤裸裸的,而是要考虑到理论,但我没有写理论,因为我没有证明它,我不喜欢写没有证明的东西。
总的来说,算法是一个分身,现阶段它的任务不是排泄和赚取什么。
干得好
谢谢!