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);}} }}}