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

Эксперт, торгующий в ночное время: функция start()

В этом выпуске я расскажу о том, как работает функция start() "ночного" эксперта, который был описан в прошлых выпусках.

В начале мы присваиваем значения текущего времени, текущего часа и текущей минуты локальным переменным c_time, c_hour и c_minute соответственно:

    datetime c_time = TimeCurrent();
    int c_hour = TimeHour(c_time);
    int c_minute = TimeMinute(c_time);

Далее мы проверяем, не пора ли нам выставлять отложенные ордера:

    // Проверим, не пора ли нам выставлять отложенные ордера
    if (TimeDay(c_time)!=TimeDay(LastTradeTime)) 
      {
       if ((c_hour>StartHour)||((c_hour==StartHour)&&(c_minute>=StartMinute)))
         {
          ...
         }
      }

Если же ордера действительно уже пора выставлять, то мы выставляем вначале Buy Limit ордер. Если это действие завершилось неудачно, то выходим.

Если же Buy Limit ордер выставлен без проблем, то пытаемся разместить Sell Limit. В случае возникновения ошибки пытаемся удалить Buy Limit и выходим.

Если же отложенные ордера выставлять не надо, то проверим, не сработал ли отложенный ордер и не нужно ли нам удалить второй ордер:

    // если один отложенный ордер сработал, то удалим второй
    t = -1;
    for (i=0; iOrderSelect(", i, ") [OrderTotal()=", OrdersTotal(),"]");
           continue;
          }
        if (OrderSymbol()!=Symbol()) continue;
        if (OrderMagicNumber()!=MyMagicNumber) continue;
        if ((OrderType() == OP_BUYLIMIT)||(OrderType() == OP_SELLLIMIT))
          {
            if (t!=-1) 
              {
                t = -1;
                break;
              }
            else 
              {
               t = OrderTicket();
              }
          }
      }
    if (t!=-1) 
      {
        if (OrderDelete(t)) Print("Pending order #", t, " has been deleted [OCO]");
        else Print("Error ", GetLastError(), ": Start()->OrderDelete() [OCO]");
      }  

Принцип работы этого куска кода очень простой - присваиваем переменной t начальное значение, равное -1. Далее перебираем открытые позиции и выставленные ордера в поисках всех отложенных ордеров по этой валютной паре с магическим числом MyMagicNumber. Каждый раз, когда мы находим такой отложенный ордер, мы меняем значение переменной t такой логике:

  • Если t<0, то присвоим переменной значение тикера найденного отложенного ордера.
  • Если t>0, то она уже содержит тикер предыдущего найденного отложенного ордера и поэтому присвоим ей значение -1.

Если в результате после окончания перебора значение переменной t будет равно -1, то либо не найдено вообще ни одного интересующего нас отложенного ордера, или же найдено оба. В этом случае ничего делать не надо.

Если же t>0, то найден только один отложенный ордер, поэтому мы делаем вывод, что второй ордер сработал и нам надо удалить найденный ордер, тикер которого мы записали в переменную t. Что мы в общем-то и делаем.

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





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

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

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

Уважаемый Андрей!
Что означает Slippage=3 в ночном эксперте

Это означает, что если в момент совершения торговой операции цена на сервере изменилась против Вас не более, чем на три пипса, то сделка все равно будет совершена по текущей цене.

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



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

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

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

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

Журнал FOREX MAGAZINE:



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

Счетчики:

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

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

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


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