intOnInit()
{
if(iCustom("EURUSD",PERIOD_D1,"Spy Control panel MCM",ChartID(),0,CHARTEVENT_TICK) == INVALID_HANDLE)
{ Print("Ошибка установки шпиона на EURUSD"); return(true);}
if(iCustom("GBPUSD",PERIOD_D1,"Spy Control panel MCM",ChartID(),1,CHARTEVENT_TICK) == INVALID_HANDLE)
{ Print("Ошибка установки шпиона на GBPUSD"); return(true);}
}
你为什么要挑剔那第二个来源呢?)
如果我开始就事论事地回答,得到的答复要么是"分别撕掉的短语",要么是"我不是那种认为自己对所有事情都是正确的人"。这已经很清楚了。
关于乒乓球的事情,采取这种立场有点奇怪。你对一个话题感兴趣,你得到的答案和引导性问题,你开始要么挑战他们,要么刷掉他们。你或谁首先需要这个话题?我个人不需要这些结果,你的选择的结果对我来说没有什么兴趣。这个话题本身似乎值得关注,但作者的论战狂热让人对维持这个话题的便利性产生怀疑。
为什么会是这样呢?你把OnTimer作为第三个数字。在这个问题上你已经被引用过了:你只需要实现一个能够正确执行测试的方法。有一个。这是有最小间隔的 OnTimer()函数。所以你一定有别的想法。
在这之前,你写道。
但这并不是同一件事。
事实上,你正试图 "捕捉 "所有符号的新条形图 的时刻,很明显,最好的方法是使用OnTick事件。
问题是,我不是要在OnTimer()中 "捕捉 "ticks。在OnTimer()中,对新条形的检查是对每个符号单独进行的。这种检查是在定时器中设定的时间间隔内进行的(单位:秒)。
在OnTick()函数和Konstantin Gruzdev提出的方案中,即在OnChartEvent()函数中,可以接收到像tick这样的事件。在OnChartEvent()中,我们可以追踪任何事件,包括在任何时间框架上形成一个新条形。
计时器没有问题。现在我以如下方式测试多货币EA
1.我为每个符号单独优化参数,将EA附加到参数被优化的符号上。优化过程是通过OnTick()函数完成的。在优化一个符号的参数时,所有其他符号被禁用,即它们不参与测试,只对其参数被优化的符号进行交易。
2.对所有符号的参数进行优化后,我们需要一次性测试所有符号。我把代码移到OnTimer()函数中(目前),启用定时器进行初步测试(60秒),并分析得到的结果。如果我感到满意,我会调整资金管理系统和其他子系统。然后我打开最后的测试(计时器10秒),在我看来,收到的结果是最准确的。我的观点和结论是基于所有方法的测试结果和这些结果的相互比较。
营销人员。
如果这对你来说很重要,我还是建议你向开发者查询Five中的fxt-file的类似物是什么。我已经写过,不同的测试可能会产生不同的勾股基数。
现在,这是一个有趣的假设。甚至可能是这样的情况。因此,欢迎开发商提供答复。
事实证明,在飞行中生成蜱虫比从磁盘上读取蜱虫要快。
mt5中没有fxt文件。现在,滴答声没有被写入文件,而是从分钟历史中飞快地建模。
事实证明,在飞行中生成蜱虫比从磁盘上读取蜱虫要快。
你好,雷纳特。谢谢你的答复。这是个好消息。
我没有看到什么好东西,事实证明,在MT5中,你不能在真实的ticks上进行测试。
如果我开始就事论事地回答,回应要么是"分别摘录的短语",要么是"我不是那种认为自己对所有事情都是正确的人"。这已经很清楚了。
不,看来你还是什么都不明白。现在我将第四次 向你解释。让我们的对话回到正轨。
这一切都从这一刻 开始。
耶德尔金。
请注意代码的部分。
在这里你可以看到,你把某个 "间谍控制面板MCM""铰链 "在两个不同的字符上。所以你有不同的符号作为信号源。但你声称 "我们在欧元兑美元上交易",即信号的来源是一个相同的符号。让我们来决定。
对此,我已经回答了你。
tol64。
哦,这越来越近了。似乎出现了一个变体,在这里我是错误的))。我将考虑一段时间,然后再详细地写出来......。
思想。答案 是。
tol64。
它只在欧元兑美元上交易。
在我的测试中,我考虑了Konstantin Gruzdev的方案--MetaTrader 5中多货币模式的实现。)))一切都被定义了。所附文件包含Spy Control panel MCM指标和exSpy Control panel MCM Expert Advisor。通过在图表上安装专家顾问,你可以看到它如何工作。日志清楚地显示了专家顾问从不同符号收到的指定事件。一切都很清楚,没有任何东西是混合的。
我现在尝试在OnChartEvent()中指定接收ID的符号,但这并没有改变结果。我从OnInit()中删除了第二个字符,以消除任何接收错误事件的可能性。现在使用这种变体进行试验。
...
编码
...
图片
...
结果并不相符。 没有第二个符号了,信号只来自于欧元兑美元。但不幸的是,这并没有解决这个问题。
关键点是:"不再有第二个符号,信号只来自欧元 兑美元。但不幸的是,这并没有解决这个问题。"
你看到了吗?去掉第二个来源并没有解决问题。情况被简化了,你本可以离开第二个来源,但你继续引用原来的例子,而不是试图解决下面的问题。为什么只有一个符号(单一来源),但从另一个符号进行交易(在测试模式下),我们会得到非相同的变体?
这是你表达这一点的帖子。
耶德尔金。
让我们从正确的措辞开始。在最初的例子中,你会喜欢 "在欧元兑美元上交易"。事实上,用户事件来自两个符号,在事件处理程序中,当收到来自这两个符号中任何一个的事件时,TradeSignalCounter()+TradePerformer()被调用。我们可以假设,事件队列总是满的。
现在你已经删除了一个信号源,但出于某种原因在事件处理程序中输入了 "if(sparam == Symbol_01) "的检查。但下一个问题是不同的。从代码来看,Lizar的方案是在 "所有刻度 "模式下使用的,信号源(EURUSD)的每个刻度都会调用TradeSignalCounter()+TradePerformer()函数。有趣的是,已经暗示了事件队列可能溢出的问题。但我想知道这两个函数的Symbol_01参数使用的是什么仪器,以及你是否尝试过改变Lizar方案中事件的周期性。
我已经 向你解释 过第二次了(你不知道为什么叫它拂袖而去)。
tol64。
是的,这就是我想做的事。毕竟,我们采取的每一个行动都是由我们的欲望引发的。在这种情况下,我得到的正是我想要的东西。也就是说,我们只在欧元兑美元上进行交易,因为TradePerformer()函数检查是否允许对符号数组中的每个符号进行交易。这个选项位于外部变量中,当时使用GBPUSD符号的交易是被禁止的。用户事件来自两个符号,但在事件处理程序中,同样,TradePerformer()函数只允许在EURUSD符号上交易。TradePerformer()函数还包含一个函数,用于确定某一特定符号(本例中为欧元兑美元)是否出现了新条形。你关于事件队列一直是满的假设是正确的,但在这种情况下,所有的东西都被单独处理了,当在日线上测试时,晚一个 tick 并不重要。
去掉一个信号源,也就是不应该参与测试的信号源,只能证实之前的一切都做得很正确。检查 "if(sparam == Symbol_01) "仍然来自于我检查结果时,没有删除一个不应该被测试的信号源,但从它应该被测试。这个检查结果实际上甚至是多余的。结果并没有改变。欧元兑美元的符号被用作Symbol_01参数。我试着改变事件的频率,但没有任何改变。更准确地说,我可以说,所有刻度线模式是最准确的。
关键点:"这个测试实际上甚至被证明是多余的。结果并没有改变。"
这是你第二次 "没有注意到 "问题不是你指出的那样,这也是我第二次回答你同样的问题,但更加明确。
你继续说。
耶德尔金。
"......以前一切都做得很好"--这是属于自满的范畴。它一开始就错了。显然,你并不重视 "事件队列溢出 "这种现象。特别是在涉及到事件的后传时。请看一下关于这个问题的参考材料和论坛。关键字是 "排队"。
由于函数TradeSignalCounter()+TradePerformer()只处理来自一个信号源的事件,队列的状态及其可能的溢出没有任何变化。换句话说,"禁止按GBRUSD符号处理事件 "根本没有从队列中删除相应的事件。我第三次指出这个问题:"已经暗示了事件队列中可能出现的溢出":)如果你认为它只是 "晚了一格",那么这种结论的依据是什么?
"......在这种情况下,一切都要单独处理"。问题是,在最初的版本中,当收到来自两个信号源的事件时,事件处理程序会调用函数,然后这些函数已经过滤掉了来自 "不必要 "的信号。但这些函数每次都被调用(!)。
事件处理程序在哪个时期被测试其实并不重要。如果Lizar的方案是以tick-by-tick为基础产生信号,那么他们对事件队列的评分也是以tick-by-tick为基础,而不是一天一次。
"我试着改变事件的周期,但这并没有什么不同。更准确地说,我可以说,所有蜱虫模式是最准确的。"你能给我一些关于Lizar的非泰克模式的对比截图吗?
而我第三次以最有礼貌的方式回答了 你。而你显然认为是嘲弄的笑脸,实际上表达了我对你的友好。我尽量不把它们放在其他地方,因为它们太暧昧了。
tol64。
早晨好!))
除了这个单独摘录的短语外,我还写道:"......我从不排除我在某处出错的可能性,我总是检查一切。但是,即使在最艰难的检查之后,当第一眼看上去一切正常时,我仍然不能排除在某处可能存在错误的可能性"。我应该补充的是,我不是那种认为自己对所有事情都是正确的人。)))
看了一下定时器的主题。我强调的关键点是。
1.当一个事件正在被处理时,其他事件可能不会被处理。
2.如果事件栈溢出,旧的事件就会从队列中移除而不被处理。
让我们按顺序来看看。有一个事件的列举。
...
编码
...
在初始化过程中,我们指定从哪个角色接收事件,以及我们将接收哪个事件。
...
编码
...
因此,我们将只接受来自EURUSD的CHARTEVENT_TICK事件。没有其他符号。
测试已经开始。当任何事件发生时,程序进入OnChartEvent()函数,声明交易信号的变量数组,并检查该事件。如果这是一个自定义的事件,程序在TradeSignalCounter()中确定信号,然后在TradePerformer()函数中检查是否发生了一个新的柱状体,然后根据这个决定其他条件。该函数完成了它的工作,只有在欧元兑美元图表上发生事件时才会启动它。换句话说,在这种情况下是打钩。
...
编码
...
这些功能的执行是非常快的。没有事件队列有时间溢出,我们不会错过任何重大事件。而如果队列甚至溢出,事件被错过,我们会错过什么?一支烟,两支烟,三支烟?那么它是什么呢?这在白天的酒吧里是微不足道的。
你在这第二个来源上挑什么毛病。)再也没有第二个来源了。有一个--欧元兑美元,但专家顾问从英镑兑美元的图表上交易欧元兑美元。而结果是完全错误的。一个副本。也就是说,它们与第二个来源存在的情况相同。)))
-----------
最好是自己做测试,展示测试结果,并写下(简单的)你为获得正确的测试结果所做的工作,当然如果你能做到这一点。最简单的专家就可以做这个测试。通过任何条件进入,止损,获利。让它成为过去10年的日线。而你将亲眼看到。有些时期会重合,有些则不会。打开结果图,看看差异在哪里。
之后你就写。
耶德尔金。
关于乒乓--有点奇怪的姿势。你对某个话题感兴趣,你得到一个答案并提出引导性的问题,你就开始挑战他们或否定他们。你或谁首先需要这个话题?我不认为有人会替你做工作。就我个人而言,我对结果不屑一顾,你的选择的结果对我来说没有什么兴趣。这个话题本身似乎值得关注,但作者的论战狂热让人对其维持的便利性产生怀疑。
然后是问题。
1.如果你不断重复同样的事情,即已经无关紧要,而且已经被回答过三次,你期望得到什么样的反应?
2.你为什么认为我在争论? 如果你把我的回答当作争论,你就错了,因为我回应了,并解释了我在做什么。但你把它当作一个论点,因为你在争论自己。)))
3.我从不指望别人来做我的工作。
4.我不是唯一需要这个主题的人,而是所有会遇到这个问题的人。如果你不需要它,那么你为什么要进入对话?我的论战狂热只是一个结果,原因来自于你。
---
我不会从心理学的角度分析你的行为,否则你和我将不得不飞出大气层。因此,让我们尽量使对话简短而有针对性。但如果你不需要它,最好不要继续。因为。请遵守规则。)))
当然,就我个人而言,我对解析其他人的世界观的特殊性不感兴趣。我已经在上面说明了我对你的论战热情的结论。没有什么可补充的。
...没有什么要补充的。
是的,你最好不要。否则,它就会变成闲聊。让我们回到主题上来。
---
又做了一系列的测试。以前提出的测试结果只在模式--开盘价中获得。在我看来,在这种模式下,我只用OnTimer()函数就能得到正确的结果。所有其他方法都没有显示出正确的结果。
这一次,我从2011年初开始在所有蜱虫模式下进行了测试。同时,看这个或那个方法需要多长时间也很有趣。例如,在锦标赛的专家顾问自动测试中,专家顾问必须在 "所有刻度 "模式下测试,时间不超过15分钟。在这个测试中,我建立了一个简单的专家顾问,对12种货币对进行交易。它包含的唯一条件是止损、止盈 和追踪止损。没有扩大和缩小头寸,没有资金管理系统,交易的手数是固定的(0.1)。专家顾问的编写没有一个周期,它被最大限度地简化。所有符号的工作时间框架是H8。
我依次用OnTick()对每个符号的参数进行了优化。我没有等到优化完成。在运行100次后,我停止了优化,选择了风险最小的一个,而不是最好的选择。
进行测试的处理器频率为2GHz。这里 说的是要关注什么。
此外,我将用几乎相同的词来代替相同的词,因为目标不是完全匹配,但当从视觉上分析图表时,差异不应该是惊人的。
---
测试结果。
第一次测试使用了OnTimer()函数,因为它上次给出了几乎相同的结果。而现在它的结果将作为比较的参考。
计时器上(OnTimer)。
计时器的时间间隔是60秒。
该测试持续了27分钟。
---
计时器间隔300秒。
结果几乎是相同的。测试时间为26分钟。
---
计时器间隔28800秒-8小时(使用的时间框架)。
结果几乎是相同的。测试时间为25分钟。
我还做了1800和3600秒间隔的测试,结果也是一致的。
-----------
绘图事件(OnChartEvent)
1分钟的周期是CHARTEVENT_NEWBAR_M1。
结果几乎是相同的。测试时间为37分钟。
---
期限为1分钟 -CHARTEVENT_NEWBAR_H1。
结果几乎是相同的。测试时间为27分钟。
---
期限为1分钟 -CHARTEVENT_NEWBAR_H8。
结果几乎是相同的。测试时间为27分钟。
----------
OnTick()
结果几乎是相同的。测试时间为72分钟。
-----------------
在 "所有蜱虫 "模式下,所有方法显示出几乎相同的结果。OnTick()被证明是最长的变体。OnTimer()和OnChartEvent()的测试时间几乎相同。
报告。
一句话。
在我的案例中,即使是最简单的多货币专家顾问,在一个非常大的时间框架(H8)上进行12种货币对的交易,也不能放在锦标赛中,因为它不能通过测试(测试时间为15分钟)。我们将不得不 "割胃口 "或寻找方法来最大限度地优化专家顾问的代码。
---
我不知道是否有人在12对上实现了快速测试?你的测试需要多长时间?
我不知道是否有人在12对上实现了快速测试?你的测试需要多长时间?
capr2011对EURUSD:H1的每一个刻度2011.01.01-2011.08.01
4.开始
3分21秒内完成
5.统计数据
1233 kb的日志文件
100次交易,200笔交易,利润83043.82美元