Торговый советник на MQL4: учимся программировать с нуля

Торговый советник на MQL4: учимся программировать с нуля

В этом руководстве по MQL4 вы научитесь программировать свой собственный торговый советник в MetaEditor.

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

  • int – это обычное число. Например: 1, 15, 521.
  • double – число с десятичным знаком. Например: 1,154, 0,0144, 255,145.
  • string – строка, слово, фраза. Например: «Ордер на покупку», «Ордер на продажу успешно размещен».
  • bool – принимает значения либо false, либо true.

Скоро вы увидите, как их можно использовать.

Торговый советник три белых солдата

Для того, чтобы создать свой собственный торговый советник, для начала вы должны переключиться на MetaEditor. Вы смоете сделать это, нажав на иконку MetaEditor. В MetaEditor нажмите «Создать» и выберите «Советник (шаблон)». В следующем окне напишем имя нашего эксперта, нажмем на кнопку «Далее» и добавим первые стандартные переменные, нажав на кнопку «Добавить».

Мы добавим TakeProfit, StopLoss, LotSize, Slippage и MagicNumber. Все они являются типом int, кроме LotSize. LotSize должен иметь тип double.

мой торговый советник

Затем нажимаем «Далее» и «Готово». Мы видим, что MetaEditor сгенерировал файл с вашими предопределенными переменными.

Вы можете увидеть 3 области. Области OnInit(), OnDeinit() и OnTick(). Весь код, который вы пишете, попадает в одну из этих областей.

Код, который мы хотим вызвать, если прикрепим советник к графику, выполняется в области OnInit(). Код в OnDeinit() выполняется, когда мы отсоединяем советник. И, наконец, область, в которой мы будем работать больше всего – область OnTick(). Функция OnTick() вызывается каждый раз, когда мы получаем от брокера новую цену (тик) торгового инструмента, к которому прикреплен советник.

Если вы скомпилируете советника с помощью F7 и вернетесь в Metatrader, вы сможете найти советника в «Навигаторе» MetaTrader (Crtl + N). Если вы попытаетесь присоединить его к графику и перейдете на вкладку «Входные параметры», вы сможете увидеть наши предопределенные переменные.

торговый советник: входные параметры

Мы научимся программировать советника, который торгует по паттерну 3 белых солдата. Это простая стратегия, когда советник открывает сделку на покупку, когда последние 3 свечи были бычьими. Давайте начнем!

Добавим следующие строчки кода:

Для этой стратегии мы используем предопределенную переменную Close[], который является типом double. Close[] дает нам цену закрытия (например, 1.24577) для каждого свечи текущего графика. Close[0] означает текущую цену закрытия. Close[1] – предыдущую цену, и так далее. То же самое справедливо для предопределенных переменных Open[], Low[] и High[].

//Ордер на покупку – это подсказка для нас, что мы создали здесь функцию открытия ордера на покупку. Две обратных черты (//) означают, что эта строка закомментирована. Советник будет игнорировать ее при компиляции.

Если вы поместите курсор на предопределенную функцию или переменную и нажмете F1, откроется справка по MQL4, где вы сможете прочитать, что делает эта данная функция или переменная.

Далее мы используем функцию OrderSend, чтобы отправить ордер на покупку нашему брокеру. Добавим следующий код:

Что из себя представляет функция OrderSend?

  • _Symbol – возвращает текущий торговый инструмент, к которому прикреплен советник.
  • OP_BUY – мы хотим открыть ордер на покупку.
  • LotSize – размер лота, который мы определили в самом начале.
  • Ask – текущая цена Ask, по которой открываются ордера на покупку.
  • Slippage – размер проскальзывания.
  • StopLoss – это наш StopLoss. Или цена Ask за вычетом цены StopLoss. Запомните, что StopLoss – это целое число (500 пунктов), а Ask – это цена (например, 1.20521). Теперь, чтобы вычесть стоп-лосс из цены Ask, мы должны умножить его на 0,00001 или 0,001. Мы делаем это с помощью предопределенной переменной _Point, которая отражает текущие значением пунктов торгового инструмента.
  • TakeProfit – то же самое, как и StopLoss.
  • Комментарий – комментарий, который должен появиться в журнале, когда торговый советник разместит наш ордер.
  • MagicNumer – магическое число, которое было определено нами вначале.
Вам будет интересно  Стратегии торговли на Форекс по индикатору Боллинджера

Нажмите F7, чтобы скомпилировать советник и проверить результат его работы в тестере стратегий. Вы получите что-то вроде этого:

торговый советник открывает ордера на каждом тике

Наш торговый советник выставляет ордера на покупку на каждом тике, если 3 последних бара были бычьими. Это не то что мы хотим, но, по крайней мере, что-то происходит.

Мы должны запрограммировать новую функцию, которая позволит нашему советнику одновременно открывать только одну сделку. MQL4 уже имеет свои предопределенные функции, например, OrderSend(). Но мы также можем написать свою собственную функцию, в которой мы можем вызвать другие пользовательские или предопределенные функции.

