Немного расширенный trailing-stop

 
До недавного времени пользовался обычным перенесением в безубыток. Подскажите, есть ли советник, который может после достижения определённого профита закрыть половину лота (разумеется лот предполагается делящимся на 2), а остальное - в безубыток???
 
CanisLC >>:
До недавного времени пользовался обычным перенесением в безубыток. Подскажите, есть ли советник, который может после достижения определённого профита закрыть половину лота (разумеется лот предполагается делящимся на 2), а остальное - в безубыток???

Библиотека функций и советники для трейлинга / Юрий Дзюбан

 
Блин, готовые функции это конечно хорошо. Но вот если бы готовый эксперт. Я нифига особо не понимаю пока этот MQL.
 
CanisLC:
До недавного времени пользовался обычным перенесением в безубыток. Подскажите, есть ли советник, который может после достижения определённого профита закрыть половину лота (разумеется лот предполагается делящимся на 2), а остальное - в безубыток???
могу сделать, но за деньги
 

Не, там такого нет. Фактически нужен тот же  e-MovingInWL от KimIV, но только чтобы от не всё переносил на установленный уровень, а только 1/2 лота, другую 1/2 закрывал.
 
CanisLC:
До недавного времени пользовался обычным перенесением в безубыток. Подскажите, есть ли советник, который может после достижения определённого профита закрыть половину лота (разумеется лот предполагается делящимся на 2), а остальное - в безубыток???

Этот кусок кода как раз делает, то что вам нужно... при достижении определенного профата (к примеру 15 пунктов) передвигает стоп в безубыток и закрывает половину объема сделки. Если цена продолжает двигаться в направлении сделки, то еще через 15 пунктов передвигает стоп и закрывает половину половины объема и т.д. пока не сработает СЛ или не закончатся лоты.

////////////////Трейлинг (tr=уровень трейлинга в пунктах, ml=минимальный лот)
void tral (int tr,double ml,int mn)
{
int cnt;
int k;
int x;
datetime last_time;
double close_lot;
for (cnt=0;cnt<OrdersTotal();cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS);
   if (OrderMagicNumber()!=mn) continue;
   close_lot=NormalizeDouble(OrderLots()/2,2);
   if (close_lot<ml) close_lot=ml;
   if (OrderType()==OP_BUY)
      {
      if (OrderStopLoss()==0||OrderStopLoss()<OrderOpenPrice())
         {
         if (MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice()>=tr*MarketInfo(OrderSymbol(),MODE_POINT))
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID)-tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),10000);
            }
         }
      else
         {
         if (MarketInfo(OrderSymbol(),MODE_BID)-OrderStopLoss()>=tr*MarketInfo(OrderSymbol(),MODE_POINT)*2)
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID)-tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),10000);
            }
         }
      }
   if (OrderType()==OP_SELL)
      {
      if (OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())
         {
         if (OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK)>=tr*MarketInfo(OrderSymbol(),MODE_POINT))
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK)+tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),10000);
            }
         }
      else
         {
         if (OrderStopLoss()-MarketInfo(OrderSymbol(),MODE_ASK)>=tr*MarketInfo(OrderSymbol(),MODE_POINT)*2)
            {
            Print("Двигаем стоп и закрываем половину ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK)+tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),10000);
            }
         }
      }
   
   
   } 
}
 

Ну этот код только для тестера хорош

 
Diamant:

Ну этот код только для тестера хорош

В каком смысле? Неужели нет нормально работающего советника?
Причина обращения: