Попробуйте вставить в эксперт вот этот. Проверен временем и реалом!
//---- input parameters--------- extern int Magic=8976; extern bool UseTrailing = true;//Выключатель трейлинг стопа extern string _____= "Параметры трала Длинных позиций"; extern int lMinProfit = 35;//порог включения трейлин стопа extern int lTrailingStop = 35;// величина трейлинг стопа extern int lTrailingStep = 5; // шаг трейлинг стопа extern string ____= "Параметры трала Коротких позиций"; extern int sMinProfit = 35;//порог включения трейлин стопа extern int sTrailingStop = 35;// величина трейлинг стопа extern int sTrailingStep = 5;// шаг трейлинг стопа //---------------------------------------------------------------- int start() { if (UseTrailing) TrailPositions(); // задаем работу(выключатель) трейлинг стопа .... ... .... ....
//ВНЕ ФУНКЦИИ int start() располагаем : //-------------------------------------------------------------------------------+ void TrailPositions() // трейлинг стоп { int Orders = OrdersTotal(); for (int i=0; i<Orders; i++) { if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == OP_BUY && OrderMagicNumber()==Magic) { if (Bid-OrderOpenPrice() > lMinProfit*Point) { if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}} if (OrderType() == OP_SELL && OrderMagicNumber()==Magic) { if (OrderOpenPrice()-Ask > sMinProfit*Point) { if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}}}} //-----------------------------------------------------------------------
Вот алгоритм трейлинг-стопа открытой позиции:
if (OrderType()==OP_SELL)
{
if (TrailingStop>0)
{
if (OrderOpenPrice()-Ask>(TrailingStop+Pips)*Point)
{
if (OrderStopLoss()>(Ask+Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,800);
return(0);
}
}
}
}
if (OrderType()==OP_BUY)
{
if (TrailingStop>0)
{
if (Bid-OrderOpenPrice()>(TrailingStop+Pips)*Point)
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderClosePrice()+TakeProfit*Point+TrailingStop*Point,800);
return(0);
}
}
}
}
Так вот, вверх трейлится (если бай), а вниз нет (если селл)...
Ошибок вроде тоже не выдаёт...
Вот так по идее должно быть
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот алгоритм трейлинг-стопа открытой позиции:
if (OrderType()==OP_SELL)
{
if (TrailingStop>0)
{
if (OrderOpenPrice()-Ask<=(TrailingStop+Pips)*Point)
{
if (OrderStopLoss()>(Ask+Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,800);
return(0);
}
}
}
}
if (OrderType()==OP_BUY)
{
if (TrailingStop>0)
{
if (Bid-OrderOpenPrice()>=(TrailingStop+Pips)*Point)
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderClosePrice()+TakeProfit*Point+TrailingStop*Point,800);
return(0);
}
}
}
}
Так вот, вверх трейлится (если бай), а вниз нет (если селл)...
Ошибок вроде тоже не выдаёт...