Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 988

 
Aleksey Vyazmikin:

Ich habe bereits eine Prüfung für mich selbst durchgeführt, aber diese Prüfung ist, um den Fehler dieser Funktion zu umgehen, die Hilfe sagt überhaupt nichts über die Notwendigkeit einer Prüfung, was bedeutet, dass sie eingebaut sein sollte.

Und dann sprechen Sie von der Indikatorüberprüfung, während ich Bars verwende, um die korrekte Bar-Startzeit zu berechnen, da iBarShift für sich allein steht und nur für Forex geeignet ist, wo es keine häufigen historischen Einbrüche aufgrund von Clearing und Handelssitzungen nicht den ganzen Tag über gibt.

Und wo ist Ihre Validierung? Und warum sollte man eine Variable einführen, wenn man den Indikator einfach komplett neu berechnen muss (wenn man den Verlauf stößt oder ändert). Dies geschieht normalerweise von "0" bis "rates_total-1".

 
Vladimir Karputov:

Und wo ist Ihr Scheck? Und warum sollten Sie eine Variable eingeben, wenn Sie den Indikator nur komplett neu berechnen müssen (wenn Sie den Verlauf austauschen oder ändern). Normalerweise wird dies von "0" bis "rates_total-1" durchgeführt.

Mein Problem hat nichts mit den Indikatoren oder dem Paging der Historie zu tun. Hier ist ein Stück Code

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
Das Problem tritt beim Öffnen eines neuen Balkens im Allgemeinen auf, wenn das Startdatum des Balkens größer ist als die Verschiebung um 1 Balken vom Null-Balken der aktuellen TF.
 
Aleksey Vyazmikin:

Dies ist keine Verteidigung, sondern ein Hindernis für die Entdeckung eines Fehlers im Code!

Außerdem ist es überhaupt nicht logisch, die Nummer 2 zurückzugeben, wenn die Daten übereinstimmen - was ist hier der Grund?

Die Startzeit eines Balkens auf FORTS kann nicht übereinstimmen, was zu Fehlern in den Berechnungen führt, z. B. öffnet ein Balken nicht um 14:00 Uhr, sondern um 14:05 Uhr - auch ich hatte damit zu kämpfen.

Vielleicht hat der Programmierer zunächst so gearbeitet, wie es in der Dokumentation steht, aber später beschlossen, dass es besser wäre, die angegebenen Daten "zwischen" statt "von" und "bis" zurückzugeben, aber die Dokumentation hat diese Beschreibung nicht korrigiert. Eigentlich ist das gar nicht nötig.

Ich habe nicht einmal eine Demo auf FORTS. Ich kann es nicht überprüfen.

 
Alexey Viktorov:

Vielleicht haben sie es ursprünglich so gemacht, wie es in der Dokumentation beschrieben ist, haben dann aber beschlossen, dass es besser wäre, "zwischen"-Daten anstelle von "von"- und "bis"-Daten zurückzugeben, aber die Beschreibung in der Dokumentation wurde nicht korrigiert. Aber sie haben die Beschreibung nicht korrigiert.

Ich habe nicht einmal eine Demo auf FORTS. Ich kann es nicht überprüfen.

Wie kann das unnötig sein, ich kann es nicht erraten, und wenn es ein Fehler ist, der später korrigiert wird, wird der Code nicht mehr funktionieren, und ich werde lange nach einem Fehler suchen... Aber Artem hat entschieden, dass dies kein Fehler ist, und hat nichts in essence.... geschrieben.

Es scheint, dass auf dem Demo-Konto von MQ Menschen zu FORTS verbinden...

 
Aleksey Vyazmikin:

Wie kann es nicht sein, ich kann nicht raten, und wenn es ein Fehler ist, der später korrigiert wird, dann wird der Code nicht mehr funktionieren, und ich werde für eine kritische Zeit nach einem Fehler suchen... Aber Artem hat entschieden, dass es kein Fehler ist und hat nichts in essence.... geschrieben.

Es sieht so aus, als ob die Leute eine Verbindung zu FORTS über ein Demokonto von MQ...

Nun, wenn Sie jetzt vorsichtig genug sind und die Start- und Endzeit nicht verwechseln können, dann haben Sie nichts zu befürchten. Lasst sie regieren.

 
Aleksey Vyazmikin:

Ich habe kein Problem mit dem Indikator oder dem Paging der Historie. Hier ist ein Stück Code

Das Problem tritt beim Öffnen eines neuen Balkens im Allgemeinen auf, wenn das Startdatum des Balkens mehr als 1 Balken vom Null-Balken der aktuellen TF entfernt ist.
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

Es wird nicht überprüft, was iTime(), Bars() zurückgeben

Das sollten Sie haben. Das hätten Sie wirklich tun sollen. Schauen Sie in der Hilfe nach - was geben iTime() und Bars() zurück? Und was steht in den Notizen?

 
Alexey Viktorov:

Nun, wenn Sie jetzt so vorsichtig sind, dass Sie die Anfangs- und Endzeit nicht verwechseln können, brauchen Sie keine Angst zu haben. Lasst sie regieren.

Ich mag es einfach nicht, passiv zu warten, und es war mir untersagt, die Entwickler gezielt danach zu fragen - die Frage war ursprünglich an sie gerichtet.

 
Artyom Trishkin:

Es wird nicht überprüft, was iTime(), Bars() zurückgeben

Nun, das sollten Sie. Das sollten Sie wirklich tun. Schauen Sie in der Hilfe nach - was geben iTime() und Bars() zurück? Und was steht in den Notizen?

Reicht es aus, diese Prüfungen einmal im Code durchzuführen, oder sollten sie nach/vor jedem Funktionsaufruf erfolgen?

Welche Art von Kontrollen werden für die aktuelle Bar / Geschichte vorgeschlagen? Wie kann man sie am besten durchführen?

 

Wie kann ich den Grund für diese Meldung herausfinden?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

Reicht es aus, diese Prüfungen einmal im Code durchzuführen, oder sollten sie nach/vor jedem Funktionsaufruf erfolgen?

Welche Art von Kontrollen schlagen Sie für die aktuelle Bar/Geschichte vor? Wie kann man sie am besten durchführen?

Sie wissen nicht, wie Sie den Rückgabewert auf Null prüfen können? Und ich weiß nicht, wie ich OnCalculate() mit einem Rückgabewert von Null beenden kann? Haben Sie schon einmal versucht, auf einer Website nach Informationen zu suchen?

  1. Abrufen des gewünschten Wertes aus der Funktion
  2. Prüfen, ob er Null ist
    1. Ist er gleich Null, wird 0 zurückgegeben;
    2. Wenn er nicht Null ist, dann zu Schritt 3
  3. Arbeiten mit diesem Wert
Ich hätte nie gedacht, dass ich einmal einem Mann mit einer Bewertung von mehr als 13 Tausend die Grundlagen der Logik beibringen würde...
Grund der Beschwerde: