多币种专家测试结果 - 页 4 1234567 新评论 Stanislav Korotky 2011.08.24 14:51 #31 tol64: 你能不能展示一个类似于我在分支开始时做的例子。只包括在一个符号上的交易,但在另一个符号上测试。拍摄一张截图,并在运行测试的符号上进行测试。是否会出现像分支开始时显示的分歧?尽管如果在所有的符号上都追踪到了条形结构,它应该是相同的。但你仍然需要检查一切...好吧,我不会测试它。我可以发布代码,你来测试;-)。 string Instruments[] = ... int SymbolCount = ArraySize(Instruments); void RefreshRates(string symbol) { MqlTick tick; SymbolInfoTick(symbol, tick); SymbolInfoDouble(symbol, SYMBOL_BID); } bool Synchronization() { static bool Sync = true; string StrUnsync; int u = 0; datetime dt0 = (datetime)SeriesInfoInteger(_Symbol, Period(), SERIES_LASTBAR_DATE); for(int j = 0; j < SymbolCount; j++) { RefreshRates(Instruments[j]); datetime dt = (datetime)SeriesInfoInteger(Instruments[j], Period(), SERIES_LASTBAR_DATE); if(dt != dt0) { StrUnsync = StrUnsync + Instruments[j] + " "; u++; } } if(u > 0) { Print("Some symbols are unsynchonized:", StrUnsync); Sync = false; return(false); } else { if(!Sync) { Print("Synchronization done"); } Sync = true; } return(true); } void OnTick() { if(!Synchronization()) return; ... } Anatoli Kazharski 2011.08.24 15:12 #32 marketeer:好吧,我不会测试它。我可以发布代码,你来测试;-)。))谢谢你提供的变体。现在我只检查我的猜想,这个猜想是由论坛参与者Yedelkin 和Interesting 指出一个可能的错误而产生的,然后我将很乐意测试你的变体。我将详细报告结果。)) Anatoli Kazharski 2011.08.24 16:43 #33 Yedelkin 注意代码的部分。在这里你可以看到,你在两个不同的字符上 "铰接 "了某种 "间谍控制面板MCM "指标。就是说,你有不同的符号作为信号源。但你声称 "我们在欧元兑美元上交易",即信号源是同一个符号。让我们把话说清楚。我们只在欧元兑美元 上交易。在我的测试中,我考虑了Konstantin Gruzdev编写的方案--MetaTrader 5中多货币模式的实现。)))一切都被定义了。所附文件包含Spy Control panel MCM 指标和exSpy Control panel MCM Expert Advisor。通过在图表上安装专家顾问,你可以看到它如何工作。日志清楚地显示了专家顾问从不同符号收到的指定事件。一切都很清楚,没有任何东西是混合的。 我现在尝试在OnChartEvent()中指定接收ID的符号,但这并没有改变结果。我从OnInit()中删除了第二个字符,以消除任何接收错误事件的可能性。现在使用这种变体进行试验。enum ENUM_CHART_EVENT_SYMBOL { CHARTEVENT_NO = 0, // События отключены CHARTEVENT_INIT = 0, // Событие "инициализация" CHARTEVENT_NEWBAR_M1 = 0x00000001, // Событие "новый бар" на 1 -минутном графике CHARTEVENT_NEWBAR_M2 = 0x00000002, // Событие "новый бар" на 2 -минутном графике CHARTEVENT_NEWBAR_M3 = 0x00000004, // Событие "новый бар" на 3 -минутном графике CHARTEVENT_NEWBAR_M4 = 0x00000008, // Событие "новый бар" на 4 -минутном графике CHARTEVENT_NEWBAR_M5 = 0x00000010, // Событие "новый бар" на 5 -минутном графике CHARTEVENT_NEWBAR_M6 = 0x00000020, // Событие "новый бар" на 6 -минутном графике CHARTEVENT_NEWBAR_M10 = 0x00000040, // Событие "новый бар" на 10-минутном графике CHARTEVENT_NEWBAR_M12 = 0x00000080, // Событие "новый бар" на 12-минутном графике CHARTEVENT_NEWBAR_M15 = 0x00000100, // Событие "новый бар" на 15-минутном графике CHARTEVENT_NEWBAR_M20 = 0x00000200, // Событие "новый бар" на 20-минутном графике CHARTEVENT_NEWBAR_M30 = 0x00000400, // Событие "новый бар" на 30-минутном графике CHARTEVENT_NEWBAR_H1 = 0x00000800, // Событие "новый бар" на 1 -часовом графике CHARTEVENT_NEWBAR_H2 = 0x00001000, // Событие "новый бар" на 2 -часовом графике CHARTEVENT_NEWBAR_H3 = 0x00002000, // Событие "новый бар" на 3 -часовом графике CHARTEVENT_NEWBAR_H4 = 0x00004000, // Событие "новый бар" на 4 -часовом графике CHARTEVENT_NEWBAR_H6 = 0x00008000, // Событие "новый бар" на 6 -часовом графике CHARTEVENT_NEWBAR_H8 = 0x00010000, // Событие "новый бар" на 8 -часовом графике CHARTEVENT_NEWBAR_H12 = 0x00020000, // Событие "новый бар" на 12-часовом графике CHARTEVENT_NEWBAR_D1 = 0x00040000, // Событие "новый бар" на дневном графике CHARTEVENT_NEWBAR_W1 = 0x00080000, // Событие "новый бар" на недельном графике CHARTEVENT_NEWBAR_MN1 = 0x00100000, // Событие "новый бар" на месячном графике CHARTEVENT_TICK = 0x00200000, // Событие "новый тик" CHARTEVENT_ALL = 0xFFFFFFFF, // Все события включены }; ... int OnInit() { if(iCustom("EURUSD",PERIOD_D1,"Spy Control panel MCM",ChartID(),0,CHARTEVENT_TICK) == INVALID_HANDLE) { Print("Ошибка установки шпиона на EURUSD"); return(true);} return(0); } void OnChartEvent(const int id, // идентификатор события const long& lparam, // флаг события поступившего от агента панели. // Флаги соответствуют перечислению ENUM_CHART_EVENT_SYMBOL. const double& dparam, // цена const string& sparam // инструмент ) { // Объявление массивов переменных для торговых сигналов static datetime New_Bar[1]; static bool UpSignal[1], DnSignal[1]; if(id >= CHARTEVENT_CUSTOM) { if(sparam == Symbol_01) { // Получение торговых сигналов TradeSignalCounter(0,Symbol_01,Trade_01,Timeframe_01,UpSignal,DnSignal,New_Bar); // Совершение торговых операций TradePerformer(0,Symbol_01,Trade_01,Timeframe_01,Stop_Loss_01,Take_Profit_01,Slippage_01,UpSignal,DnSignal,New_Bar); } } }对欧元兑美元 图表中的欧元兑美元 符号进行测试。从GBPUSD 图表上测试EURUSD 工具。结果并不一致。有趣的是从这段代码来看,信号确实来自两个符号,但专家顾问可以延迟处理其中一个信号。第二个符号不再出现,信号只来自欧元兑美元。但不幸的是,这并不能解决问题。 在 MetaTrader 5 中实施多货币模式 Anatoli Kazharski 2011.08.24 17:07 #34 marketeer:好吧,我不会测试它。我可以发布代码,你来测试;-)。测试了你的版本。))结果几乎是相同的。对于初步(快速)测试来说,它可能足够好。我们将使用OnTimer()函数来获得绝对相同的结果。以下是测试的结果。从欧元兑美元 图表上测试欧元兑 美元工具。从GBPUSD 图表上测试EURUSD 工具。 Anatoli Kazharski 2011.08.24 17:47 #35 MetaDriver:我认为10秒的间隔时间太短了。如果 只对已形成的条形图 感兴趣,那么间隔时间至少应该是一分钟。 缩短时间没有意义,一分钟 是最小的合理 间隔......又做了一系列测试,以显示10秒以上结果的不一致性。我们将与同样的 "基准 "进行比较,这个基准是在本专题开始时提供的。也就是说,从OnTick()函数由形成的日线条,当专家顾问在被测试的符号上。在这里,它是。那么所有的结果都将来自OnTimer()函数。专家顾问是在GBPUSD 符号上。在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是10 秒。这是最准确的结果。 在GBPUSD 图表中测试EURUSD 符号。计时器的间隔时间是1 分钟。这是不正确的。结果甚至明显更好,这也是不正确和误导。从GBPUSD 图表中对EURUSD 进行测试。计时器的时间间隔为60 分钟。结果在很多地方与基准不一致。 从GBPUSD 图表上测试EURUSD。计时器的间隔时间是1 天。其结果是比任何其他东西都不相同的。-------------------------一般来说,为了完全相信正确的结果,应该通过OnTimer()函数测试多币种专家顾问系统,设置最小间隔。 Vladimir Gomonov 2011.08.24 18:23 #36 tol64:又做了一系列测试,以显示10秒以上结果的不一致性。我们将与同样的 "基准 "进行比较,这个基准是在本专题开始时提供的。也就是说,从OnTick()函数由形成的日线条,当专家顾问在被测试的符号上。在这里,它是。那么所有的结果都将来自OnTimer()函数。专家顾问是在GBPUSD 符号上。在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是10 秒。这是最准确的结果。 在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是1 分钟。不正确。结果甚至明显更好,这也是错误和误导。从GBPUSD 图表中对EURUSD 进行测试。计时器的时间间隔是60 分钟。结果在许多地方与基准不一致。 从GBPUSD 图表上测试EURUSD。计时器的时间间隔是1 天。其结果是比任何其他东西都不相同的。-------------------------一般来说,为了完全相信正确的结果,应该通过OnTimer()函数测试多货币专家顾问,同时设置最小间隔。我不太明白。你做了一个错误的比较。第一个测试是正确的:比较两种测试方式--在 "你的 "工具上和另一个工具上。然后你把这第一个结果作为一个基准,并把所有其他的结果与它进行比较。这是不正确的。 你应该将其余的身份运行不是与第一个结果进行比较,而是与 "你的 "仪器上的相同滴答频率的运行进行比较。它们会与 "10秒 "不同,这是很自然的,主要是它们应该是成对相同的。请完成测试。 否则就会发现你只是浪费了时间,很奇怪地设法证实了你最初 "关于10秒测试的优势 "的幻想。 Stanislav Korotky 2011.08.24 18:51 #37 tol64:测试了你的选项。))结果几乎是相同的。对于初步(快速)测试来说,它已经足够好了。为了得到完全相同的结果,我们将使用OnTimer()函数。 据我所知,你现在测试的不是我的同步方式,而是MetaTrader的tick发生器。重点是,当你运行测试时,产生了不同的tick基数--以eurusd的名义和以gbpusd的名义,而且结果几乎从不相同。在现实中,如果你在不同的符号上用指定的同步块运行两个EA,差异应该可以忽略不计或根本没有。 Anatoli Kazharski 2011.08.24 19:21 #38 MetaDriver:我不太明白。你比较的东西是不正确的。第一个测试是正确的:比较两种测试方式--在 "你的 "仪器上和另一个仪器上。然后你把第一个结果作为基准,并把其他所有的结果与它进行比较。这是不正确的。 你应该将其余的身份运行不是与第一个结果进行比较,而是与 "你的 "仪器上的相同滴答频率的运行进行比较。它们会与 "10秒 "不同,这是很自然的,主要是它们应该是成对相同的。请完成测试。 否则就会变成浪费时间,因为它奇怪地设法证实了它最初的 "10秒测试的优势 "的幻觉。很好。现在我已经开始了另一个漫长的测试。当我醒来时,它就会结束。但我已经可以告诉你,它们成对的时候是相同的,因为我已经看到了。剩下的就是让我给你看。但你可以自己做同样的测试。这是测试交易系统的一个重要点。我可能是做错了什么))。P.S. 最主要的是,它们一定不是成对的,因为通过OnTimer()函数测试时,它们在任何情况下都显得相同。最初的目的是使它们与在正常模式下使用OnTick()函数获得的结果相同,并明确检查条形。在一个符号上交易的专家顾问做得很完美。但在多货币模式下,有必要找出。其结果是显而易见的。 Anatoli Kazharski 2011.08.24 19:28 #39 marketeer: 据我所知,你现在测试的不是我的同步方式,而是MetaTrader的tick发生器。问题是,当你运行测试时,你产生了不同的tick base--在eurusd和gbpusd的名称下,它们的结果几乎不会相同。在现实中,如果你在不同的符号上用指定的同步块运行两个EA,差异应该可以忽略不计或根本没有。 你说的是什么现实?实时测试?如果是这样,那么我当然同意。如果你把两个EA挂在它们的符号上,一切都将是正确的。但我正在测试多币种模式。而只用OnTimer()(10秒)显示了一个相同的结果。 Yedelkin 2011.08.24 20:27 #40 tol64: 交易只针对欧元兑美元。 让我们从正确的措辞开始。在最初的例子中,你希望有 "欧元兑美元的交易"。事实上,从两个符号中收到了自定义事件,在事件处理程序中,当收到来自这两个符号中任何一个的事件时,TradeSignalCounter()+TradePerformer()被调用。我们可以假设,事件队列总是满的。 现在你已经删除了一个信号源,但出于某种原因在事件处理程序中输入了"if(sparam == Symbol_01) "的检查。但下一个问题是不同的。根据代码,Lizar的方案在 "所有刻度 "模式下使用,在信号源(EURUSD)的每一个刻度上,都会调用TradeSignalCounter()+TradePerformer()函数。有趣的是,已经暗示了事件队列可能溢出的问题。但我想知道这两个函数的Symbol_01参数用的是什么仪器,以及你是否尝试过改变Lizar方案中事件的周期性。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能不能展示一个类似于我在分支开始时做的例子。只包括在一个符号上的交易,但在另一个符号上测试。拍摄一张截图,并在运行测试的符号上进行测试。是否会出现像分支开始时显示的分歧?尽管如果在所有的符号上都追踪到了条形结构,它应该是相同的。但你仍然需要检查一切...
好吧,我不会测试它。我可以发布代码,你来测试;-)。
好吧,我不会测试它。我可以发布代码,你来测试;-)。
Yedelkin
注意代码的部分。
在这里你可以看到,你在两个不同的字符上 "铰接 "了某种 "间谍控制面板MCM "指标。就是说,你有不同的符号作为信号源。但你声称 "我们在欧元兑美元上交易",即信号源是同一个符号。让我们把话说清楚。
我们只在欧元兑美元 上交易。
在我的测试中,我考虑了Konstantin Gruzdev编写的方案--MetaTrader 5中多货币模式的实现。)))一切都被定义了。所附文件包含Spy Control panel MCM 指标和exSpy Control panel MCM Expert Advisor。通过在图表上安装专家顾问,你可以看到它如何工作。日志清楚地显示了专家顾问从不同符号收到的指定事件。一切都很清楚,没有任何东西是混合的。
我现在尝试在OnChartEvent()中指定接收ID的符号,但这并没有改变结果。我从OnInit()中删除了第二个字符,以消除任何接收错误事件的可能性。现在使用这种变体进行试验。
对欧元兑美元 图表中的欧元兑美元 符号进行测试。
从GBPUSD 图表上测试EURUSD 工具。
结果并不一致。
有趣的是
从这段代码来看,信号确实来自两个符号,但专家顾问可以延迟处理其中一个信号。
第二个符号不再出现,信号只来自欧元兑美元。但不幸的是,这并不能解决问题。
好吧,我不会测试它。我可以发布代码,你来测试;-)。
测试了你的版本。))结果几乎是相同的。对于初步(快速)测试来说,它可能足够好。我们将使用OnTimer()函数来获得绝对相同的结果。
以下是测试的结果。
从欧元兑美元 图表上测试欧元兑 美元工具。
从GBPUSD 图表上测试EURUSD 工具。
我认为10秒的间隔时间太短了。如果 只对已形成的条形图 感兴趣,那么间隔时间至少应该是一分钟。
缩短时间没有意义,一分钟 是最小的合理 间隔......
又做了一系列测试,以显示10秒以上结果的不一致性。我们将与同样的 "基准 "进行比较,这个基准是在本专题开始时提供的。也就是说,从OnTick()函数由形成的日线条,当专家顾问在被测试的符号上。在这里,它是。
那么所有的结果都将来自OnTimer()函数。专家顾问是在GBPUSD 符号上。
在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是10 秒。
这是最准确的结果。
在GBPUSD 图表中测试EURUSD 符号。计时器的间隔时间是1 分钟。
这是不正确的。结果甚至明显更好,这也是不正确和误导。
从GBPUSD 图表中对EURUSD 进行测试。计时器的时间间隔为60 分钟。
结果在很多地方与基准不一致。
从GBPUSD 图表上测试EURUSD。计时器的间隔时间是1 天。
其结果是比任何其他东西都不相同的。
-------------------------
一般来说,为了完全相信正确的结果,应该通过OnTimer()函数测试多币种专家顾问系统,设置最小间隔。
又做了一系列测试,以显示10秒以上结果的不一致性。我们将与同样的 "基准 "进行比较,这个基准是在本专题开始时提供的。也就是说,从OnTick()函数由形成的日线条,当专家顾问在被测试的符号上。在这里,它是。
那么所有的结果都将来自OnTimer()函数。专家顾问是在GBPUSD 符号上。
在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是10 秒。
这是最准确的结果。
在GBPUSD 图表中测试EURUSD 符号。计时器的时间间隔是1 分钟。
不正确。结果甚至明显更好,这也是错误和误导。
从GBPUSD 图表中对EURUSD 进行测试。计时器的时间间隔是60 分钟。
结果在许多地方与基准不一致。
从GBPUSD 图表上测试EURUSD。计时器的时间间隔是1 天。
其结果是比任何其他东西都不相同的。
-------------------------
一般来说,为了完全相信正确的结果,应该通过OnTimer()函数测试多货币专家顾问,同时设置最小间隔。
我不太明白。你做了一个错误的比较。
第一个测试是正确的:比较两种测试方式--在 "你的 "工具上和另一个工具上。然后你把这第一个结果作为一个基准,并把所有其他的结果与它进行比较。
这是不正确的。 你应该将其余的身份运行不是与第一个结果进行比较,而是与 "你的 "仪器上的相同滴答频率的运行进行比较。
它们会与 "10秒 "不同,这是很自然的,主要是它们应该是成对相同的。
请完成测试。
否则就会发现你只是浪费了时间,很奇怪地设法证实了你最初 "关于10秒测试的优势 "的幻想。
测试了你的选项。))结果几乎是相同的。对于初步(快速)测试来说,它已经足够好了。为了得到完全相同的结果,我们将使用OnTimer()函数。
我不太明白。你比较的东西是不正确的。
第一个测试是正确的:比较两种测试方式--在 "你的 "仪器上和另一个仪器上。然后你把第一个结果作为基准,并把其他所有的结果与它进行比较。
这是不正确的。 你应该将其余的身份运行不是与第一个结果进行比较,而是与 "你的 "仪器上的相同滴答频率的运行进行比较。
它们会与 "10秒 "不同,这是很自然的,主要是它们应该是成对相同的。
请完成测试。
否则就会变成浪费时间,因为它奇怪地设法证实了它最初的 "10秒测试的优势 "的幻觉。
很好。现在我已经开始了另一个漫长的测试。当我醒来时,它就会结束。但我已经可以告诉你,它们成对的时候是相同的,因为我已经看到了。剩下的就是让我给你看。但你可以自己做同样的测试。这是测试交易系统的一个重要点。我可能是做错了什么))。
P.S. 最主要的是,它们一定不是成对的,因为通过OnTimer()函数测试时,它们在任何情况下都显得相同。最初的目的是使它们与在正常模式下使用OnTick()函数获得的结果相同,并明确检查条形。在一个符号上交易的专家顾问做得很完美。但在多货币模式下,有必要找出。其结果是显而易见的。
据我所知,你现在测试的不是我的同步方式,而是MetaTrader的tick发生器。问题是,当你运行测试时,你产生了不同的tick base--在eurusd和gbpusd的名称下,它们的结果几乎不会相同。在现实中,如果你在不同的符号上用指定的同步块运行两个EA,差异应该可以忽略不计或根本没有。
交易只针对欧元兑美元。
让我们从正确的措辞开始。在最初的例子中,你希望有 "欧元兑美元的交易"。事实上,从两个符号中收到了自定义事件,在事件处理程序中,当收到来自这两个符号中任何一个的事件时,TradeSignalCounter()+TradePerformer()被调用。我们可以假设,事件队列总是满的。
现在你已经删除了一个信号源,但出于某种原因在事件处理程序中输入了"if(sparam == Symbol_01) "的检查。但下一个问题是不同的。根据代码,Lizar的方案在 "所有刻度 "模式下使用,在信号源(EURUSD)的每一个刻度上,都会调用TradeSignalCounter()+TradePerformer()函数。有趣的是,已经暗示了事件队列可能溢出的问题。但我想知道这两个函数的Symbol_01参数用的是什么仪器,以及你是否尝试过改变Lizar方案中事件的周期性。