|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Trailing Stop
Hallo.
Seit etlichen Stunden versuche ich einen Trailing Stop hin zu bekommen. Er soll alle 7 Pips den SL hinter ASK/BID herziehen. Einfacher SL und TP funktionieren einwandfrei. Ich hab alles Mögliche probiert und gedreht und studiert und getestet und mir das Hirn zerbrochen. Aber er wird einfach nicht hinter her gezogen. Fehlermeldungen oder sowas kommen auch nicht. Code:
extern string TS="Trailing Stop"; extern bool Trailing_Stop=true;// extern int Trailing_Stop_Step=7;//Bei ActivTrades müssen SL/TP anscheinend mindestens 5 sein Code:
double M_CA=MarketInfo(Symbol(),MODE_ASK); double M_CB=MarketInfo(Symbol(),MODE_BID); Code:
if(Trailing_Stop==true){ double M_CB_SL_TSS=NormalizeDouble(M_CB-Stoploss-Trailing_Stop_Step*_Point,_Digits);//M_CA = Mode Current Ask double M_CA_SL_TSS=NormalizeDouble(M_CA+Stoploss+Trailing_Stop_Step*_Point,_Digits);//M_CB = Mode Current Bid double B_TS=NormalizeDouble(M_CB-Stoploss*_Point,_Digits); double S_TS=NormalizeDouble(M_CA+Stoploss*_Point,_Digits); } Code:
//Modify Orders (Trailing Stop nach ziehen) if(Trailing_Stop==true){ for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_TICKET)){ if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MagicNumber&&OrderSymbol()==Symbol()){//modify Buy if(OrderStopLoss()<M_CB_SL_TSS)OrderModify(OrderTicket(),OrderOpenPrice(),B_TS,OrderTakeProfit(),0,LawnGreen);}// ? if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MagicNumber&&OrderSymbol()==Symbol()){//modify Sell if(OrderStopLoss()>M_CA_SL_TSS)OrderModify(OrderTicket(),OrderOpenPrice(),S_TS,OrderTakeProfit(),0,Gold);}}}}// ? |
|
|||
Benutzt hier Niemand nen Trailing Stop?
Er wird nie hinterher gezogen und ich hab nicht die leisteste Ahnung warum. Anscheinend werden auch keine Orders modifiziert. |
|
|||
Na Du weißt doch, wie man die Fehler eingrenzen kann.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Entweder stimmt die OrderModify Funktion nicht, oder die entsprechenden Bedingungen sind nicht erfüllt. Aber es kommen keine Fehlermeldungen oder Warnungen.
Aber eigentlich ist doch Alles richtig. Hab wirklich keinen Schimmer was nicht stimmt. extern bool Trailing_Stop=true; extern int Trailing_Stop_Step=15; double M_CA=MarketInfo(Symbol(),MODE_ASK); double M_CB=MarketInfo(Symbol(),MODE_BID); if(Trailing_Stop==true){ //Bid - Stoploss = neuer Buy "SL", der bei OrderModify gesendet werden soll double B_TS=NormalizeDouble(M_CB-Stoploss*_Point,_Digits); //Ask + Stoploss = neuer Sell "SL", der bei OrderModify gesendet werden soll double S_TS=NormalizeDouble(M_CA+Stoploss*_Point,_Digits) ; //neuer Buy "SL" - Trailing Stop Step. //Wenn alter Buy SL kleiner ist, soll neuer Buy "SL" (B_TS) gesendet werden. double B_TS_TSS=NormalizeDouble(B_TS-Trailing_Stop_Step*_Point,_Digits); //neuer Sell "SL" - Trailing Stop Step. //Wenn alter Sell SL kleiner ist, soll neuer Sell "SL" (B_TS) gesendet werden. double S_TS_TSS=NormalizeDouble(S_TS+Trailing_Stop_Step*_ Point,_Digits); } if(Trailing_Stop==true){ for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_TICKET)){ if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_Ma gicNumber&&OrderSymbol()==Symbol()){//modify Buy if(NormalizeDouble(OrderStopLoss()<B_TS_TSS*_Point ,_Digits)){ OrderModify(OrderTicket(),OrderOpenPrice(),B_TS,Or derTakeProfit(),0,LawnGreen);}} if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_ MagicNumber&&OrderSymbol()==Symbol()){//modify Sell if(NormalizeDouble(OrderStopLoss()>S_TS_TSS*_Point ,_Digits)){ OrderModify(OrderTicket(),OrderOpenPrice(),S_TS,Or derTakeProfit(),0,Gold);}}}}} Edit:Kam nen paar Mal die Meldung "Trade Context is busy" oder so. Aber normaler SL und TP werden ja richtig gesetzt... Geändert von MA-EA (27.06.18 um 22:54 Uhr) |
|
|||
Tja, was soll ich bei solch gravierenden Fehlern noch schreiben?
Sorry, aber da fällt mir wirklich nichts mehr zu ein, wenn Du hier große EAs schreiben willst: for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_TICKET)){ ist denn i die Ticketnummer? traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
So wird der TS auch nie nach gezogen:
for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ Liegts vielleicht daran, dass ein Buy und ein Sell geöffnet werden? Und diese Schleifen hab ich nie kapiert. Edit:Fehler gibts keine, ausser bei EURNZD "invalid SL or TP" |
|
|||
Hallo MA-EA (Elite Mitglied),
du hast das scheinbar nicht verstanden, das traderdoc vorhin geschrieben hat. Du musst SELECT_BY_POS verwenden! https://docs.mql4.com/trading/orderselect ---Leopold--- |
|
|||
select_by_pos wenn mit ner Schleife gearbeitet werden soll. Soweit ich das kapiert hab.
Aber wie muss es aussehn mit select_by_ticket ? Ich kapier überhaupt nix mehr. |
|
|||
Hallo,
da du das in einer Schleife mit dem Zähler i hast: if(OrderSelect(i, SELECT_BY_POS)) .... wenn du mit der Ticketnummer arbeiten willst benötigst du diese Schleife nicht, musst aber die Ticketnummer wissen. bitte schau dir die Doku an! ---Leopold--- |
|
|||
@MA-EA, ich glaube fest, dass Du deshalb nix mehr kapierst, wie Du es selber geschrieben hast, weil Dir einfach die Grundlagen fehlen. Denn diese Grundlagen sind überall nachlesbar und müssen einfach sitzen, sonst fragst Du Dir hier den Wolf. Ein Beispiel war der damalige Thread mit dem CCI.
Also, Hausaufgaben erledigen und erst dann große EAs programmieren. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, programmierung mql4, trailing, trailing stop, trailingstop |
|
|