Multisymbol EA tradet nur mit einem Symbol

 
Hallo zusammen,

ich habe nen Multisymbol EA kreiert.

Leider stellte ich fest, dass dieser nur trades in einem Währungspaar abfeuert.

Ich konnte auch schon den Fehler eingrenzen. Der EA ist so aufgebaut, dass er im "1mOHLC" Modus läuft, ich diesem aber mit der folgenden funktion nur die Öffnungspreise der neuen M1 Kerze übermittle:



bool   checkNewM1CandleShort (int SymbolLoop)
{ 
                                                                          
 static datetime timeM1Last = NULL; 
        datetime timeM1This = iTime (SymbolArray[SymbolLoop] , PERIOD_M1 , 0 ); 
        
 if(timeM1Last < timeM1This)                                      
   {                                                                    
     timeM1Last = timeM1This; 
     return true; 
   }                                                                   
 return false;
}

Der EA ist so generiert, dass er mit einer For-Schleife sämtliche währungspaare und deren Einstiegssignale durchgeht. Demnach wird diese Funktion bei jedem 1mOHLC Tick für das jeweilige Währungspaare aufgerufen.


Wenn ich den EA auf einem Währungspaar teste, läuft er tadellos, sobald ich aber mehrere Währungspaare testen möchte, tradet er nur mit dem jeweils zuerst gelisteten paar. Nach einer kontrolle der checkNewM1CandleShort() fiel mir auf, dass diese lediglich für das zuerst gewählte Währungspaar (sagen wir CADJPY) "true" ist. für den rest bleibt es dauerhaft auf false.

Leider kenne ich mich noch nciht genau mit dem Aufbau des Mt5 aus. ich vermute allerdings, dass wenn dieser die checkNewM1CandleShort()  aufruft, diese nur einmal true sein kann, da alle M1 kerzen für alle währungspaare gleichzeitig true sind und nicht bei jedem  Durchlauf meiner for schleife


Für eure Hilfe wäre ich euch wie immer sehr dankbar!
 
steyr6155:
Hallo zusammen,

ich habe nen Multisymbol EA kreiert.

Leider stellte ich fest, dass dieser nur trades in einem Währungspaar abfeuert.

Ich konnte auch schon den Fehler eingrenzen. Der EA ist so aufgebaut, dass er im "1mOHLC" Modus läuft, ich diesem aber mit der folgenden funktion nur die Öffnungspreise der neuen M1 Kerze übermittle:




Der EA ist so generiert, dass er mit einer For-Schleife sämtliche währungspaare und deren Einstiegssignale durchgeht. Demnach wird diese Funktion bei jedem 1mOHLC Tick für das jeweilige Währungspaare aufgerufen.


Wenn ich den EA auf einem Währungspaar teste, läuft er tadellos, sobald ich aber mehrere Währungspaare testen möchte, tradet er nur mit dem jeweils zuerst gelisteten paar. Nach einer kontrolle der checkNewM1CandleShort() fiel mir auf, dass diese lediglich für das zuerst gewählte Währungspaar (sagen wir CADJPY) "true" ist. für den rest bleibt es dauerhaft auf false.

Leider kenne ich mich noch nciht genau mit dem Aufbau des Mt5 aus. ich vermute allerdings, dass wenn dieser die checkNewM1CandleShort()  aufruft, diese nur einmal true sein kann, da alle M1 kerzen für alle währungspaare gleichzeitig true sind und nicht bei jedem  Durchlauf meiner for schleife


Für eure Hilfe wäre ich euch wie immer sehr dankbar!

Schau dir den Artikel an:

https://www.mql5.com/de/articles/648

Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
  • www.mql5.com
In diesem Beitrag wird die Umsetzung einer einfachen Herangehensweise an einen mehrwährungsfähigen Expert Advisor beschrieben. Das heißt, Sie werden in der Lage sein, den Expert Advisor für das Testen/den Handel unter identischen Bedingungen aber mit unterschiedlichen Parametern je Symbol einzurichten. Als Beispiel erstellen wir ein Muster für zwei Symbole auf eine Weise, mit der Sie nach Bedarf zusätzliche Symbole hinzufügen können, indem Sie kleine Änderungen am Code vornehmen.
 

Poste doch mal den relevanten code

ich habe aich multipair eas die funktionieren gut

 

Hallo Amando,

Ich habe den Fehler bereits gefunden, bzw. mit einer funktionierenden Funktion ausgegrenzt.

Falls jemand das Multismybol Gerüst möchte, schreibt mir


Für die interessenten: Diesen Code habe ich mit dem obigen "fehlerbehafteten" Code ersetzt

//+------------------------------------------------------------------+
//| lässt den EA nur mit 1m Close Price rechnen                        |
//+------------------------------------------------------------------+
bool CheckNewM1Bar(string CurrentSymbol, int SymbolLoop)
  {    
   datetime lastM1Bar²[];
   
//--- Get the opening time of the current bar
//    If an error occurred when getting the time, print the relevant message
   if(CopyTime(CurrentSymbol,PERIOD_M1,0,1,lastM1Bar²)==-1)
      Print(__FUNCTION__,": Error copying the opening time of the bar: "+IntegerToString(GetLastError()));
//--- If this is a first function call
   lastM1Bar[SymbolLoop] = lastM1Bar²[0];
   if(newM1Bar[SymbolLoop]==NULL)
     {
      //--- Set the time
      newM1Bar[SymbolLoop]=lastM1Bar[SymbolLoop];
      Print(__FUNCTION__,": Initialization ["+CurrentSymbol+"]["
            +TimeToString(lastM1Bar[SymbolLoop],TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"]");
      return(false);
     }
//--- If the time is different
   if(newM1Bar[SymbolLoop]!=lastM1Bar[SymbolLoop])
     {
      //--- Set the time and exit
      newM1Bar[SymbolLoop]=lastM1Bar[SymbolLoop];
      return(true);
     }
//--- If we have reached this line, then the bar is not new, so return false
   return(false);
  }