Учимся писать эксперты для MetaTrader. Урок №14
|

Учимся писать эксперты для MetaTrader. Урок №14

Обучение MQL II. Урок №14


   Здравствуйте дорогие читатели. Я получил несколько алгоритмов экспертов, в следующих выпусках я обязательно реализую некоторые из них. В этом же выпуске а бы хотел поговорить о частях исходного кода, которые одинаковы в любых экспертах. Кто-то скажет, что каждый эксперт индивидуален, кто-то, что во всех очень много общего, но точно, что некоторые моменты абсолютно одинаковые. Это проверка свободной маржи, ограничение торговли эксперта по времени (торговые сессии или ограничение по дням недели), трейлингстоп и т.д. Об этих фрагментах кода экспертов и пойдет речь.


   14.1 Ограничение ДЦ


   На работу экспертов у ДЦ ограничений 2, точнее это ограничение не на эксперты конкретно, а вообще на работу через ДЦ.


   1) Ограничение на свободную маржу: If FreeMargin<1000 then Exit;
   2) 10 секундный таймаут, после открытия позиции: If((CurTime-LastTradeTime)<10


   14.2 Возможные проверки


   В начале эксперта можно делать проверку на


   1) Правильное выставление стопов If StopLoss<10*point or StopLoss>100*point then exit;
   2) Проверка количества баров истории (для теста на истории) If Bars<200 then Exit;
   3) Для игры одной позицией можно использовать конструкцию вида If TotalTrades<1 then {
   или
   If TotalTrades=1 then exit;
   4) Для запуска трейлинга If TrailingStop>0 then {


   14.3 Проверки и ограничения по времени


   Иногда возникает потребность протестировать эксперт на каком-то определенном промежутке истории, условия могут выглядеть следующим образом


   If Year <> 2003 Then Exit; С помощью этого ограничения, тестирование эксперта произойдет только за 2003 год


   If Year >= 2004 And Month > 2 Then Exit; Тестирование эксперта до определенной даты, в данном случае до конца февраля 2004 года.


   Условия на проверки времени внутри дня.


   If Hour < 10 Or Hour > 19 Then Exit; Торговля будет производиться в интервале с 10 до 19 по времени МТ.


   If Minute = 10 Then { Действие будет происходить в 10 минут каждого часа по времени МТ.


   If Seconds = 10 Then { То же, для секунд.


   Так же в МТ можно делать проверки по времени на время суток, для этого существует функция Day of week. Она может принимать значения от 1 до 7, соответственно дням недели, только нумерация начинается с воскресения. Т.е. 1-воскресенье, 2- понедельник и т.д.


   If DayOfWeek = 3 Then Exit; Эксперт не будет работать по вторникам.


   14.4 Трейлингстопы


   Конечно же нет смысла писать новый трейлингстоп для каждого эксперта, его можно вставлять в код эксперта при желании.


   If TrailingStop>0 then {
   for cnt=1 to TotalTrades
   begin
   /* если это длинная позиция? */
   If Ord(cnt,VAL_TYPE)=OP_BUY then /* длинная позиция */
   {
   /* есть ли профит у этой сделки больше чем уровень трейлинг стопа? */
   If (Bid-Ord(cnt,VAL_OPENPRICE))>(TrailingStop*Point) then
   {
   /* позиция имеет прибыль больше чем значение трейлинг стопа тогда проверяем, можно ли поджать стоп? */
   If Ord(cnt,VAL_STOPLOSS)<(Bid-TrailingStop*Point) then
   {
   /* поджимаем стоплосс до Bid-Trailing Stop */
   ModifyOrder(Ord(cnt, VAL_TICKET), Ord(cnt, VAL_OPENPRICE), Bid-TrailingStop*Point, Ord(cnt, VAL_TAKEPROFIT), Red);
   Exit;
   };
   };
   };
   /* это короткая позиция? */
   If Ord(cnt,VAL_TYPE)=OP_SELL then
   {
   /* есть ли профит у этой сделки больше чем уровень трейлинг стопа? */
   If (Ord(cnt,VAL_OPENPRICE)-Ask)>(TrailingStop*Point) then
   {
   /* позиция имеет прибыль больше чем значение трейлинг стопа тогда проверяем, можно ли поджать стоп?*/
   If Ord(cnt,VAL_STOPLOSS)>(Ask+TrailingStop*Point) or Ord(cnt,VAL_STOPLOSS)=0 then
   {
   /* поджимаем стоплосс*/
   ModifyOrder(Ord(cnt, VAL_TICKET), Ord(cnt, VAL_OPENPRICE), Ask+TrailingStop*Point, Ord(cnt, VAL_TAKEPROFIT), Red);
   Exit;
   };
   };
   };
   end;
   };


   Я уверен, что благодаря этим не сложным заготовкам, процесс написания экспертов только улучшиться и немного упроститься.
   В следующем выпуске мы напишем эксперт или индикатор, алгоритм которого покажется мне более интересным.


Компания <Fxtest>
Халхальян Артур
техническая поддержка трейдеров
artur@fxtest.ru