Während der Nacht ist mir eine sehr merkwürdige Sache aufgefallen, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Jetzt möchte ich es überprüfen und habe einen Testindikator erstellt
#property indicator_chart_windowdatetime old_time=0;
int MaxBars=10; // ограничение //+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit() {return(0);}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime& time[],
constdouble& open[],
constdouble& high[],
constdouble& low[],
constdouble& close[],
constlong& tick_volume[],
constlong& volume[],
constint& spread[])
{
if(rates_total<10) return(0); // ничего не считаем и ничего не рисуем на графике int start_pos, // точка старта
count_tick;
MqlDateTime str1,str2;
if(prev_calculated==0)
{
old_time=0;
count_tick=0;
start_pos=rates_total-3;
}
else start_pos=prev_calculated-1;
//--- расчет for(int i=start_pos;i<rates_total;i++)
{
TimeToStruct(TimeCurrent(),str1); // время сервераTimeToStruct(time[i], str2); // время бара if(str1.min!=str2.min) {
// Сбой - тик принадлежит не своему бару
count_tick++;
Print("тик №=",count_tick," i=", i," c=",close[i]," time[i]=",time[i]," time=",TimeCurrent()," delta=",str1.sec);
}
} // end for(...return(rates_total);
}
Die ersten beiden Ticks sind eindeutig, es ist ein Indikator für den Start. Aber die nächsten .... Es stellt sich heraus, dass es einen neuen Balken nach der Serverzeit gibt, während dieser Tick zu dem alten Balken gehört. Nachts ist dieses Delta ein Alptraum...
Frage an die Entwickler: Ist das ein Bug? Oder war das so gedacht?
Z.I. Während ich dies schreibe, erscheint das folgende im Protokoll
Während der Nacht habe ich eine sehr merkwürdige Sache bemerkt, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Jetzt habe ich beschlossen, das zu überprüfen und einen Testindikator erstellt
Wenn Sie den Wert von rates_total zur Ausgabe hinzufügen, werden Sie sehen, dass Fehler auftreten, wenn Sie die Minuten des aktuellen Balkens mit den Minuten des vorherigen Balkens vergleichen.
Die Parameter open[], high[], low[] und close[] enthalten Arrays mit dem Eröffnungs-, Höchst-, Tiefst- und Schlusskurs des aktuellen Zeitrahmens. Der Parameter time[] enthält ein Array mit den Werten der offenen Zeit, der Parameter spread[] enthält ein Array mit der Historie der Spreads (wenn ein Spread für ein Handelsinstrument angegeben ist). Die Parameter volume[] und tick_volume[] enthalten die Historie des Handels- bzw. Tickvolumens.
Während der Nacht habe ich eine sehr merkwürdige Sache bemerkt, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Ich habe beschlossen, das jetzt zu überprüfen und habe einen Testindikator erstellt
Die ersten beiden Ticks sind eindeutig, es ist ein Indikator für den Start. Aber die nächsten .... Es stellt sich heraus, dass es einen neuen Balken nach der Serverzeit gibt, während dieser Tick zu dem alten Balken gehört. Nachts ist dieses Delta ein Alptraum...
Frage an die Entwickler: Ist es ein Fehler oder wurde es so entworfen?
Z.I. Während ich dies schreibe, erscheint das folgende im Protokoll
Ups. Verstanden. Danke. Ich habe eine Prüfung innerhalb der Schleife durchgeführt.
if(old_time<time[i])
{
Print("НОВЫЙ бар");
old_time=time[i];
//...
}
// а нужно вот такif(old_time<time[rates_total-1]) // работаем только по завершенным барам
{
Print("НОВЫЙ бар");
old_time=time[rates_total-1];
//...
}
Zum Zeitpunkt der neuen Leiste hat sich i nicht geändert. Nicht sparsam, die gleichen Daten werden wiederholt berechnet. Obwohl...
ist diese Situation https://book.mql4.com/ru/samples/icustom fig.119 in MQL5 ausgeschlossen, wenn nicht? und diese Indikatorvorlage wird immer korrekte Ausgabe schließen? oder gibt es irgendwelche Fallstricke?
inputint MaxBars=240;
datetime old_time=0;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit() {return(0);}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime& time[],
constdouble& open[],
constdouble& high[],
constdouble& low[],
constdouble& close[],
constlong& tick_volume[],
constlong& volume[],
constint& spread[])
{
//---if(prev_calculated==0)
{
//... расчитать историю//...
old_time=time[rates_total-1];
}
// работаем только по завершенным барамif(old_time<time[rates_total-1])
{
old_time=time[rates_total-1];
Print("НОВЫЙ бар close[1]=", close[rates_total-2]);
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
sergey1294: Wenn ich beginne, meinen EA auszuführen, stürzt das gesamte Terminal im Tester ab, aber wenn ich es auf einen Chart lege, ist alles in Ordnung.
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen unter vier Augen gegeben, aber wenn etwas passiert, können Sie auch die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen in privatem Rahmen gegeben, aber wenn etwas, können Sie die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
Es ist natürlich seltsam, dass eine solche Einschränkung den Prüfer betrifft. In Quad zum Beispiel gibt es kein solches Problem
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen in privatem Rahmen gegeben, aber wenn etwas, können Sie die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
stringo: Es können bis zu 64 Parameter optimiert werden.
Optimieren Sie 64 und verwenden Sie ca. 110 im Testgerät (ohne Optimierung). Obwohl 110 natürlich schon eine "Albtraum"-Anzahl von Parametern für den Expert Advisor ist (aber es kommt vor)...
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Während der Nacht ist mir eine sehr merkwürdige Sache aufgefallen, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Jetzt möchte ich es überprüfen und habe einen Testindikator erstellt
Protokoll2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=5
2010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01 delta=1
2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04 delta=4
2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05 delta=5
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31 delta=31
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick#1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31 delta=31
Die ersten beiden Ticks sind eindeutig, es ist ein Indikator für den Start. Aber die nächsten .... Es stellt sich heraus, dass es einen neuen Balken nach der Serverzeit gibt, während dieser Tick zu dem alten Balken gehört. Nachts ist dieses Delta ein Alptraum...
Frage an die Entwickler: Ist das ein Bug? Oder war das so gedacht?
Z.I. Während ich dies schreibe, erscheint das folgende im Protokoll
2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12 delta=12
Während der Nacht habe ich eine sehr merkwürdige Sache bemerkt, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Jetzt habe ich beschlossen, das zu überprüfen und einen Testindikator erstellt
Wenn Sie den Wert von rates_total zur Ausgabe hinzufügen, werden Sie sehen, dass Fehler auftreten, wenn Sie die Minuten des aktuellen Balkens mit den Minuten des vorherigen Balkens vergleichen.
Das heißt, die Zeit[rates_total-2].
Auch der Delta-Ausgang ist nicht ganz klar.
https://www.mql5.com/ru/docs/basis/function/events#oncalculate sagt:
Die Parameter open[], high[], low[] und close[] enthalten Arrays mit dem Eröffnungs-, Höchst-, Tiefst- und Schlusskurs des aktuellen Zeitrahmens. Der Parameter time[] enthält ein Array mit den Werten der offenen Zeit, der Parameter spread[] enthält ein Array mit der Historie der Spreads (wenn ein Spread für ein Handelsinstrument angegeben ist). Die Parameter volume[] und tick_volume[] enthalten die Historie des Handels- bzw. Tickvolumens.
Während der Nacht habe ich eine sehr merkwürdige Sache bemerkt, die Startzeit der Bar wird mit einem Fehler wiedergegeben - der Fehler betrug mehr als eine Minute. Ich habe beschlossen, das jetzt zu überprüfen und habe einen Testindikator erstellt
Protokoll2010.06.18 10:42:03 prov_tick (EURUSD,M1) tick #=6 i=50558 c=1.23797 time[i]=2010.06.18 08:41:00 time=2010.06.18 08:42:05 delta=5
2010.06.18 10:40:59 prov_tick (EURUSD,M1) tick #=5 i=50557 c=1.23848 time[i]=2010.06.18 08:40:00 time=2010.06.18 08:41:01 delta=1
2010.06.18 10:40:01 prov_tick (EURUSD,M1) tick #=4 i=50556 c=1.23862 time[i]=2010.06.18 08:39:00 time=2010.06.18 08:40:04 delta=4
2010.06.18 10:39:03 prov_tick (EURUSD,M1) tick #=3 i=50555 c=1.23881 time[i]=2010.06.18 08:38:00 time=2010.06.18 08:39:05 delta=5
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #=2 i=50554 c=1.23859 time[i]=2010.06.18 08:37:00 time=2010.06.18 08:38:31 delta=31
2010.06.18 10:38:30 prov_tick (EURUSD,M1) tick #1 i=50553 c=1.23858 time[i]=2010.06.18 08:36:00 time=2010.06.18 08:38:31 delta=31
Die ersten beiden Ticks sind eindeutig, es ist ein Indikator für den Start. Aber die nächsten .... Es stellt sich heraus, dass es einen neuen Balken nach der Serverzeit gibt, während dieser Tick zu dem alten Balken gehört. Nachts ist dieses Delta ein Alptraum...
Frage an die Entwickler: Ist es ein Fehler oder wurde es so entworfen?
Z.I. Während ich dies schreibe, erscheint das folgende im Protokoll
2010.06.18 10:45:09 prov_tick (EURUSD,M1) tick #=9 i=50561 c=1.23787 time[i]=2010.06.18 08:44:00 time=2010.06.18 08:45:12 delta=12
Versuchen Sie, wie folgt zu testen. Ohne Schleife.
Weiter im Text.
Versuchen Sie, wie folgt zu prüfen. Ohne Zyklus.
Folgen Sie dann dem Text.
Ups. Verstanden. Danke. Ich habe eine Prüfung innerhalb der Schleife durchgeführt.
Zum Zeitpunkt der neuen Leiste hat sich i nicht geändert. Nicht sparsam, die gleichen Daten werden wiederholt berechnet. Obwohl...
ist diese Situation https://book.mql4.com/ru/samples/icustom fig.119 in MQL5 ausgeschlossen, wenn nicht? und diese Indikatorvorlage wird immer korrekte Ausgabe schließen? oder gibt es irgendwelche Fallstricke?
P.S.: Danke für die WissenschaftWenn ich beginne, meinen EA auszuführen, stürzt das gesamte Terminal im Tester ab, aber wenn ich es auf einen Chart lege, ist alles in Ordnung.
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen unter vier Augen gegeben, aber wenn etwas passiert, können Sie auch die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen in privatem Rahmen gegeben, aber wenn etwas, können Sie die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
Jetzt kommen die Wochenendkurse nicht mehr. Ich führe das Skript aus.
Print(TimeCurrent());
Ergebnis
2010.06.20 00:26:06 00 (USDJPY,M1) 2010.06.18 22:35:52
obwohl der letzte Balken die Zeit 2010.06.18 23:00:00 hat
es scheint seltsam, sehr unbequem zu sein, die Korrektheit einiger Funktionen zu testen.
Die Schaltfläche "Übernehmen" im Fenster der Indikatoreinstellungen fehlt.
Die Erfahrung hat gezeigt, dass etwa 110 Parameter verdaut werden können (und es gibt Fragen). Bei 120 stürzt das Terminal ab, wenn der Expert Advisor im Testgerät angegeben ist.
Ich habe bereits einige Lösungen in privatem Rahmen gegeben, aber wenn etwas, können Sie die Entwickler fragen. Ich denke, sie könnten bei dieser Einschränkung helfen...
Es können bis zu 64 Parameter optimiert werden.