|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Programmierstruktur (Syntax)
Hallo ich habe mal wieder ein Problem und verstehe es nicht.
Die Programm Syntax ist doch so if(x+2=3) { es passiert a } else { if(x+2=4) { es passiert b } } es passiert a oder b so nun zu meinen Programm, hier der Code Code:
string OP = ""; double price = 0; int MagicNumber = 0; string Farbe = ""; string OrderName = ""; bool Schalter_30 = true; bool Schalter_31 = true; if (OrdersTotal()<2) { if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1)) { if(Schalter_30==true) { OP = OP_BUY; price = Ask; MagicNumber = Order3; Farbe = Green; OrderName = "BUY-Order 3.0"; Schalter_30==false; } } else { if(iOpen(_Symbol,PERIOD_M15,0)<iOpen(_Symbol,PERIOD_M15,1)) { if(Schalter_31==true) { OP = OP_SELL; price = Bid; MagicNumber = Order3; Farbe = Green; OrderName = "BUY-Order 3.1"; Schalter_31=false; } } } OrderSend(_Symbol,OP,Lots,price,10,0,0,NULL,MagicNumber,0,Farbe); bool Note = SendNotification (OrderName +" Einstieg = " + price); Print (OrderName); Comment("Symbol = ", _Symbol, "\n" "OP = ", OP, "\n" "Price = ", price ,"\n" "MagicNumber = ", MagicNumber, "\n" "Farbe = ", Farbe, "\n" "Schalter 30 = ", Schalter_30, "\n" "Schalter 31 = ", Schalter_31); } return Schalter_30&&Schalter_31; } Warum "printet" es mir, wenn ich die Order Send ausklammer, ununterbrochen, ob wohl der Schalter es doch auch nicht zulassen würde? Ich bitte um eine genaue Erklärung, weil ich es von meiner Logik nicht verstehe, wenn er es nicht darf warum macht er es trotzdem??? vielen Dank schonmal |
|
|||
Er "printed" nicht, sondern schaltet die Kommentarfunktion ein und diese bleibt so lange eingeschaltet bis Du sie abschaltest.
Printen geht mit dem Print(" Print-Nachricht"); Befehl. AVT |
|
|||
Danke für deine Antwort.
Dafür sind ja diese Schalter eingebaut, die einfach weg ignoriert werden. Nun habe ich das Programm so geändert, dass er nicht einen bool Wert abfragt sondern Zahlen vergleicht. Das funktioniert schon mal. Code:
void OnTick() { string OP = ""; double price = 0; int MagicNumber = 0; string Farbe = ""; string OrderName = ""; if(OrdersTotal()<5) { if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1)&&(Schalter_30>=1)) { OP = OP_BUY; price = Ask; MagicNumber = Order3; Farbe = "Green"; OrderName = "BUY-Order 3.1"; BuyOrder =1; Schalter_30=0; Print(OrderName); } else { if(iOpen(_Symbol,PERIOD_M15,0)>iOpen(_Symbol,PERIOD_M15,1)&&(Schalter_30>=1) { OP = OP_SELL; price = Bid; MagicNumber = Order3; OrderName = "SELL-Order 3.1"; SellOrder =1; Schalter_31=0; Print(OrderName); } } if(BuyOrder>0) { //Order = OrderSend(_Symbol,OP,Lots,Ask,3,0,0,NULL,MagicNumber,0,Green); if(TimeCurrent()==iTime(_Symbol,PERIOD_M15,0)) { if(Schalter_30==0) { Schalter_30=1; } } bool Note = SendNotification (OrderName +" Einstieg = " + price); } else { if(SellOrder>0) { //Order = OrderSend(_Symbol,OP,Lots,Bid,3,0,0,NULL,MagicNumber,0,Red); if(TimeCurrent()==iTime(_Symbol,PERIOD_M15,0)) { if(Schalter_31==0) { Schalter_31=1; } } Note = SendNotification (OrderName +" Einstieg = " + price); } } } Comment("BuyOrder = ", BuyOrder, "\n", "SellOrder = ", SellOrder, "\n", "Schalter_30 = ", Schalter_30, "\n", "Schalter_31 = ", Schalter_31,"\n", "Schalter = ",Schalter); } Nun die Frage warum öffnet er, trotz Schalter, 2 Sell Order am Anfang? Gibt es dort eine Art delay, das noch eine 2te Order schnell mit durchschlüpft? Warum funktioniert das mit der bool Variante nicht? (Wieso muss ich Zahlen vergleichen) Wenn ich jetzt 4 oder 5 verschiedene Kauf oder Verkauf Möglichkeiten habe, warum funktioniert das Zurücksetzen des Schalters nicht mehr wenn ich es so habe? Code:
if(BuyOrder>0) { //Order = OrderSend(_Symbol,OP,Lots,Ask,3,0,0,NULL,MagicNumber,0,Farbe); if(TimeCurrent()<=iTime(_Symbol,PERIOD_M15,0)) { if(Schalter_10B==0) { Schalter_10B=1; } else { if(Schalter_20B==0) { Schalter_20B=1; } else { if(Schalter_21B==0) { Schalter_21B=1; } else { if(Schalter_22B==0) { Schalter_22B=1; } else { if(Schalter_23B==0) { Schalter_23B=1; } else { if(Schalter_24B==0) { Schalter_24B=1; } else { if(Schalter_25B==0) { Schalter_25B=1; } else { if(Schalter_30B==0) { Schalter_30B=1; } else { if(Schalter_31B==0) { Schalter_31B=1; } } } } } } } } } } } Und könnte man das nicht auch über ein Array lösen? |
Lesezeichen |
|
|