|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
OrderModify für SELL Order klappt nicht
Hi,
ich hoffe mir kann jemand helfen bzw. einen Tipp geben. die OrderModify-Funktion TS_SL_DELETE_OP_BUY funktioniert bei mir einfach nicht. Die andere Funktion TS_SL_DELETE_OP_SELL läuft problemlos... Ich bin echt ratlos warum nur eine der beiden geht obwohl die Bedingungen m.E. identisch sind Code:
if(OrderType()==OP_BUY && OrderTakeProfit()==0) for(int b= OrdersTotal()-1;b>=0;b--){if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) if(OrderType()==OP_SELL && OrderStopLoss()!=0) {bool TS_SL_DELETE_OP_SELL =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);}} if(OrderType()==OP_SELL && OrderTakeProfit()==0) for(int b= OrdersTotal()-1;b>=0;b--){if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) if(OrderType()==OP_BUY && OrderStopLoss()!=0) {bool TS_SL_DELETE_OP_BUY =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);}} danke vorab |
|
|||
OrderType() vor der Funktion OrderSelect() zu benutzen, wird immer 0 ergeben.
der Wert OP_BUY entspricht dem Wert 0, OP_SELL dem Wert 1. Somit ist dann OrderType() == OP_BUY immer true und damit springt das Programm auch zu TS_SL_DELETE_OP_SELL aber nicht zu TS_SL_DELETE_OP_BUY. Übrigens der Korrektheit wegen, TS_SL_DELETE_OP_SELL und TS_SL_DELETE_OP_BUY sind keine Funktionen, sondern Variablen. Und dann bitte demnächst übersichtlichen Code schreiben, d.h. Klammern benutzen, einrücken etc. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
vielen Dank für den Hinweis :-)
|
|
|||
sorry ich hab's glaub ich nicht gecheckt
ich möchte ihm sagen, wenn der BreakEven überschritten ist und der TrailingStop im Gewinn nachgezogen wurde, lösche den SL der Gegenposition, damit der Trade freie Bahn hat.... An welcher Stelle muss ich Select und Co. setzen??? Code:
if(OrdersTotal()>=2 && useTrailingStop==true) for(int b= OrdersTotal()-1; b>=0; b--) if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) if(OrderType()==OP_BUY && BreakEvenBuy!=0 && Bid>BreakEvenBuy+StopLevel*_Point+1*Point) for(int d= OrdersTotal()-1; d>=0; d--) if(OrderSelect(d,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) if((OrderType()==OP_SELL)&& OrderStopLoss()!=0) {bool DELET_SELL_SL =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);} if(OrderType()==OP_SELL && BreakEvenSell!=0 && Ask<BreakEvenSell-StopLevel*_Point-1*Point) for(int d= OrdersTotal()-1; d>=0; d--) if(OrderSelect(d,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) if((OrderType()==OP_BUY)&& OrderStopLoss()!=0) {bool DELET_BUY_SL =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);} |
|
|||
hab eine andere Lösung gefunden :-)
Code:
if(OrdersTotal()>=2 && useTrailingStop==true) { if(BreakEvenBuy!=0 && Bid>BreakEvenBuy+StopLevel*_Point+1*Point) for(int b= OrdersTotal()-1; b>=0; b--) if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL && OrderStopLoss()!=0 && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) {bool DELET_SELL_SL =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);} }; if(OrdersTotal()>=2 && useTrailingStop==true) { if(BreakEvenSell!=0 && Ask<BreakEvenSell-StopLevel*_Point-1*_Point) for(int b= OrdersTotal()-1; b>=0; b--) if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY && OrderStopLoss()!=0 && OrderMagicNumber()==MagicNumber && OrderSymbol()==_Symbol) {bool DELET_BUY_SL =OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,clrNONE);} }; |
Lesezeichen |
|
|