Советник FOREX: от идеи до результата — Страница 4 — Тирметод

Input переменные и функции MQL4

В этом разделе курса мы составим список дел вспомогательных действий для торгового робота.

Техническое задание

Напишем техническое задание правильно, от этого зависит точность кода программиста. Да-да, помните: «Солнце, как в цирке, лучами играло»?

Вход в сделку осуществляется в сторону закрытой дневной свечи: при бычьей – на покупку, при медвежьей – на продажу. Фиксированные тейк-профит и стоп-лосс: 25-30 пунктов для 4х-значных котировок. Если сделка закрывается с убытком, то переворачиваем позицию и увеличиваем размер ставки столько раз, пока депозит ни закончится сделка ни закроется с прибылью. Когда сделка закрывается с прибылью, тогда ждём начала новой дневной свечи и соответствующего сигнала, чтобы открыть сделку с начальным размером ставки.

Прочтём описание стратегии ещё раз и выделим 2 главных момента:

  • входные параметры
  • пользовательские функции

Входные параметры глазами заказчика

  • размер тейк-профита
  • размер стоп-лосса
  • множитель увеличения лота
  • начальный размер лота

Функции глазами заказчика

  • функция «вход в сделку»
  • функция «направление закрытия дня»
  • функция «сигнал на продажу»
  • функция «сигнал на покупку»
  • функция «определение начало дня»

Входные параметры глазами разработчика

  • фиксированный размер профита в пунктах, целая величина (int), по умолчанию: 250 (для 3-х, 5-значных котировок)
  • фиксированный размер убытка в пунктах, целая величина (int), по умолчанию: 250 (для 3-х, 5-значных котировок)
  • множитель увеличения лота, дробная величина (double), по умолчанию: 0.01
  • начальный размер лота , дробная величина (double), по умолчанию: 2.0
  • фиксированный размер проскальзывания в пунктах, целая величина (int), по умолчанию: 10 (для 3-х, 5-значных котировок)
  • переключатель «не в сторону закрытой дневной свечи», булевой элемент (bool), по умолчанию: false (хоть заказчик этого и не просил, но мы сделаем возможность для реверс-сигналов)
  • рабочий таймфрейм, уникальный идентификатор (ENUM_TIMEFRAMES), по умолчанию: 15

Функции глазами разработчика

  • функция, определяющая тренд (по дневным свечам)
  • функция, идентифицирующая открытые ордера (по рынку)
  • функция, идентифицирующая закрытые ордера (в истории)
  • функция, возвращающая размер профита последнего закрытого ордера (в истории)
  • функция, возвращающая дату последнего закрытого ордера (в истории)
  • функция, возвращающая размер лота последнего закрытого ордера (в истории)
  • функция, возвращающая тип последнего закрытого ордера (в истории)
  • функция, открывающая сделки
  • функция, прописывающая алгоритм торговой стратегии

Как видим, у заказчика и разработчика разные взгляды на одни и те же вещи.

Input переменные

Давайте впишем в код указания для входных параметров.

Input переменные определяют входные параметры программы, они доступны из окна свойств программы.

Функции MQL4

В нашем курсе уже не в первый раз упоминаем о важности функций для написания кода советника.

Сегодня составим список достаточных функций на языке MQL4, необходимых для решения промежуточных задач в помощь программисту.

Определение функции

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

заголовок_функции
  {
   инструкции
  }

Всё, что находится перед первой фигурной скобкой, составляет заголовок определения функции, а то, что находится между фигурными скобками, является телом определения функции.

Избранный список функций MQL4

Отсортируем функции по разделам.

Доступ к таймсериям и индикаторам
  • iBars() — возвращает количество баров в истории по соответствующему символу и периоду
  • iClose() — возвращает значение цены закрытия бара соответствующего графика
  • iOpen() — возвращает значение цены открытия бара соответствующего графика
  • iTime() — возвращает значение времени открытия бара соответствующего графика
  • iVolume() — возвращает значение тикового объема бара соответствующего графика
Общие функции
  • Alert() — выводит сообщение в отдельном окне
  • Print() — выводит сообщение в журнал
Преобразование данных
  • NormalizeDouble() — округление числа с плавающей точкой до указанной точности
  • TimeToString() — преобразование значения, содержащего время в секундах, прошедшее с 01.01.1970, в строку формата «yyyy.mm.dd hh:mi»
Проверка состояния
  • GetLastError() — возвращает значение последней ошибки
  • IsTradeAllowed() — возвращает информацию о возможности торговли при помощи экспертов
  • Symbol() — возвращает имя символа текущего графика
Торговые функции
  • OrderCloseTime() — возвращает время закрытия выбранного ордера
  • OrderLots() — возвращает количество лотов выбранного ордера
  • OrderMagicNumber() — возвращает идентификационное («магическое») число выбранного ордера
  • OrderProfit() — возвращает значение чистой прибыли выбранного ордера
  • OrderSelect() — выбирает ордер для дальнейшей работы с ним
  • OrderSend() — основная функция, используемая для совершения торговых операций или установки отложенного ордера
  • OrdersHistoryTotal() — возвращает количество закрытых и удалённых ордеров в истории текущего счёта, загруженной в клиентском терминале
  • OrdersTotal() — возвращает общее количество открытых и отложенных ордеров
  • OrderSymbol() — возвращает наименование финансового инструмента текущего выбранного ордера
  • OrderType() — возвращает тип операции текущего выбранного ордера

В следующий раз мы рассмотрим применение функций в подробностях.

{Продолжение следует}