编码帮助 - 页 408

 
airquest:
好吧,还是...这里有一些测试。

- 默认设置(无优化,WriteCSV为真):Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- 优化设置为True,PeriodMin为20,PeriodMax为20。Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

第一条给出了一致的数值(CSV文件和屏幕结果一致)。这很正常,因为两者都是来自相同的变量。但是在第二个文件中,opti结果与屏幕结果相比几乎乘以10。虽然,它们最终的结果应该是一样的......

总之,不急,也许随着时间的推移,我会发现问题所在。谢谢你的帮助,Mladen。

嗨,Airquest。

谢谢你为策略测试器提供了一个非常有趣的替代方案......你的编码非常有创意和才华。

我确实用你的指标玩了一下...。

看起来你有两个不同的变量来计算总数...

一个用于正常运行=TotalTrades...

和一个用于优化运行=总交易量...

但是......你的评论只显示了你的正常运行TotalTrades......。

继续添加你的优化...totalTrades...到你的评论中,看看是否解决了这个问题...

这希望能回答你的问题,为什么屏幕显示的......和电子表格的总数之间会有差异?

希望这有帮助。

罗伯特

 
cosmiclifeform:
Hi Airquest,

谢谢你为策略测试器提供了一个非常有趣的替代方案......你的编码很有创意,很有才华......!

我确实玩了一下你的指标...

看起来你有两个不同的变量来计算总数...。

一个用于正常运行=TotalTrades...

和一个用于优化运行=总交易量...

但是......你的评论只显示了你的正常运行TotalTrades......。

继续添加你的优化...totalTrades...到你的评论中,看看是否解决了这个问题...

这希望能回答你的问题,为什么屏幕显示的......和电子表格的总数之间会有差异?

希望这有帮助。

罗伯特

不确定最终的结果是否正确。问题是,通过显示来自opti函数 的总交易量,你可以看到这个函数是否运行良好。也不知道如何从double函数中返回一个以上的参数(你需要同时返回余额和胜率)。但主要原因是要看到结果有差异,所以函数中应该有问题......

 

大家好,我刚刚写了这个基于RSI的自定义指标。

我有一个想法,想在EA中使用它。 我需要帮助来编写它...

这是个只买不卖的策略。

在每个上涨信号时买入...下跌信号时全部平仓

理想情况下,EA将增加每一个连续上涨信号的手数,而不进行平仓。(当然,有一个最高限额)

该指标的工作原理是,每当RSI越过一个设定的水平时,在图表上出现一个箭头。

arrow_rsi.mq4

附加的文件:
arrow_rsi.mq4  3 kb
 
airquest:
不确定最终的结果是否正确。问题是,通过显示来自opti函数的总交易量,你可以看到这个函数是否运行良好。也不知道如何从double函数中返回一个以上的参数(你需要同时返回余额和胜率)。但主要原因是要看到结果有差异,因此函数中应该有问题......

空问

要从一个函数 中 "返回 "你所需要的参数,可以通过引用将一个参数传递给一个函数。像这样:

double a;

double b;

double c = testFunction(a,b)。

double tectFunction(double& _a,double& _b)

{

_a = 1;

_b = 2;

返回(_a+_b)。

}

之后,a和b将被testFunction赋予1和2的值(在这个例子中隐含地 "返回 "了3个值--我在函数中使用_a和_b的名字只是为了表明,当通过引用传递时,它们不一定要有相同的名字,否则根本不需要这样做)。

 
airquest:
不确定最终的结果是否正确。问题是,通过显示来自opti函数的总交易量,你可以看到这个函数是否运行良好。也不知道如何从double函数中返回一个以上的参数(你需要同时返回余额和胜率)。但主要原因是要看到结果有差异,因此函数中应该有问题......

嗨,艾奎斯。

从我看到的情况来看......你的指标似乎工作得很好。

我仍然认为这是一个 "显示值 "问题...而不是任何计算问题。

以下是我看到的指标中发生的情况......

程序有两个选项 - 1)正常运行 2)优化运行

它们不是非此即彼的选择......

当没有选择优化时......程序只做正常运行......。

当选择优化时......程序仍然进行正常运行......然后进行优化运行......所以它得到了两个值。

然而......只有正常运行的数值显示在屏幕注释中......而根本不显示优化的数值。

附上我的测试,显示屏幕上显示的优化值与电子表格上的值 相同......。

这告诉我,你的所有计算都是正确的...

另外,看起来它使用电子表格中的最后一条记录来获得最终的优化值......

我还建议在不加载其他图表/指标的情况下运行它......并且每次只使用几个选定的值来测试。

