Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 26.07.21
MarkusWilhelm89 MarkusWilhelm89 ist offline
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard Problem mit bool-Abfrage nach OrderSelect

Hallo zusammen,

ich hoffe mir kann jemand helfen und mir sagen, wo mein Fehler liegt.


Beschreibung:

Es handelt sich um einen Grid-EA. Zur leicherten Darstellung gehe ich davon aus nur "long" Positionen zu eröffnen.

Der EA soll immer den OrderOpenPrice() der aktuellen/neuesten Market-Order als Basis für weitere Berechnungen nutzen --> double PREISLEVEL()

Ich definiere mit einer input Variable die Maschenweite des Grids, zB 200 --> double Grid_Abstand


In den hier dargestellten Programmzeilen ermittle ich mithilfe des PREISLEVEL() +/- Grid_Abstand, jeweils die Ober-/Untergrenze der Grid-Ebenen:

Code:
double GRID_UPPER_1_HIGH()    {double Grid_Upper_1_High = PREISLEVEL()+(1*Grid_Abstand*Point)+(Grid_Abstand/2)*Point;  return(Grid_Upper_1_High);};      double GRID_UPPER_1_LOW()     {double Grid_Upper_1_Low  = PREISLEVEL()+(1*Grid_Abstand*Point)-(Grid_Abstand/2)*Point;  return(Grid_Upper_1_Low);};


double GRID_CURRENT_HIGH()    {double Grid_Current_High = PREISLEVEL()+(Grid_Abstand/2)*Point;                         return(Grid_Current_High);};      double GRID_CURRENT_LOW()     {double Grid_Current_Low  = PREISLEVEL()-(Grid_Abstand/2)*Point;                         return(Grid_Current_Low);};


double GRID_LOWER_1_HIGH()    {double Grid_Lower_1_High = PREISLEVEL()-(1*Grid_Abstand*Point)+(Grid_Abstand/2)*Point;  return(Grid_Lower_1_High);}      double GRID_LOWER_1_LOW()     {double Grid_Lower_1_Low  = PREISLEVEL()-(1*Grid_Abstand*Point)-(Grid_Abstand/2)*Point;  return(Grid_Lower_1_Low);};

Im Anschluss daran, prüfe ich mit bool'schen Abfrage, ob in den zuvor berechneten Grid-Ebenen die jeweiligen Order-Arten vorliegen.

Hintergrund: Es soll immer im Grid-Bereich darüber eine BUYSTOP und im Grid-Bereich darunter eine BUYLIMIT Order liegen.

Code:
bool GRID_UPPER_1_BUYSTOP()   {bool Grid_Upper_1_Buystop    =false; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)   if(OrderType()==OP_BUYSTOP)    if(OrderOpenPrice()>GRID_UPPER_1_LOW() && OrderOpenPrice()<GRID_UPPER_1_HIGH())  Grid_Upper_1_Buystop    = true;  return(Grid_Upper_1_Buystop);};

bool GRID_CURRENT_BUY()       {bool Grid_Current_Buy        =false; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)   if(OrderType()==OP_BUY)        if(OrderOpenPrice()<GRID_CURRENT_HIGH() && OrderOpenPrice()>GRID_CURRENT_LOW())  Grid_Current_Buy        = true;  return(Grid_Current_Buy);};

bool GRID_LOWER_1_BUYLIMIT()  {bool Grid_Lower_1_Buylimit   =false; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)   if(OrderType()==OP_BUYLIMIT)   if(OrderOpenPrice()<GRID_LOWER_1_HIGH() && OrderOpenPrice()>GRID_LOWER_1_LOW())  Grid_Lower_1_Buylimit   = true;  return(Grid_Lower_1_Buylimit);};

Nun zu meinem Problem: In der bool'schen Prüfung hat der EA Probleme, den Code nach der OrderType()-Prüfung, nämlich der Prüfung ob der OrderType() in dem Grid-Bereich liegt, zu verarbeiten. Konkret stört sich der EA an folgendem Schnipsel:

Code:
if( OrderOpenPrice()<GRID_LOWER_1_HIGH() && OrderOpenPrice()>GRID_LOWER_1_LOW() )
Ich bin mir nicht sicher wo mein Fehler liegt.

Wenn ich die Variable in drei einzelne Variablen zerlege und nach einander bzw. aufeinander aufbauenf nutze, in dem ich zuerst die TicketNummer prüfe, danach mit der gefundenen TicketNummer den OrderOpenPrice ermittle, danach mit dem OrderOpenPrice die bool'sche Abfrage mache.... dann funktioniert das. Aber so wie oben gezeigt in einem Rutsch nicht. :-(

Hoffe ich habe es verständlich erklärt und hoffe noch mehr, mir kann jemand die augen öffnen was ich falsche mache.


Danke vorab

Gruß