|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Teilprofite raussichern und Breakeven setzen,Code fehlerfrei aber wird nicht umgesetz
Hey Leute,
ich brauche zwei Funktionen die ich schon implementiert habe allerdings funktionieren diese nicht ganz .. Diese zwei Funktionen wären einmal Breakeven setzen, wenn der Trade aktuell 10 Pips/Punkte im Profit ist: Code:
bool bResult = false; for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY && (OrderOpenPrice() > OrderStopLoss()) && (((Bid - OrderOpenPrice()) >= 10))) { bResult = OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(), OrderTakeProfit(), 0); } if(OrderType() == OP_SELL && (OrderOpenPrice() < OrderStopLoss()) && (((OrderOpenPrice() - Ask) >= 10))){ bResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); } } } Code:
bool bClose = false; if(OrderType() == OP_BUY && (Bid - OrderOpenPrice()) >= 100.00) { bClose = OrderClose(OrderTicket(),OrderLots() / 2, OrderClosePrice(),3, Green); } if(OrderType() == OP_SELL && (OrderOpenPrice() - Ask) >= 100.00) { bClose = OrderClose(OrderTicket(),OrderLots() / 2, OrderClosePrice(), 3, Green); } Weiß da jemand weiter? ist mit dem Code irgendwas falsch oder so? Hat das was mit der Historiendatenbank zu tun? |
|
|||
Beide Funktionen würden nur korrekt funktionieren, wenn es sich nicht um Währungspaare handelt, denn die Differenz aus
Bid - OrderOpenPrice() >= 10 bzw. Bid - OrderOpenPrice() >= 100.00 wird dann nie >=10 bzw. >=100.00 ergeben können. Bei Währungspaaren müsste dann stehen: 10*_Point bzw. 100*_Point. Und dann hängt es noch davon ab, es ein 4- oder 5-Digit-Broker ist. Sollten reale 10 bzw. 100 Pips gemeint sein, dann müsste beim 5-Digit-Broker nochmals mit 10 multipliziert werden. Ansonsten liegt in der Tat der Verdacht nahe, dass die historischen Daten in die Vergangenheit nicht ausreichen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
So läufts bei mir ganz gut. Mit nen paar Pips Abweichung hier und da...
Code:
//-----------------------------------------------------------------------------------------------------------*/ extern int Stop_Loss=400; //-----------------------------------------------------------------------------------------------------------*/ extern string TS="Trailing Stop"; input bool Trailing_Stop=false; // Zum Testen aus extern int Trailing_Stop_Step=30; // Bei TSS 6 wurden gar keine Orders geöffnet. //-----------------------------------------------------------------------------------------------------------*/ extern int Take_Profit=5000; // Zum Testen 5.000 //------------------------------------------------------------------------------------------------------------- Code:
//============================================================================================================= // S T O P L O S S //============================================================================================================= //SL auf 0 stellen, wenn oben <1, //um irgendwelche Missverständnisse zu vermeiden. if(Stop_Loss<1){ Buy_SL=0.0; Sel_SL=0.0;} else{ Buy_SL=NormalizeDouble(Ask-Stop_Loss*_Point,_Digits); Sel_SL=NormalizeDouble(Bid+Stop_Loss*_Point,_Digits);} //SL genauso groß wie Minstoplevels machen, wenn er kleiner ist: double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL); if(Buy_SL<MSL)Buy_SL=MSL; if(Sel_SL<MSL)Sel_SL=MSL; //============================================================================================================= // T A K E P R O F I T //============================================================================================================= //TP auf 0 stellen, wenn oben <1, //um irgendwelche Missverständnisse zu vermeiden. if(Take_Profit<1){ Buy_TP=0.0; Sel_TP=0.0;} else{ Buy_TP=NormalizeDouble(Ask+Take_Profit*_Point,_Digits); Sel_TP=NormalizeDouble(Bid-Take_Profit*_Point,_Digits);} Code:
//============================================================================================================= // M O D I F Y O R D E R S //============================================================================================================= if(Trailing_Stop==true){ for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ /////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Neuer BUY-"SL" (B_TS) Funktionen/Berechnungen if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){ //BUY-Öffnungskurs - gesendeten BUY-SL, um Wert zu ermitteln, der vom Ask abgezogen wurde: double BOOP_BOSL = OrderOpenPrice() - OrderStopLoss(); //ASK - BUY_SL double-Wert = neuer BUY-"SL", der bei OrderModify gesendet werden soll: double Buy_TS = Ask - BOOP_BOSL; //neuer BUY_"SL" - Trailing_Stop_Step. //Damit soll geprüft werden, ob BUY_"SL" (B_TS) nach gezogen werden muss. double BuyTS_TSS = NormalizeDouble( Buy_TS - Trailing_Stop_Step *_Point,_Digits); //Wenn aktueller/zuletzt gesendeter BUY_SL kleiner als //neuer BUY_SL - TSS ist, soll neuer BUY_"SL" (BUY_TS) gesendet werden: if( OrderStopLoss() < BuyTS_TSS ){ if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Buy_TS,OrderTakeProfit(),0,CLR_NONE);}} ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Neuer SELL-"SL" (S_TS) Funktionen/Berechnungen if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){ //gesendeter SELL_SL - Öffnungskurs, um double-Wert ermitteln, der zum BID dazu gerechnet wurde: double SOSL_SOOP = OrderStopLoss() - OrderOpenPrice(); //BID + SELL-SL double-Wert = neuer SELL-"SL", der bei OrderModify gesendet werden soll double Sel_TS = Bid + SOSL_SOOP; double SelTS_TSS=NormalizeDouble(Sel_TS + Trailing_Stop_Step *_Point,_Digits); if( OrderStopLoss() > SelTS_TSS ){ if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Sel_TS,OrderTakeProfit(),0,CLR_NONE);}} }}} |
Lesezeichen |
Stichworte |
breakeven berechnen, profit auslesen, vollautomatisches handelssystem |
|
|