我有20多个图表在运行......当MT4为这个指标进行计算时,它变得没有反应......。

最好使用一个干净的MT4设置来运行优化测试......

但好消息是......它不会锁住我的系统,因为我可以在它计算数字和制作报告时做其他事情。

同时......就我在下面的屏幕截图中可以看出......你的指标似乎工作得很好......。

BTW......这是一个了不起的编码......。非常感谢你的分享...!

希望这有帮助。

罗伯特

 
cosmiclifeform:
嗨,Airquest,从我看到的情况来看......你的指标似乎工作得很好。

不客气,非常感谢您的发言。这个想法确实是为了取代mt4策略测试器 的优化(我认为它很烂,太慢了),用于回测简单的策略。是的,你需要等待一下它的加载和计算,但从我看到的情况来看,它已经比普通的优化更快、更方便。

但是,我仍然认为这个指标有问题,它不能正常工作。用优化后的结果取代屏幕上的文字,根本不能显示这些出来的结果是对还是错。这就像给一辆生锈的汽车刷漆一样。

我认为opti功能给出了错误的结果。你可以从你的截图中看到,CSV中的结果是5'307个交易。这是不可能的。这取决于你的屏幕上有多少个柱子,但不可能该策略给出了5'307个交易。为了确定,你不需要计算箭头,你可以减少测试的条数,就像我在这个截图中做的那样(我把它设置为100条)。

你可以看到,对于100个柱子,只有10次交易,有4个赢家(计算箭头),而opti的结果显示有89次交易。因此,基于视觉回测,屏幕结果是正确的(对于opti所说的最佳时期),而CSV是错误的。因此,这表明我们不应该相信CSV的结果,无论是用于计算交易还是用于确定哪些设置是最好的。

所以我把这个问题用更简单的方法解决了。我做了一个简单的指标(附后),在屏幕上显示优化双倍函数和启动int函数(主要计算)的结果。所以你不需要写CSV就能看到这两个结果是不同的。

基于这个指标,我的(简单)问题是:为什么地球上两个完全相同的计算(一个在Start函数中,另一个在Optimization double函数中)会得到不同的结果?如果有人能帮助我理解这一点,那就太好了,因为我真的不明白。在我看来,两者是完全一样的,应该得出相同的结果。非常感谢。

PS:这个指标还是有点慢,你可能需要等待几秒钟才能显示结果。不过,当结果出来的时候,它会播放声音。

附加的文件:
sa1.png  78 kb
sa3.png  41 kb
 

Hi Airquest,

我试了一下你的 "样本测试",但无法使其工作。我看了看代码,它有400多行被删除了......所以我没有管它。

我确实回去测试了你的原始代码......我想我开始明白你所说的 "太多交易 "的问题了。

为了保持测试的简单和快速......我只用Bands进行了测试......并最小化了设置(Bands 10和Bands 20),只运行了两(2)次,以便更快地看到结果。

我还关注了 "BarsToCount",因为这似乎与交易的数量直接相关......。

虽然我没有找到任何答案......但我可能有一些更多的线索给你......

"BarsToCount"...似乎不起作用...

我运行了你的代码,有1个柱子...2个柱子...和100个柱子...。

结果都完全一样......这不应该......因为更多的柱子应该等于更多的交易......而更少的柱子应该等于更少的交易。

我附上了我所做的三次运行的屏幕截图......只改变了 "BarsToCount"......。

也许这条线索可以帮助你找到其他的问题。祝你找到你的答案。

希望这有帮助。

罗伯特

附加的文件:
 

最后我成功地制作了一个工作版本。现在opti的结果是正确的,与屏幕上的结果一致。我只是去掉了双重功能,把它全部放到了启动功能中。所以现在,你只有一个选择:在测试者模式(所以它会使用默认设置)或在优化者模式(不会绘制任何东西,只会写一个CSV文件)下运行它。运行优化后,你可以回到测试者模式,检查结果是否正确。

如果你发现任何问题,请让我知道,最好是通过PM,因为我们不想破坏这个主题。伙计们,非常感谢你们的帮助。这个论坛很好,人们互相激励和帮助(大部分时间),这也是我在这里发表的原因。现在让我们开始回测

 
cosmiclifeform:
你好,艾奎斯。

罗伯特,谢谢你的帮助。请看我上面发布的版本,它现在应该可以工作了。

PS : 为了限制条形图的数量,你需要把UseAllBars变成False。你可能没有看到这一点。

请注意。

 

嗨,Airquest。

干得好,跟踪它并让它工作...!

我期待着这周能与它一起玩...

谢谢你,保重。

罗伯特

原因: