//+------------------------------------------------------------------+ //| TSL.mql4 | //| OrangeTree(c) | //+------------------------------------------------------------------+ #property copyright "Orangetree" #property link "https://www.mql5.com" #property version "1.00" #property strict input int TSL; // trailing in Point() input int BE =0; // break-even in Point() input double DIV =1; // profit divisor input bool Sound =false; // Trailing Signal input int Magic =-1; // Magic Number //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { /* frequnecy limitation ------------+ static datetime time=0; datetime current_time =TimeCurrent(); if(current_time-time<3) return; time =current_time; */ TS(TSL,DIV,BE,Magic); } //+------------------------------------------------------------------+ void TS(int tsl,double delitel=1,int offset=0,int magic=-1) { if(tsl==0) return; bool ch =0; double profit =0; double sl =0; for(int i =0;i1) continue; if (OrderMagicNumber()!=magic && magic!=-1) continue; if(OrderType()==OP_BUY) { profit =Bid-OrderOpenPrice()-tsl*Point(); if(profit<0) continue; if(delitel==0) {sl =NormalizeDouble(OrderOpenPrice()+offset*Point(),Digits());} else {sl =NormalizeDouble(OrderOpenPrice()+profit/delitel+offset*Point(),Digits());} if(sl>OrderStopLoss()) { ch =OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0); if(ch) { if(Sound) PlaySound("stops.wav"); // one modification in a tick return; } } } if(OrderType()==OP_SELL) { profit =OrderOpenPrice()-Ask-tsl*Point(); if(profit<0) continue; if(delitel==0) {sl =NormalizeDouble(OrderOpenPrice()-offset*Point(),Digits());} else {sl =NormalizeDouble(OrderOpenPrice()-profit/delitel-offset*Point(),Digits());} if(sl