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

 
Artyom Trishkin:

In OnInit() rufen Sie die Zeitreihe des Symbols auf: iTime(Symbol,Timeframe,1);

Ganz zu Beginn von OnTick() den benötigten Balken der benötigten Zeitreihe über die entsprechende iFunc() abfragen, oder if( iTime(Symbol,Timeframe,10)==0) return;

In diesem Fall wird der Expert Advisor keinen neuen Balken erkennen und auf den nächsten Tick warten.

In OnInit() haben wir die Zeitreihendaten angefordert und damit das Paging der Daten aktiviert.

In OnTick() prüfen wir, ob die minimal erforderliche Historie für den EA verfügbar ist, und wenn sie noch nicht verfügbar ist, warten wir auf den nächsten Tick.

Und bis alle Daten, die der Expert Advisor benötigt, eingegangen sind, wartet er auf den nächsten Tick.

Sobald alle erforderlichen Daten gepumpt und erhalten wurden, beginnt der Expert Advisor mit dem neuen Balken und der erforderlichen Historie zu arbeiten.

Um die seriellen Daten auf dem neuesten Stand zu halten, sollten Sie sie mindestens alle zwei Minuten abrufen. Erstellen Sie einen zweiten Timer für etwa anderthalb Minuten (90 Sekunden) und greifen Sie darin einfach auf eine beliebige Zeitreihe des gewünschten Symbols zu, z. B. iTime(Symbol,Timeframe,1); Ohne die empfangenen Daten zu überprüfen - verschieben" Sie einfach die Historie. Dann sind alle Daten des Symbols immer auf dem neuesten Stand.

Natürlich werde ich versuchen, die neue Bar mit allen TFs zu überprüfen, aber ist es nicht synchron, das ist nicht MT4. Das Problem liegt nicht beim Balken, sondern bei der Nichtausführung von Indikatoren, die vom Indikator aufgerufen werden, der wiederum vom Expert Advisor aufgerufen wird.

Ich arbeite mit Protokollen, so dass der Verlauf immer auf dem neuesten Stand sein sollte.

Und all diese Prüfungen werden für den Test durchgeführt und verlangsamen nur die Arbeit auf einem echten Konto, weil dort alles langsamer funktioniert als unter den stationären Bedingungen des Testers, ich wiederhole, dass der Indikator auf einem echten Konto korrekt funktioniert.

 

Bisher habe ich das Problem gelöst, indem ich vor dem Start des Hauptcodes die Bereitschaft der Indikatoren, die fehlgeschlagen sind, überprüft habe

//При появлении нового бара проверяем корректность расчета индикаторов
      if(isNewBar_Predv_Calc_Ind()==true)Predv_Calc_Ind=true;
      if(Predv_Calc_Ind==true)
      {
      double arr_DonUp=ZZ_Vibor(0,2,0);
      double arr_DonDown=ZZ_Vibor(0,3,0);
      double arr_DonUp_m2=ZZ_Vibor(1,2,0);
      double arr_DonDown_m2=ZZ_Vibor(1,3,0);
      double arr_DonUp_m5=ZZ_Vibor(2,2,0);
      double arr_DonDown_m5=ZZ_Vibor(2,3,0);
      double arr_DonUp_m15=ZZ_Vibor(3,2,0);
      double arr_DonDown_m15=ZZ_Vibor(3,3,0);
      if (arr_DonUp<1     || arr_DonDown<1    ||
          arr_DonUp_m2<1  || arr_DonDown_m2<1 ||
          arr_DonUp_m5<1  || arr_DonDown_m5<1 ||
          arr_DonUp_m15<1 || arr_DonDown_m15<1
         )return;
      else{Predv_Calc_Ind=false;}      
      }
//Операции выполняются только при появлении следующего бара   
   if(!isNewBar()) return;

Aber dieser Ansatz ist nicht universell, da Sie alle Indikatoren auflisten müssen. Gibt es eine andere, universellere Methode, um die Testerumgebung korrekt arbeiten zu lassen?

 
Artyom Trishkin:

In OnTick() prüfen wir, ob die minimal erforderliche Historie für den Expert Advisor verfügbar ist, und wenn sie noch nicht verfügbar ist, warten wir auf den nächsten Tick.

Und bis alle vom EA benötigten Daten vorliegen, wird er auf den nächsten Tick warten.

Sobald alle erforderlichen Daten gepumpt und erhalten wurden, beginnt der Expert Advisor mit dem neuen Balken und der erforderlichen Historie zu arbeiten.

Ich verstehe nicht, wie Sie die Verfügbarkeit der Historie überprüfen wollen...

 
fxsaber:

Fügen Sie diese Zeile vor der MQL4-Funktion ein

und es wird in MT5 funktionieren.

Das ist genial. Herzlichen Dank!

 
Hallo, ich bin ein junger Rentner, der gerne solche Buttons im MT5 machen würde.

Können Sie sagen, MT5 können solche Tasten zu implementieren, vielleicht bereits eine, teilen Sie den Code ...


Die Schaltfläche "Start " und die Schaltfläche "Alle Aufträge schließen". MT5, alle Paare, alle Zeitrahmen, 4/5 Ziffern, Anfangslot 0,01 einschließlich Cents.
Sorgen Sie für Schlupf und Neuanmeldungen.

