@ Michael: Dann mach halt je nach Buy oder Sell nen Trailing Stop, der für alle Orders genutzt wird.
SL / TP / OrderOpenPrice() aus ner offenen Order auszulesen sollte ja eigentlich möglich sein.
Auch wenn der SL natürlich immer wieder nach gezogen wird, kann man immer noch
Code:
OrderOpenPrice() +||- (Je nach Richtung halt) OrderStopLoss()
rechnen.
Code:
input bool Trailing_Stop=false;
extern int Trailing_Stop_Step=35;.
Prüfung der MagicNumber rauslassen, dann müsste für alle Buy / Sell-Orders, die offen sind, der SL nach gezogen werden.
Code:
if(Trailing_Stop==true){
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(int j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Neuer SELL-"SL" (S_TS) Funktionen/Berechnungen
if(OrderMagicNumber()==MN_Sel){
// gesendeter SELL_SL - Öffnungskurs, um double-Wert zu ermitteln, der zum BID dazu gerechnet wurde:
double OSLS_OOPS = OrderStopLoss() - OrderOpenPrice();
// Bid + SELL-SL double-Wert = neuer SELL-"SL", der bei OrderModify gesendet werden soll
double TS_Sel = Bid + OSLS_OOPS;
double TSS_TSS=NormalizeDouble( TS_Sel + Trailing_Stop_Step *_Point,_Digits);
if(OrderStopLoss() > TSS_TSS){
if(IsTradeAllowed()==true)OrderModify(OrderTicket(),OrderOpenPrice(),TS_Sel,OrderTakeProfit(),NULL,Blue);
if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderMagicNumber()==MN_Buy){
// BUY-Öffnungskurs - gesendeten BUY-SL, um Wert zu ermitteln, der vom Ask abgezogen wurde:
double OOPB_OSLB = OrderOpenPrice() - OrderStopLoss();
// Ask - BUY_SL double-Wert = neuer BUY-"SL", der bei OrderModify gesendet werden soll:
double TS_Buy = Ask - OOPB_OSLB;
// neuer BUY_"SL" - Trailing_Stop_Step.
// Damit soll geprüft werden, ob BUY_"SL" (B_TS) nach gezogen werden muss.
double TSB_TSS = NormalizeDouble( TS_Buy - Trailing_Stop_Step *_Point,_Digits);
// Wenn aktueller BUY_SL kleiner als
// neuer BUY_SL - TSS ist, soll neuer BUY_"SL" (BUY_TS) gesendet werden:
if( OrderStopLoss() < TSB_TSS ){
if(IsTradeAllowed()==true)OrderModify(OrderTicket(),OrderOpenPrice(),TS_Buy,OrderTakeProfit(),NULL,Blue);
if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}
} } } }