回溯测试/优化 - 页 82

 

关于回溯测试、买入/卖出价格的好帖子。

https://www.mql5.com/en/forum/181204

 

Strategytester:MT4的手数限制

你好。

我怎样才能改变MT$策略测试器 的最大手数设置?目前,策略测试器无法打开>50手的潜能。

策略测试器中是否有余额限制?

希望得到帮助。谢谢!!!"。

 
lsteixeira:
我所使用的一些像样的数据来自于这里。

Http://www.histdata.com

干杯!!

谢谢你的建议......我现在使用的是Ducas的tickdata,建模质量为99%。我不能完全说,这与现实有多接近,但我希望它足够接近^^。

 

[langtitle=fr]关于回溯测试的问题[/langtitle] 。

[lang=fr]全世界的朋友们,你们好。

我向你求助,因为我在对我的EA进行回测时遇到了一个问题。

正如你在图表中所看到的,它有一个残酷的中断,我不知道是什么原因造成的,我有一个10点以上的止损

附加的文件:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

测试结束后的正常停损

targetik:
[lang=fr]Bonjour tout le monde,

我去找你,因为我在回测我的EA时遇到了一个问题。

正如你在图表中所看到的,它有一个残酷的变化,我不知道是什么原因造成的,我有一个10点以上的止损。

嗨,Targetik。

这是一个正常的 "策略测试 结束 "止损......

当测试结束时,测试者会关闭所有未平仓的交易......而你所有未平仓的交易通常会以亏损结束。

我只是忽略最后一笔交易......或者我重新设置日期,使其超过那笔交易,这样它就可以正常关闭......或者我设置最后一笔关闭交易的日期,这样我在测试结束时就没有任何未结交易。

希望这有帮助。

罗伯特

 

[lang=fr]Merci beaucoup [/lang]

 

伟大的主题!

--

 

检索优化中的最高净值?

是否可以在MT4中检索任何一组优化结果的每次运行所达到的最高权益信息?

据我所知,MT4没有在结果窗口中提供策略在回测期间达到的最高净值信息--无论是在优化结果中还是在单个手动运行的报告中。(最接近的是缩减美元,我认为这需要你知道相关的谷底值,以确定之前的峰值是多少--你只能从最终的余额中猜测)。据推测,策略测试者 在计算过程中的某个时刻会知道那个确切的最高权益数字。有什么方法可以为优化结果检索该数据吗?

我可以想出一个部分的解决方法。通过在EA中添加一个变量,作为达到的权益 "最高水位 "的记录,然后在运行结束时(或任何时候)将其打印到日志中,就可以看到单个手动回测期间达到的最高权益。问题是,当同一策略作为优化的一部分被运行时,日志信息似乎不可用。这对少量的手动运行来说是可以的,但不适合大量的优化。

我唯一能想到的其他解决方法是使用一个作为EA的指标,并将其加载到正常的终端图表中。通过输入一个 "开始时间 "作为外部变量,它可以保持利润和损失的统计(只要不是在蜡烛图内开仓)。然而,这样做的问题也是一样的。你仍然需要手动输入不同的外部变量,以实现每一次不同的优化可能性--这可能是很多的!你也可以将一个人为的 "开始时间 "作为外部变量。

另外,你可以在EA中设置一个人为的净值上限,一旦达到预先确定的净值,就关闭所有头寸,结束EA的交易。然后你就可以在优化的结果中看到以该值结束的运行次数的列表。然而,你不会知道任何给定的运行是否会继续达到更高的权益,除非你用不同的权益上限运行大量的运行。不过,这似乎是一个非常笨拙和低效的工作方法。

(即使能够看到一个简单的余额与交易数的图表也是一个开始--但在优化中似乎也没有这个功能)。

有谁知道有什么更好的方法,可以更有效地进行优化?

 

我想我刚刚找到了我自己问题的答案,所以我将在这里发表,以防有人还想知道答案。