Давайте перейдем к концу нашего файла и запрограммируем новую функцию под названием TotalOpenOrders. Эта функция будет иметь тип int. Она будет возвращать количество открытых ордеров.

Затем добавим данную функцию в область OnTick и добавим проверку на количество открытых ордеров. Если общее количество сделок равно 0, наш торговый советник продолжает свою работу с кодом внутри скобок.

торговый советник открывает только один ордер

Что из себя представляет функция TotalOpenOrders?

В этой функции у нас есть счетчик (total_orders), который в конце возвращает общее количество открытых ордеров. Также у нас есть цикл for, который перебирает все открытые ордера. Если советник найдет ордер, соответствующий вашему символу и MagicNumer, счетчик увеличится на 1 (это записывается с помощью ++).

Теперь у нас все еще есть проблема. Если свеча слишком длинная, советник открывает вторую сделку на покупку непосредственно после того, как первая сделка на покупку закрывается с помощью StopLoss или TakeProfit. Мы должны добавить вторую функцию «IsNewBar».

Эта функция будет представлять тип bool. Она вернет true, если в Metatrader сгенерирована новая свеча, иначе она вернет false.

Давайте поместим эту функцию прямо над функцией TotalOpenOrder и вызовем ее в области OnTick вместе с TotalOpenOrders().

4-5 или 2-3 значные котировки

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

Сейчас мы используем предопределенную переменную _Point для преобразования TakeProfit и StopLoss. Но мы хотим создать функцию, которая предоставит нам одинаковое значение для 4 и 5 и соответственно 2-х и 3-х торговых инструментов. Для начала мы создаем глобальные переменные MyPoint и MySlippage. Поместим их прямо под нашими входными параметрами:

Теперь мы создаем функцию, которая сохраняет правильное значение в этих 2 переменных (MyPoint и MySlippage) и помещаем их в наши пользовательские функции:

Мы должны рассчитать эти значения только один раз. Только когда мы прикрепляем наш торговый советник к графику. Поэтому мы вызываем эти функции в разделе OnInit():

Теперь мы можем возвратить наши TakeProfit, StopLoss и Slippage к номальным значениям:

Далее мы заменяем все Slippage и _Point в функциях OnTick нашими 2 новыми глобальными переменными MyPoint и MySlippage. Таким образом, функция OrderSend будут выглядеть следующим образом:

Торговый советник и ECN брокеры

На ECN брокерах мы не можем отправить ордер с TakeProfit или StopLoss. Сначала нам придется отправить наш ордер без них, а затем изменить его.

Сначала мы сохраняем номер тикета из только что открытого ордера в переменной int ticket. Затем мы проверяем, получен ли мы данный ticket от нашего брокера. Далее мы вызываем функцию OrderModify. Функция OrderModify возвращает true или false, которые мы сохраняем в переменной bool res. Мы проверяем результат с помощью if (! Res) (так же, как if (res == false)) и выводим соответствующее сообщение.

Практическое пособие для начинающих трейдеров по оптимизации советников в МТ4. Схемы, правила и закономерности

Как и обещал в прошлой статье, сегодня рассмотрим практическое пособие по оптимизации советников в MetaTrader 4. Или, как выразился один читатель блога — «культуру общения с советниками» -)

Вам будет интересно  Как торговать по Moving Average - простые стратегии для форекс

Если уже работали со стратегиями, то понимаете, что одна и та же стратегия, в разное время и в разные дни, будет отрабатывать совершенно по-разному.

И, как догадываетесь, причина не в стратегии, а в поведение рынка, так как он, в свою очередь, зависит от множества факторов, как например, сессии: количество игроков, новости и пр.

Практическое пособие для начинающих по оптимизации советников в МТ4

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

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

В этой статье вы узнаете о схеме проведения правильной оптимизации, а также на практике увидите, как этот несложный процесс происходит в терминале МТ4.

Пособие по оптимизации советников в MetaTrader 4

Схемы оптимизации советников

Если глубже вникнуть в тему оптимизации советников, то можно увидеть, что применяются всего три схемы, причем о двух из них многие трейдеры даже не догадываются -)

Под терминологией «схемы оптимизации» мы подразумеваем выборку исторических котировок для оптимизации и дальнейшего контроля. Итак, давайте вкратце рассмотрим эти схемы.

1. Оптимизация без форвард теста

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

На практике: трейдер использующий этот подход, проводит оптимизацию советника в МТ4 на прошлом, историческом участке рынка, начиная с определённого дня и по сегодняшний день.

Увидев отличные результаты в тестере, этот трейдер тут же ставит полученные параметры в сет файл. Результат — он попадает в так называемую «ловушку оптимизации», когда параметры по факту, в режиме реального времени, оказываются нерабочими.

2. Оптимизация с форвард тестом

Оптимизация с форвард тестом — это оптимизация параметров эксперта в прошлом, с контролем полученных настроек в будущем.

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

Если кривая доходности на втором участке после оптимизации совпадает с первым оптимизированным участком, настройки сохраняются и применяются на реальном счете.

Метод оптимизации с форвард тестом выдаст более качественные настройки, чем без форвард теста, но все же лучше пойти еще дальше, так как на кону стоит ваш депозит, сами понимаете -)

