Построение обычных программ
Как правило, после самостоятельного программирования нескольких простых
прикладных программ на 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().