一个解决方案是使用全局变量(全局变量 - MQL4文档)。事实证明,全局变量在每次优化的运行过程中都会被设置或更新。我这里指的是客户终端范围的全局变量,而不仅仅是EA内的 "全局变量"。既然变量是全局的,你就可以用策略测试器以外的东西来查询它。你可以简单地在EA内部添加一个正常的(双倍)变量,该变量会在每一个交易日更新自己的最高净值,然后在同一EA的deinit()部分设置一个全局变量为该值。这个全局变量可以在每次优化完成后,在终端的普通图表窗口中使用GlobalVariableGet()脚本进行查询,得到的数值可以显示为评论或使用Print记录在终端日志中。

这种方法的唯一问题是,你必须在优化的每一次运行之后(在下一次运行完成之前)手动运行该脚本--所以你仍然需要坐在那里观察优化情况。我不认为EA可以用来查询全局变量,因为EA需要多次运行以捕获优化的多次运行。最有可能的是,在优化过程中,你不会收到任何点数,因为你将与实时数据断开连接,以保持你的点差设置。我猜测,向EA发送 "假刻度 "的各种方法,从优化运行到正常的终端图表都不会起作用...。

如果你使用的账户有稳定的点差大小,这个问题就不大了,在这种情况下,你可以在连接到传入的实时数据时运行优化,而没有改变点差数据的太多风险。但如果你想在周末进行优化,这仍然是一个问题。另外,如果你的下一个优化程序在收到新的tick之前完成,那么上一个程序的数据将不被记录下来。

你可以通过为每个优化过程设置一个独立的全局变量来解决这个问题,然后在最后按F3将它们全部读出来。这可以通过deinit()中的循环操作来完成,以检索当前全局变量的数量("n"),然后将当前全局变量命名为 "n+1",并将其设置为相关的股权值。这样,你就可以在最后按F3键查看所有的变量,而变量的名称将与运行的通过数相同(只要在优化开始时没有全局变量存在--这可以通过在每次优化前运行GlobalVariablesDeleteAll()脚本轻松实现)。我不确定全局变量的最大数量是多少--但只要你有合理的优化数量,我想应该是没问题的。不幸的是,我不认为按F3的数据是可以导出的,所以你必须用屏幕截图或好的老笔和纸把它复制下来(或者如果你使用了大量的通道,就为每个优化安装一个单独的MT4)。我想你也可以写一个脚本,在优化完成后将所有全局变量的名称和数值打印到终端日志中,然后导出该日志。

当然,这种方法可以用来检索优化中的任何数据,而不是依赖策略测试器优化结果窗口中的有限信息。希望这对大家有帮助 :-)

 

p.s. - 我刚刚意识到Print和Alert都只允许64个字符,所以如果你使用的优化超过了少数几个,你就不能写一个脚本来打印全局变量。(除非你把每个全局变量打印在终端日志的单独一行中,然后点击并把它们一一复制到EXCEL或类似的地方。似乎没有办法在任何时候在日志中选择一个以上的条目)。

为了解决这个问题,你可以使用循环操作将每个全局变量的值依次写入一个巨大的字符串(使用 \n 将每个全局变量的值 放在一个新的行中),然后使用 SendMail()将这个字符串发到你的邮箱中。在Send Mail中似乎没有对字符数的限制。你可以很容易地把这些邮件数据复制到你电脑上的一个文本文档中,然后使用excel中的Data/Import External Data/Import Data按钮,以任何你想要的格式导入这些数据。如果你也把优化结果复制到一个文本文件,然后用同样的方法把它们导入Excel(在第一个屏幕上选择 "分隔符",然后勾选 "其他 "框,并在该输入框中输入"=",以便把文本和数字分开),然后你可以简单地把电子邮件中的数据与从优化中直接导出的数据排成一行。这样,你就可以把你从优化中提取的任何信息用全局变量与从优化中导出的任何给定的数据放在同一行。很简单。