3. Оптимизация с форвард и бэк тестом

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

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

Сначала советник оптимизируется на среднем (втором), участке. После чего проводится тест на устойчивость полученных настроек на третьем участке (в будущем). Если параметры оптимизации и форвард теста совпадают, советник окончательно оптимизируется контрольным тестом, на первом участке рынка.

Воспользовавшись методом оптимизации советника в МТ4 с форвард тестом и бэк тестом вы получите наиболее устойчивые к рыночным изменениям настройки .

Практика оптимизации советников в МТ4

Прежде чем приступить к оптимизации эксперта необходимо убедится в полноте исторических котировок и если необходимо подгрузить их.

Для этого в верхней строке меню войдите в «Сервис» и выберите «Архив котировок». Затем найдите необходимую валютную пару и загрузите минутные котировки М1, все остальные таймфреймы загрузятся автоматически.

Затем запустите тестер стратегий нажатием на соответственный значок в верхней панели инструментов или нажмите Ctrl+R на клавиатуре.

Вам будет интересно  Метод Пуриа - стратегия форекс-торговли на таймфреймах M30 и H1

Пример будет показываться на скальпинг советнике Romum, который я выкладывал здесь.

После того, как откроется окно тестера, нужно выставить следующие настройки:

  • Слева, под графиком, обратите внимание, чтобы стояло значение «Советник»;
  • Нажав на кнопку выпадающего меню справа, в той же строке, выберите необходимый советник, дважды кликнув на названии;
  • Далее выбираем валютную пару на которой будет работать советник и таймфрейм;
  • Ниже, метод тестирования «Все тики» и спред на выбранной валютной паре. Стоит иметь в виду, что у разных брокеров спреды разные, поэтому для работы рекомендую только брокера Forex4you.
  • Еще ниже, необходимо выставить временной отрезок на котором будет оптимизироваться советник;
  • Визуализацию рекомендую отключить, так как из-за неё процесс оптимизации может значительно затянуться;
  • Обязательно включите «Оптимизацию».

Настройка тестера для оптимизации советников

После такой немудрённой подготовки, зайдите в настройки вашего советника, кликнув на кнопку «Свойства эксперта» и задайте критерии оптимизации.

Во вкладке «Тестирование» выставьте:

  1. Значение своего депозита;
  2. Позиции Long&Short оставьте, ведь наш советник открывает ордера, как в buy, так и в sell;
  3. Ниже, в «Оптимизация» выберите, какой именно параметр будете оптимизировать. Обычно в советнике оптимизируется Profit Factor, то есть количество убыточных сделок по отношению к прибыльным;
  4. Поставьте галочку (если не стоит), в поле «Генетический алгоритм», это также сбережет вам время на оптимизацию.

Далее переходим во вкладку «Входные параметры».

Настройка параметров советника для оптимизации

Здесь всё расписывать смысла нет, так как настройки Romum описаны в статье о нём, а какие параметры советника оптимизировать в первую очередь можете прочитать в прошлой статье.

Можете указать свои значения, а можете загрузить начальный сет, который есть в архиве с советником.

Далее укажите минимальное значение параметра в столбике «Старт» и максимальное, в столбике «Значение». Также для ускорения оптимизации можете задать «Шаг» с которым будут перебираться параметры тестером.

Обратите внимание, чтобы была галка возле параметра, который собираетесь оптимизировать, после чего нажмите «Ок» и закройте настройки.

Хотя есть еще вкладка «Оптимизация», но значениями в ней обычно никто не пользуется, так как реально они ничего не покажут -)

Всё, жмём на кнопку «Старт» и тестер начнет оптимизацию советника.

Скорость оптимизации зависит от количества параметров, которые вы задали, а также от мощности вашего компьютера. Поэтому процесс оптимизации может отнимать от нескольких минут до нескольких часов.

После проведения оптимизации можете посмотреть результаты с подобранными параметрами во вкладке «Результаты». В этой таблице находятся данные о прибыли, просадке, количестве сделок, ну и прибыльности, собственно -)

Результаты оптимизации советника

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

В дальнейшем вы можете сохранять свои сеты через настройки эксперта.

Кроме того, если кликнуть на вкладку «График», то одним взглядом можно оценить прибыльность/убыточность проведенной оптимизации советника:

График оптимизации советника

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

Да, стоит учитывать, что оптимизация советника дело, хоть и не хитрое, но весьма времяёмкое. Поэтому её стоит делать в выходные, когда рынок не работает. Более того, рекомендую делать оптимизацию каждую неделю. Хотя, решать вам.

И еще, несмотря на все меры, важно понимать — оптимизация советников в МТ4 не является той самой панацеей , которая спасёт вас от слива, на все 100 процентов.

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

Тем не менее, оптимизация параметров советника, является эффективной превентивной мерой , поэтому пренебрегать ею ни в коем случае не стоит.

https://traderblog.net/torgovyj-sovetnik-na-mql4/
https://sergmedvedev.ru/zarabotok-na-forex/torgovye-roboty/posobie-optimizacii/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.

Яндекс.Метрика