Funktionen für die Schaltfläche "Start
Sobald Sie das Fibo manuell ausgepackt haben, sollten Sie 1 bis 11 Aufträge auf einmal in BAY oder SELL zum aktuellen Kurs eröffnen.
Wenn Sie zuvor in den Einstellungen ausgewählt haben, wie viele und welche Orders (1, 2, 5, 7 oder alle 11) in Richtung des entfalteten Fibos geöffnet werden sollen.
In den Einstellungen war es möglich, die Losgröße für jeden Auftrag manuell festzulegen oder sie dynamisch zu erhöhen/verringern.

TP - Der Take Profit wird in aufsteigender Reihenfolge von 1 bis 11 bei den Fibo-Niveaus 61,8; 78,6; 100,0 festgelegt;
161.8; 185.4; 200.0; 261.8; 285.0; 423.6; 561,8; 685.4

SL - Stop Loss in der Größe von - 2 Spreads (automatisch berechnet) von der Nulllinie des Fibos.

TS - Trailing Stop zieht alle Aufträge hinter sich her.
1) Der Trailing Stop verschiebt den SL aller Orders auf die 38,2 + 2 Spreads, wenn der Preis das 61,8-Niveau erreicht hat,
2) Der Trailing Stop verschiebt den SL aller verbleibenden Aufträge auf das Niveau 50,0 + 2 Spreads, wenn der Preis das Niveau 100,0 erreicht,
3. Trailing SL aller verbleibenden Aufträge auf 78,6+2 Spreads, wenn der Preis die 161,8 erreicht,
4. Trailing SL aller verbleibenden Aufträge auf das Niveau der 100,0+2-Spanne, wenn der Kurs das Niveau von 261,8 erreicht. 5.
5. Trailing SL aller verbleibenden Aufträge auf das Niveau der 200,0+2-Spanne, wenn der Preis das Niveau von 423,6 erreicht,
6. Trailing verschiebt den SL aller verbleibenden Aufträge auf das Niveau der Spanne 423,6+2, wenn der Preis 561,8 erreicht hat;

DieFunktion der Schaltfläche "Alle Aufträge schließen" besteht darin, alle Aufträge zwangsweise zu schließen.
 

Hallo, wenn die Ask und Bid Preise von der CSymbolInfo Klasse mehr oder weniger klar sind, wie man zum Beispiel SessionInterest oder SessionBuyOrdersVolume oder SessionPriceLimitMin bekommt, gibt es Nullen, ich kann nicht verstehen, warum...

 
Александр Юрин:

Hallo, wenn die Ask und Bid Preise von CSymbolInfo Klasse ist mehr oder weniger klar, wie man z.B. SessionInterest oder SessionBuyOrdersVolume oder SessionPriceLimitMin zu bekommen, gibt es Nullen, ich kann nicht verstehen, warum...

Wenn ein Handelsserver diese Informationen sendet, werden Sie sie erhalten.

In der Regel werden diese Informationen von Brokern für Aktiensymbole verbreitet (nicht zu verwechseln mit Brokern und Handelszentren).

 
Vladimir Karputov:

Wenn ein Handelsserver diese Informationen sendet, werden Sie sie erhalten.

Diese Informationen werden in der Regel von Brokern für Börsensymbole übermittelt (nicht zu verwechseln mit Brokern und Handelszentren).

Broker Otkritie, die RTS-Index-Futures, ich nehme an, muss mindestens SessionPriceLimitMin und SessionPriceLimitMax übertragen (weil sie so weit ich verstehe, die Eröffnungskurse in Marktaufträge verwendet werden). Übersetzt die Eröffnung nicht... Ich verschreibe zum Beispiel:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - von Ihrem EA

Ich erhalte nur Ask-Preise im Protokoll

Dateien:
y2a4cgbfjw.png  63 kb
 

Bitte helfen Sie mir beim Schreiben eines Codes, der das Datum des letzten Balkens mit einer beliebigen Verschiebung in einem beliebigen TF korrekt und auf den aktuellen TF genau bestimmt.

int              N_bar=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_H1,0));//номер текущего бара
datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,N_bar+1);//только для минуток и то может быть не корректно!

Print("StopDt_Shift=",TimeToString(StopDt,TIME_DATE|TIME_MINUTES));

Dieser Code funktioniert im Allgemeinen, aber nur, wenn die Startzeit des aktuellen Balkens mit dem aktuellen (auf die Minute gerundeten) Balken übereinstimmt, da mein aktueller Chart M1 ist. Und wenn sie nicht übereinstimmen, kommt es zu verschiedenen Missgeschicken, die von verschiedenen TFs abhängen. Wenn es 12 Uhr war, ist es kein Problem, die Zeit wird 12:59 sein, aber wenn es 13 Uhr war, wird es 13:58 sein, weil der stündliche Balken um 14:05 Uhr und nicht um 14:00 Uhr geöffnet wurde und die FunktioniBarShift den nächstgelegenen Balken zu 14:00 Uhr, d.h. 13:59, liefert.

Hinzugefügt: Ich habe dies gemacht, es scheint zu funktionieren

datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,_Shift-1),iTime(Symbol(),PERIOD_CURRENT,0)));
 
Александр Юрин:

Otkritie Broker, RTS-Index-Futures, nehme ich an, es sollte mindestens SessionPriceLimitMin und SessionPriceLimitMax (wie ich verstehe, sie sind in der Markt-Aufträge von Eröffnungskursen verwendet) übertragen. Übersetzt die Eröffnung nicht... Ich verschreibe zum Beispiel:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - von Ihrem EA

Ich erhalte nur Ask-Preise im Protokoll

Ist der Server echt oder eine Demo?
Grund der Beschwerde: