Русский

Учебник по MQL4  Создание обычной программы

Построение обычных программ


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

1. Функциональная ограниченность простых программ не позволяет в полной мере обеспечить трейдера необходимой информацией и средствами управления торговлей, что делает их применение недостаточно эффективным.

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

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

  • Структура обычной программы
    Наличие множества пользовательских функций в программе позволяет создавать мощные и гибкие алгоритмы обработки информации. Директива компилятору #include позволяет однажды написанную и отлаженную функцию использовать и в других программах. Таким образом можно создавать свои собственные библиотеки или пользоваться открытыми разработками других программистов.
  • Учёт ордеров
    Рассматривается пример пользовательской функции Terminal(), которая реализована в отдельном включаемом файле с расширением mqh. Такие файлы подключаются к коду программы на этапе компиляции с помощью директивы #include.
  • Информационная функция
    Пример еще одной пользовательской функции, которая помогает организовать вывод текстовой информации о текущей работе эксперта. Эта функция позволяет отказаться от функции Comment() для вывода текста в главное окно графика, и реализована как индикатор в отдельном подокне ценового графика.
  • Функция слежения за событиями
    Не всегда трейдер может заметить все события самостоятельно. Программа на MQL4 позволит обнаруживать изменения любых торговых условий или ситуаций. Пользовательская функция Events() подключается к эксперту с помощью директивы #include, и использует вызовы другой подключаемой функции Inform().
  • Функция определения количества лотов
    Расчет объема открываемой позиции является одной из задач управления капиталом и рисками. Пользовательская функция Lot() является небольшим примером для этих целей.
  • Функция определения торговых критериев
    Самая важная часть любой торговой стратегии - определение моментов входа в позицию и выхода из нее. Создание торговых правил или критериев является ядром любого экперта. Пользовательская функция Criterion() подключается с помощью директивы #include. В ней показано, как на основании значений индикаторов эксперт может принимать решение о соответствии текущей ситуации тому или иному критерию.
  • Торговые функции
    Текущая ситуация проанализирована функцией Criterion(), и теперь необходимо произвести торговые операции: открытие, закрытие, модификацию или удаление отложенного ордера. Все эти операции можно вынести в отдельные пользовательские функции Trade(), Close_All() и Open_Ord(). Подтягивание защитных стопов производится еще одной пользовательской функцией Tral_Stop().
  • Функция обработки ошибок
    Контроль ошибок является неотъемлемой частью любого эксперта. Вы сами определяете, каким образом обрабатывается сообщение о занятом торговом потоке, отсутствии цен по запрашиваемому инструменту и так далее. В одних случаях достаточно вывести сообщение о полученной ошибке, в других стоит попытаться повторить торговый приказ через некоторое время. Необходимо определить, как будет обрабатываться та или иная ошибка. В пользовательской функции Errors() показана обработка ошибок с помощью оператора выбора switch().