« Предыдущий пост | На главную страницу | Следующий пост »

Эксперт, торгующий в ночное время: реализация трейлинг стопа

На данный момент я разобрал практически весь код "ночного" эксперта. Мне осталось рассказать лишь о реализации трейлинг-стопа.

Напомню, что Trailing Stop (трейлинг стоп) – это алгоритм управления уровнем Stop Loss ордера. После выставления трейлинг-стопа (например, на Х пипсов) происходит следующее:

  • MetaTrader не предпринимает никаких действий до того момента, пока по открытой позиции не образуется прибыль в Х пипсов. После этого MetaTrader выставляет Stop Loss ордер на расстоянии Х пипсов от текущей цены (в данном случае - на уровне безубыточности).

  • После выполнения первого шага MetaTrader посылает команду на изменение уровня Stop Loss ордера на расстояние Х пипсов от текущей котировки каждый раз, когда расстояние между ней и старым уровнем ордера превысит Х пипсов. В результате этого Stop Loss ордер «подтягивается» к текущей цене.

Реализация трейлинг стопа в эксперте

Вначале мы перебираем открытые позиции и выставленные ордера и ищем позицию, открытую по данному инструменту и чье магическое число равно MyMagicNumber:

    // управление трейлинг стопом
    for (i=0; i<OrdersTotal(); i++)
      {
        if (!OrderSelect(i, SELECT_BY_POS))
          {
           Print("Error ", GetLastError(), ": Start()->OrderSelect(", i, ") [OrderTotal()=", OrdersTotal(),"]");
           continue;
          }
        if (OrderSymbol()!=Symbol()) continue;
        if (OrderMagicNumber()!=MyMagicNumber) continue;
        double diff;
        if (OrderType() == OP_BUY)
          {
            ...
          }           
        if (OrderType() == OP_SELL) 
          {
            ...
          }                    
      }

Далее мы рассчитываем для найденных позиций расстояние между текущей ценой и ценой Stop Loss ордера для этой позиции. Если это расстояние превышает TrailingStop пипсов, то эксперт посылает команду на изменение уровня Stop Loss ордера.

Для открытой позиции на покупку:

        if (OrderType() == OP_BUY)
          {
            diff = Bid-Point*TrailingStop-OrderStopLoss();
            if (diff>0) 
              {
                if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Point*TrailingStop, 0,0)) 
                       Print("Error ", GetLastError(), ": Start()->OrderModify() [trailing stop]");
                else 
                       Print("Trailing stop on #", OrderTicket()," [place stop loss at ",
                               Bid-Point*TrailingStop, "]");
              }
            return(0);
          }           

Для позиции на продажу:

        if (OrderType() == OP_SELL) 
          {
            diff = OrderStopLoss()-Ask-Point*TrailingStop;
            if (diff>0) 
              {
                if (!OrderModify(OrderTicket(), OrderOpenPrice(), Ask+Point*TrailingStop,0,0))
                       Print("Error ", GetLastError(), ": Start()->OrderModify() [trailing stop]");
                else 
                       Print("Trailing stop on #", OrderTicket()," [place stop loss at ", 
                               Ask+Point*TrailingStop, "]");
              }
            return(0);
          }                    
      }

В следующем выпуске я расскажу о сортировке методом пузырька.



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "Эксперт, торгующий в ночное время: реализация трейлинг стопа"

Доброго времени суток всем!
Мое мнение:
Использование Trailing Stop (трейлинг стоп) в таком виде ЖЛОБСТВО :-) и не очень оптимально.
Я использую другой способ. Я ни где не встречал его, поэтому сам называю его ПОДТЯЖКИ.
Может где-то кто-то уже его придумал и как-то называет по другому. Извиняйте!
Он более сложный, но не очень :-)

Кратенько.
При запуске эксперта используются несколько дополнительных параметров.
А именно: 1) Первоначальный StopLoss 2) TrailingStop 3) Собственно Podtyag-ПОДТЯЖКИ 4) И BarLimit-количество баров без движения.

Идею понял. Согласен, что так эксперт будет делать меньше запросов на сервер и меньше будет тревожить дилеров или сервер.

Если Ваш код не составляет коммерческой тайны, может быть Вы его тут выложите?

Нет никокой коммерческой тайны:-) Там все просто.
Неудобно только в формате аля форума это делать.
Попробую небольшими кусочками.

extern int TakeProfit=240;
extern int StopLoss=42;
extern int TrailingStop=24;
extern int TrailingPodtyag=16;

это описание некоторых переменных, с оптимальными(IMHO) параметрами для EUR/JPY H4
Параметры средние- дают хороший результат на тестах за последние два года. Но еще лучше расчитывать их на каждый день исходя из уровней поддержки и сопротивления.
Не все так просто....

А вот собственно та часть кода, которая отвечает за сопровождение позиции.

for(cnt=0;cnt<OrdersTotal();cnt++)
{
   OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
   if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
   {
     if(OrderType()==OP_BUY)
     {	          
       if(TrailingStop>0)
       {
         if(Bid-OrderOpenPrice()>Point*(TrailingStop+TrailingPodtyag))
         {
           if(OrderStopLoss()<Bid-Point*(TrailingStop+TrailingPodtyag))
           {
             OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
                    OrderTakeProfit(),0,Green);
             return(0);
           }
         }
       }	             
     }
	  else
     {                
       if(TrailingStop>0)
       {
         if((OrderOpenPrice()-Ask)>(Point*(TrailingStop+TrailingPodtyag)))
         {
           if((OrderStopLoss()>Ask+Point*(TrailingStop+TrailingPodtyag))||
                (OrderStopLoss()==0))
             {
               OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
                        OrderTakeProfit(),0,Red);
               return(0);
             }
         }
       }
     }
   }
}

Есть еще один кусочек кода, который особым образом устанавливает
TP( чуть внутри флэтового канала) и SL (чуть снаружи)
если инструмент после тренда перешел во флэт(более трех баров ПОДТЯЖКИ не двигались) и индикаторы "кричат" о наступлении неопределенности или возможном развороте.
Но он сильно усложняет и может запутать, т.к. для него нужно выполнить много дополнительных расчетов на младших временных периодах.

Вопрос! Зачем я всем этим делюсь? Ведь я понимаю, что такой вариант сопровождения хоть и лучше обычного трейлинга, но тоже далеко не совершенен. Я думаю забросить его (использую все реже и реже)написать что-нибудь
более совершенное.
Для реализации SL по теории BW вообще нужен специальный алгоритм, что-то среднее между трейлингом, стопом-скольжением по линиям баланса, может быть ПОДТЯЖКАМИ и др.

Спасибо!

Подписаться на мою рассылку



Размещение статьи "Эксперт, торгующий в ночное время: реализация трейлинг стопа" на Вашем сайте

Размещение статьи "Эксперт, торгующий в ночное время: реализация трейлинг стопа" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Эксперт, торгующий в ночное время: реализация трейлинг стопа" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04