Здравствуйте, дорогие друзья.
Для рынка Forex характерен возврат к средним значениям - такова его специфика. У метода мартингейла и сеток есть много сторонников и противников. Кто-то успешно зарабатывает сеточными стратегиями и советниками, а кто-то теряет депозиты. Но при грамотном подходе, правильной разработке сетов и вдумчивом тестировании из сетки можно создать приличный метод заработка.
Пользоваться чужими ботами, разумеется, можно - их в Сети очень много. Но зачем пользоваться чужим и непонятно как сделанным, если можно написать свой собственный советник, в котором все работает так, как вам надо?
В этой серии уроков мы начнем писать свой собственный сеточный советник. Взяв за основу этот алгоритм, вы сможете доработать его под свои нужды и зарабатывать в автоматическом режиме. Исходный код будет выложен в последнем уроке.
Предполагается, что читатель знаком с основами языка MQL4. Выучить язык можно по учебнику, а варианты готовых программ найти у нас.
Создаем основу советника
Откройте редактор Metaeditor и нажмите Создать -> Советник -> Далее:
Введите имя советника с расширением .mq4. Можно добавить отдельный каталог для его хранения - пригодится, если в будущем будете добавлять файлы библиотек с исходным кодом:
Нажмите Далее -> Далее -> Готово. Откроется файл с заготовкой кода, в котором много лишнего. Для порядка можно удалить все комментарии и расставить скобки в определенном стиле. Мы выбрали стиль Java для фигурных скобок и snake_case для переменных. Стиль очень важен, поскольку правильно написанный код легче читать и отлаживать. Выберите тот, который ближе вам - почитать об этом можно на просторах Интернета.
Заготовка советника состоит, таким образом, всего из 25 строк кода: справочной информации и трех основных функций-событий:
- OnInit()
- OnDeinit()
- OnTick()
OnInit() выполняется однократно при старте советника. Если она возвращает константу INIT_SUCCEEDED, то советник начинает свою работу. В случае возникновения критических ошибок нужно прописать INIT_FAILED или INIT_PARAMETERS_INCORRECT.
OnDeinit() выполняется однократно при выгрузке советника с графика. Она не возвращает никакого значения, но принимает код причины, анализируя который можно предпринять соответствующие действия. Эта функция часто используется для удаления графических объектов с чарта.
OnTick() - самая главная функция в советнике. Она выполняется каждый раз, когда приходит новый тик (изменение котировок по финансовому инструменту). Она не принимает параметров и не возвращает значение. Работать мы будем в основном с этой функцией.
Попробуем скопилировать пустой пример клавишей F7. Это советник-лентяй, который ничего не делает :) Его можно уже повесить на график и посмотреть-полюбоваться :)
В этом примере мы будем делать советник в одном файле, но по-хорошему нужно проектировать модульно и разбивать код на функции и классы, а функции и классы выделять в библиотеки. Для простоты понимания пока оставим в одном файле - на работу советника это не повлияет.
Создание окна настроек
Начнем проектирование с интерфейса настроек. Это просто список переменных, предваряемых ключевым словом extern или input. Extern - это слово для MT4, а input - из МТ5, которые было добавлено в МТ4 позже. Следуя моде, заданной разработчиками торговой платформы MetaQuotes и языка MQL (переход на MQL5), мы будем использовать более современный вариант.
Итак, после директив property создадим несколько переменных, которые нам понадобятся в процессе работы алгоритма:
Это простой советник, поэтому настроек немного.
- max_spread. Мы будем проверять спред по паре и открывать/закрывать ордера только тогда, когда он ниже указанного в настройках.
- magic. Каждому ордеру советника будет присваиваться магический номер (у ордеров, открытых вручную, он равен 0). Это поможет отличить ордера от других советников и даже от копий нашего советника, размещенного на соседних графиках.
- slippage. Это проскальзывание. Этот параметр будет равен 3 пункта и изменяться советником не будет.
- lot. Стартовый лот для построения сетки.
- take_profit. Тейк-профит сетки.
- stop_loss. Стоп-лосс сетки в валюте.
- max_orders. Максимальное число колен сетки.
- grid_step. Шаг между коленями сетки в пипсах (4-значные пункты).
- grid_factor. Множитель лота для следующего колена сетки.
- rsi_period. Период индикатора RSI.
- rsi_high. Верхнее значение индикатора RSI.
- rsi_low. Нижнее значение индикатора RSI.
Давайте посмотрим, как выглядят наши новые настройки в терминале. Скомпилируйте советник и запустите на графике, после чего откройте вкладку Входные параметры:
Во второй части статьи мы продолжим разработку и заполним функции OnInit() и OnTick() логикой.
Спасибо за внимание!
---------------------------------------------------------------
Не хочешь сам делать советник, а заработать хочется? Можно купить готовый грааль вот тут.
---------------------------------------------------------------
Платные уроки по программированию на MQL4 и MQL5 - обращайтесь в лс. Автор имеет многолетний опыт разработки советников.