Функция трейлинг-стопа в mql4
Во внешних переменных определяем:
extern int TStopBuy = 50; //Start Trailing
extern int TrailingStep = 10; //Step Trailing
bool TSProfitOnly = true;//
int TStopSell = TStopBuy;//
Сама функция трейлинг-стопа mql:
//+----------------------------------------------------------------------------+
//| Описание : Сопровождение позиций простым тралом |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ( "" - любой символ, |
//| NULL - текущий символ) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
void SimpleTrailing(string sy="", int op=-1, int mn=-1)
{
double po, pp;
int i, k=OrdersTotal();
if(sy=="0")
sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
po=MarketInfo(OrderSymbol(), MODE_POINT);
if(mn<0 || OrderMagicNumber()==mn)
{
if(OrderType()==OP_BUY)
{
pp=MarketInfo(OrderSymbol(), MODE_BID);
if(!TSProfitOnly || pp-OrderOpenPrice()>TStopBuy*po)
{
if(OrderStopLoss()<pp-(TStopBuy+TrailingStep-1)*po)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(pp-TStopBuy*po,_Digits),OrderTakeProfit(),0,clrNONE);
}
}
}
if(OrderType()==OP_SELL)
{
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if(!TSProfitOnly || OrderOpenPrice()-pp>TStopSell*po)
{
if(OrderStopLoss()>pp+(TStopSell+TrailingStep-1)*po || OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(pp+TStopSell*po,_Digits),OrderTakeProfit(),0,clrNONE);
}
}
}
}
}
}
}
}