wie schreibe beziehungsweise optimiere ich den Code, wenn ich prüfen möchte. ob der Schlusskurs der letzten 8 Bars über dem MA-Wert liegt?

 

Guten Tag!

Ich möchte als Voraussetzung zum Eingehen eines Trades prüfen, ob die letzten 8 Schlusskurse alle oberhalb des Values vom SMA50 liegen.

Das kann ich z.B. so schreiben:

bool BuyCondition1 = mrate[1]>maVal[1] && mrate[2]>maVal[2] && mrate[3]>maVal[3] &&.........................mrate[8]>maVal[8];

Diese Vorgehensweise hat meiner meinung nach 2 Nachteile:

1. sehr viel Code

2. dadurch auch Fehleranfällig (Tippfehler).

Gibt es in MQL5 die Möglichkeit, das "einfacher" zu schreiben; vielleicht in einer einzigen Zeile ohne &&, &&, &&... zu verwenden?

Danke für Vorschläge

Franz

Und schon hat die "Fehleranfälligkeit" zugeschlagen. Es muss "natürlich" mrate[1].close etc heißen.

 
  1. Du kannst, wenn ein Fehler entdeckt wurde den eigenen Post korrigieren. Unter dem Post gibt es den Knopf bearbeiten.
  2. Code bitte als Code posten: Alt+S oder (Menüzeile) mit dem Icon </>.
  3. Ob sich die Logik vereinfachen lässt ist au einer Zeile schwer zu erkennen, aber kennst Du die Boolesche Algebra: https://de.wikipedia.org/wiki/Boolesche_Algebra ?
 
Du kannst das für die letzten acht Bars höchstens in einem for loop abfragen, in etwa:
// Globale Variablen:
bool        longCondition[];   // du kannst auch verschiedene Conditions mit der selben Funktion überprüfen.
int         bars=8; 
//------

// In OnInit():
   ArraySetAsSeries(longCondition,true);  // Das Bedingungsarray wird wird als Zeitserie formatiert, mit "0" als letztem Wert.
   ArrayInitialize(longCondition,false);  // long condition wird als falsch initialisiert
   ArrayResize(longCondition,bars);       // bars gibt hier an, wie viele Balken Du möchtest
    
//-----

// In OnTick()
AssignArrayConditions(longCondition);     //Funktionsaufruf s.u.


if(CheckArrayConditions(longCondition)) 
{
Trade.Buy(...);  
}
//-----

// Außerhalb von OnTick():

void AssignArrayConditions(const bool &cond[])  //hier wird der gesamte Array longCondition an die Funktion übergeben.
{
for(int i=0 ; i<bars ; i++)
{
longCondition[i]=mrate[i].close>maVal[i];       // diese Schleife weist die boolsche Bedingung zu, die Du in ihr definierst


} 
}


bool CheckArrayConditions(const bool &cond[])
{  
   bool res=true;                

   for(int i=0 ; i<bars ; i++)
   {  
      res&=cond[i];                       // Beim Und-Istgleich werden im Prinzip 0=false und 1=true multipliziert
      Print("i = ",i,", Result = ",res);  // Ist einer der Werte =0 , so wird das Ergebnis=0
   }   
   return(res);                           // das Ergebnis der Fkt. wird zu OnTick zurück gegeben.
}

Es mag noch umständlicher ausschauen, aber Du musst jetzt nur noch die boolsche Bedingung und die Anzahl der Balken eingeben und nicht jedesmal Alles umschreiben.Du kannst auch eine short condition einführen und diese mit den selben Funktionen zuweisen und überprüfen. Es ist nun nicht mehr spezifiziert, welche Bedingungen übergeben werden.
So mit </> Code ist es besser. Der Code funktioniert nicht eins zu eins aber es steht dabei was wohin gehört. Habs aber mit Handy geschieben und noch nicht genau überprüft.

Update: So müsste es laufen
 
pennyhunter #:
Du kannst das für die letzten acht Bars höchstens in einem for loop abfragen, in etwa:

Es mag noch umständlicher ausschauen, aber Du musst jetzt nur noch die boolsche Bedingung und die Anzahl der Balken eingeben und nicht jedesmal Alles umschreiben.
So mit </> Code ist es besser. Der Code funktioniert nicht eins zu eins aber es steht dabei was wohin gehört. Habs aber mit Handy geschieben und noch nicht genau überprüft.

Update: So jetzt hab ich sie total kaputt gepflegt weil der Absatz in der Mobileversion nicht so will. Morgen wieder.
Danke sehr; das hilft sicher. An eine For-Schleife hatte ich gedacht, aber nicth gewußt, wie ich das mit einem Array umsetzen kann.
 
ForexmailkontoFrLeLa #:
Danke sehr; das hilft sicher. An eine For-Schleife hatte ich gedacht, aber nicth gewußt, wie ich das mit einem Array umsetzen kann.

Ein Array ist auch nur eine Reihe Variablen.

Grund der Beschwerde: