extern int ATR_TrailingStart = 2;
extern int ATR_Stoploss = 3;
extern int ATR_TakeProfit = 4;
int init(){return(0);}
int deinit(){return(0);}
int start()
{
int i,j,pips;
double SL,TP,TS;
int TrailingStart =ATR_TrailingStart * iATR(Symbol(),0,20,0)/Point;
int Stoploss =ATR_Stoploss * iATR(Symbol(),0,20,0)/Point;
int TakeProfit =ATR_TakeProfit * iATR(Symbol(),0,20,0)/Point;
for (i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()) continue;
//set stoploss & takeprofit
if (OrderType()==OP_BUY) {SL=Bid-Stoploss*Point; TP=Ask+TakeProfit*Point;}
if (OrderType()==OP_SELL){SL=Ask+Stoploss*Point; TP=Bid-TakeProfit*Point;}
if (OrderStopLoss()==0[COLOR="Red"] && Stoploss>0[/COLOR]) OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,CLR_NONE);
if (OrderTakeProfit()==0 [COLOR="red"]&& TakeProfit>0[/COLOR]) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,0,CLR_NONE);
//trailing stop
if (OrderType()==OP_BUY) pips=(Bid-OrderOpenPrice())/Point;
if (OrderType()==OP_SELL)pips=(OrderOpenPrice()-Ask)/Point;
if (pips>TrailingStart [COLOR="red"]&& TrailingStart>0 && Stoploss>0[/COLOR])
{
if (OrderType()==OP_BUY) TS=Bid-(Stoploss*Point);
if (OrderType()==OP_SELL) TS=Ask+(Stoploss*Point);
if ((OrderType()==OP_BUY && (OrderStopLoss()<TS) || OrderStopLoss()==0) ||
(OrderType()==OP_SELL && (OrderStopLoss()>TS) || OrderStopLoss()==0) )
for (j=0;j<10;j++)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),TS,OrderTakeProfit(),0,CLR_NONE))
{
PlaySound("expert.wav");
break;
}
Sleep(50);
}
}
}
return(0);
}