iCustom+IndicatorRelease. Es ist wahrscheinlich keine Krückenlösung, komplexe Gebilde auf der Stelle zu produzieren. Über Geschmäcker lässt sich nicht streiten. Die Frage ist, inwieweit eine solche Krücke auf Mehrfachagenten zur Verschwendung von Ressourcen führen wird.
Nun, in der 5. Klasse ist fast alles cool. Die Geschwindigkeit ist erstklassig. Und hier, entschuldigen Sie, etwas total Haariges, wo man es nicht erwarten würde.
Warum ein Freigabeindikator?
Lassen Sie ihn bei jedem neuen Tick ein Chart-Ereignis an den zu testenden Experten senden.
Erstellung eines Indikators bei jedem Tick, gefolgt von einer Freigabe - hier werden Ressourcen verschwendet
Vasiliy erwähnte, dass der Mechanismus bei FORTS (nicht in der Testversion) über Abonnement und BookEvent funktioniert. Damit entfällt die Notwendigkeit, den EA überhaupt mit einem Chart zu verknüpfen.
BookEvent ist in der Testversion noch nicht implementiert
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
Slawa: BookEvent ist im Tester noch nicht implementiert
Was nützt es also dem Tester, wenn es auf dem Devisenmarkt gar nicht funktioniert? Vasiliy hat oben einen Vorschlag gemacht, den ich für sinnvoll halte.
Und zwar nicht eine Sekunde lang, sondern eine knappe Stunde lang. Mit obligatorischer Überprüfung von IsStopped()
Schlaf ist übrigens Pflicht. Andernfalls bleibt das Prüfgerät hängen. Und die Systemressourcen werden während des normalen Betriebs des Expert Advisors stark beansprucht.
Testen Sie Ihre Variante gar nicht erst
2016.04.2619:39:05 Core 12016.04.2500:16:48 infinite Sleep loop detected while testing
2016.04.2619:39:05 Core 1 EURUSD : 2016.04.2500:00 - 2016.04.2600:001439 minute bars absent in total while real ticks present
2016.04.2619:39:05 Core 1 EURUSD : real ticks begin from2016.01.0400:00:002016.04.2619:39:05 Core 1 SleepPause=102016.04.2619:39:05 Core 1 TimerInterval=1000
Code
sinputuint TimerInterval = 1000; // Через сколько секунд вызывать OnTimersinputuint SleepPause = 10; // На сколько милисекунд делать Sleep//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnInit()
{
EventSetTimer(TimerInterval);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTimer()
{
constuint Amount=TimerInterval*1000/SleepPause;
for(uint i=0;(i<Amount) && (!IsStopped()); i++)
Sleep(SleepPause);
}
//+------------------------------------------------------------------+
Anton Zverev: Ich starte diesen Code im Testprogramm.Beim Testen wird eineunendliche Sleep-Schleife entdeckt , bei der ich hängen bleibe.
Es ist schon oft gesagt worden: "Lesen Sie die Dokumentation".
Haben Sie nicht gesagt: "Ich habe die gesamte Dokumentation gelesen. Mehrere Male"?
Haben Sie das gelesen? Es scheint, Sie haben nicht...
Wenn die aktuelle Zeit im Tester das Ende des Testzeitraums überschreitet, wenn die Funktion Sleep() ausgeführt wird, erhalten Sie die Fehlermeldung "eine Endlosschleife in Sleep". Tritt ein solcher Fehler auf, werden die Testergebnisse nicht verworfen, sondern alle Berechnungen werden vollständig durchgeführt (Anzahl der Trades, Drawdown usw.) und die Ergebnisse an das Terminal weitergeleitet.
Das habe ich und ich habe sie sehr sorgfältig gelesen. Der Punkt ist, dass der Programmierer bei Verwendung von Sleep in OnTimer nicht bestimmen kann, wann er/sie das Testintervall verlässt. IsStopped (ich habe es sofort in den Code eingefügt, weil ich die Dokumentation gelesen habe) funktioniert im Moment des Beendens nicht. Wessen Schuld ist das?
Im Prüfprogramm verzögern Sleep()-Aufrufe den Prüfvorgang nicht. Beim Aufruf von Sleep() werden die erzeugten Ticks innerhalb der angegebenen Verzögerung "abgespielt", wodurch schwebende Orders, Stops etc. ausgelöst werden können. Nach dem Aufruf von Sleep() wird die im Prüfgerät modellierte Zeit um das im Parameter der Funktion Sleep angegebene Intervall verlängert.
Der Expert Advisor kann also nicht bei jedem dieser Ticks aufgerufen werden. Wird der Beweis akzeptiert?
iCustom+IndicatorRelease. Es ist wahrscheinlich keine Krückenlösung, komplexe Gebilde auf der Stelle zu produzieren. Über Geschmäcker lässt sich nicht streiten. Die Frage ist, inwieweit eine solche Krücke auf Mehrfachagenten zur Verschwendung von Ressourcen führen wird.
Nun, in der 5. Klasse ist fast alles cool. Die Geschwindigkeit ist erstklassig. Und hier, entschuldigen Sie, etwas total Haariges, wo man es nicht erwarten würde.
Warum ein Freigabeindikator?
Lassen Sie ihn bei jedem neuen Tick ein Chart-Ereignis an den zu testenden Experten senden.
Erstellung eines Indikators bei jedem Tick, gefolgt von einer Freigabe - hier werden Ressourcen verschwendet
Vasiliy erwähnte, dass der Mechanismus bei FORTS (nicht in der Testversion) über Abonnement und BookEvent funktioniert. Damit entfällt die Notwendigkeit, den EA überhaupt mit einem Chart zu verknüpfen.
Warum eine Freigabe für einen Indikator?
Lassen Sie ihn bei jedem neuen Tick ein Chart-Ereignis an den zu testenden Experten senden.
Bei jedem Tickeinen Indikator zu erstellen und ihn dann freizugeben - das ist eine Verschwendung von Ressourcen
Ich kann mich nicht sehr gut ausdrücken, deshalb verstehst du mich nicht. Klicken Sie hier für Details https://www.mql5.com/ru/code/280
Und wie viele Ressourcen verbraucht diese Lösung, um eine so einfache Sache umzusetzen!
BookEvent ist im Tester noch nicht implementiert
Und zwar nicht eine Sekunde lang, sondern eine knappe Stunde lang. Mit obligatorischer Überprüfung von IsStopped()
Schlaf ist übrigens Pflicht. Andernfalls bleibt das Prüfgerät hängen. Und die Systemressourcen werden während des normalen Betriebs des Expert Advisors stark beansprucht.
Testen Sie Ihre Variante gar nicht erst
Code
Nicht einmal, um Ihre Option zu testen
Code
Und was haben Sie hier getestet?
Ich starte diesen Code im Testprogramm.Beim Testen wird eineunendliche Sleep-Schleife entdeckt , bei der ich hängen bleibe.
Es ist schon oft gesagt worden: "Lesen Sie die Dokumentation".
Haben Sie nicht gesagt: "Ich habe die gesamte Dokumentation gelesen. Mehrere Male"?
Haben Sie das gelesen? Es scheint, Sie haben nicht...
Wenn die aktuelle Zeit im Tester das Ende des Testzeitraums überschreitet, wenn die Funktion Sleep() ausgeführt wird, erhalten Sie die Fehlermeldung "eine Endlosschleife in Sleep". Tritt ein solcher Fehler auf, werden die Testergebnisse nicht verworfen, sondern alle Berechnungen werden vollständig durchgeführt (Anzahl der Trades, Drawdown usw.) und die Ergebnisse an das Terminal weitergeleitet.
Haben Sie das gelesen?
Und für fehlende Ticks in der OnTimer-Schleife brauchen Sie einen reproduzierbaren Beweis. Haben Sie sie?
Sie haben darüber in der Dokumentation geschrieben!
Im Prüfprogramm verzögern Sleep()-Aufrufe den Prüfvorgang nicht. Beim Aufruf von Sleep() werden die erzeugten Ticks innerhalb der angegebenen Verzögerung "abgespielt", wodurch schwebende Orders, Stops etc. ausgelöst werden können. Nach dem Aufruf von Sleep() wird die im Prüfgerät modellierte Zeit um das im Parameter der Funktion Sleep angegebene Intervall verlängert.
Der Expert Advisor kann also nicht bei jedem dieser Ticks aufgerufen werden. Wird der Beweis akzeptiert?