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

 
Nickolay72:
Bis gestern hat mein EA jeweils nur einen Auftrag geöffnet und der nächste wird erst geöffnet, wenn ich einen Auftrag erteile. Wie kann ich nun erreichen, dass mein EA Aufträge öffnet, wenn der vorherige Balken über (unter) dem Kanal geöffnet hat?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Wenn Sie dieses Codefragment analysieren, dann wird nach diesem Code, wenn die FunktionCountTrades() Null zurückgibt, die Bedingung if (CountTrades()==0) CheckForOpen()ausgeführt und die FunktionCheckForOpen() aufgerufen.Beim nächsten Tick, wenn die Order eröffnet wurde,solltedie FunktionCountTrades() den Wert 1 zurückgeben, und dann ist die else-Bedingung erfüllt

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Wenn sich herausstellt, dass CountTrades()<max_trades ist, wird die FunktionCheckForOpen() erneut ausgeführt. DemCode zufolge istder Wert der Variablen max_trades gleich 3. Sie haben also 4 offene Aufträge.

Wenn der EA Aufträge nicht korrekt öffnet, dann überprüfen Sie die Logik, in der Sie in der Funktion CheckForOpen() die Bedingungen definieren, unter denen Positionen geöffnet werden sollen. Überprüfen Sie auch die Zeitbedingungen, wenn (CurrTime < EaStartTime || CurrTime >= EaEndTime). An Ihrer Stelle würde ich die Funktion if (TimeHour(TimeCurrent()) = Startstunde && TimeMinute(TimeCurrent()) = Startminuten ). Die Stunden und Minuten werden in Variablen vom Typ int oder uint festgelegt.

 
Artyom Trishkin:
Wenn Open Bar Number 1 über/unter dem Kanal liegt.
Verdammt, ich habe gerade gesehen, dass ich einen Handel um die untere Grenze des Kanals habe, ich habe nur die Aufträge kopiert und nicht von unten nach oben korrigiert, ich werde die korrigierte Version versuchen).
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Sie haben also 4 offene Aufträge.

Wenn der EA Aufträge nicht korrekt öffnet, überprüfen Sie die Logik, indem Sie in der Funktion CheckForOpen() die Bedingungen angeben, unter denen Positionen geöffnet werden müssen. Und prüfen Sie auch die Zeitbedingungen, wenn (CurrTime < EaStartTime || CurrTime >= EaEndTime). An Ihrer Stelle würde ich die Funktion if (TimeHour(TimeCurrent()) = Startstunde && TimeMinute(TimeCurrent()) = Startminuten ). Die Stunde und die Minute werden in Variablen vom Typ int oder uint festgelegt.

Ich wollte 3 Aufträge eröffnen, aber das war nicht das, was ich vorhatte; ich wollte bis zu drei Aufträge, aber einen Auftrag für jeden neuen Balken.

Es gibt kein Problem mit der Zeit, es funktioniert in einem genau festgelegten Zeitraum.

 
Nickolay72:

Ich wollte bis zu drei Aufträge, aber einen Auftrag für jeden neuen Balken. Es gibt Zeiten, in denen mehrere Balken hintereinander positive Signale geben.

Es gibt kein Problem mit der Zeit, es funktioniert in einem genau festgelegten Zeitraum.

Die Bedingung: Wenn der Balken der letzten Positionseröffnung ungleich Null ist und die Anzahl der offenen Positionen unter dem zulässigen Maximum liegt, dann kann eine neue Position eröffnet werden.
 

Karputow 2016.01.13_05:14 UHR. Hallo Herr Karputov! Ich schrieb in MQL4

.mq4-Datei und erhielt die .ex4-Datei. Aber im Strategietester funktioniert es nicht. Finale

war es, einen EA für MT4 zu schreiben. In MQL5 habe ich .mq5 und

.ex5-Dateien. Und .ex5-Datei geöffnete Gewerke. Die vierte Version unterscheidet sich von

Die vierte Version hat einige Unterschiede zur fünften Version, und ich bin noch kein guter MQL-Programmierer, deshalb habe ich schlechte Ergebnisse.

Ich habe nicht verstanden, was jetzt falsch ist, die Logdatei des Testers wurde gespeichert. Я

Ich werde versuchen, ihn zu übersetzen. In der Zwischenzeit bitte ich Sie, mir zu sagen

Was ist mit dem Programmcode nicht in Ordnung? Während Sie antworten, werde ich versuchen

um es herauszufinden.
Ich war überrascht, als ich in meiner vierten Version des Editors die Möglichkeit fand, zu schreiben

Ich wollte es gerade schreiben. Aber ich habe es nicht geschrieben. Ich füge bei

Tester-Protokolldateien und ein Bildschirmfoto. 05:30 MSC. Logbuch des TestersKarputowKarputow

Dateien:
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14 UHR MOSKAUER ZEIT. Hallo Herr Karputov! Ich habe in MQL4 geschrieben

.mq4-Datei habe ich eine .ex4-Datei erhalten. Aber im Strategietester funktioniert es nicht.

Warum haben Sie den Code als Bild eingefügt? )) Wer wird sie verstehen?
 
Николай Никитюк:


Bitte fügen Sie Ihren Code korrekt in den Beitrag ein:Code korrekt in das Forum einfügen
 

Wo kann ich Fehlerbeschreibungen finden?

Ich verstehe nicht, was der Compiler nicht mag, warum er mich warnt?

Prüfen Sie den Vorrang der Operatoren auf mögliche Fehler; verwenden Sie Klammern, um den Vorrang zu verdeutlichen.


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

und hier

Ausdruck hat keine Wirkung


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

Wo kann ich Fehlerbeschreibungen finden?

Ich verstehe nicht, was der Compiler nicht mag, warum warnt er mich?

Neben dem Fehlertext gibt der Compiler auch die Nummer der Codezeile an, in der der Fehler aufgetreten ist, und die Position in der Zeile.
 
Karputov Vladimir:
Neben dem Fehlertext meldet der Compiler auch die Nummer der Codezeile, in der der Fehler gefunden wurde, und seine Position in der Zeile.
Dies ist so - im ersten Fall auf die Vergleichszeichen wiederum - offenbar zwischen dem "oder" müssen Sie eine Klammer setzen, und im zweiten Fall schwört es auf die Klammer, in der der logische Ausdruck geschrieben wird.