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ß