Оглавление
Торговый советник на 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)) и выводим соответствующее сообщение.
Конструкторы советников Forex
Уровень знаний и навыков торговли, которыми владеет трейдер, влияет на степень успеха Forex торговли. Без этого невозможно правильно анализировать ситуацию на рынке и находить точки входа в рынок, чтобы получить профит. Первые роботы появились, когда акулы трейдинга, в целях экономии времени, задались вопросом автоматизации торговли.
Советник с надежной торговой стратегией в основе способен заменить трейдера. Пассивная торговля приносит иногда ощутимую прибыль, поскольку роботу не свойственны человеческие эмоции, не знакомо чувство страха и жадности. Автоматизация торговли быстро стала популярной и у новичков, желающих без знаний и опыта получать долю профита на форекс.
В основу каждой Automatic Trading System или ATS закладывается конкретная торговая стратегия. В случае, когда автоматизация торговли не приносит желаемого результата, трейдеры винят экспертов, а не автора торговой стратегии – каркасной основы будущего робота. Не дают твердую гарантию прибыли и платные советники, покупателями которых чаще становятся начинающие трейдеры и те, кто не желает изучать теорию рынка, вникать в алгоритм работы торговых инструментов.
Трейдеры мечтают самостоятельно написать робота на базе собственной торговой стратегии. Эта задача решается несколькими способами:
- заказать робота у программистов;
- садиться за изучение языков программирования, чтобы не на пальцах объяснять компьютеру правила и условия, по которым будут работать роботы;
- использовать конструктор торговых роботов для модификации готовой или создания новой ATS.
Промежуточный вариант – создать бота в конструкторе советников, который не требует финансовых вложений и временных затрат на изучение языков программирования.
Получить бесплатно ТОП 5 лучших торговых роботов можно здесь!
Классификация экспертов
Перед созданием торгового робота, важно понимать, какого типа будет советник, и какую задачу будет решать:
- автоматический советник анализирует рынок круглосуточно и торгует по условиям, которые трейдер указал в алгоритме работы бота;
- полуавтоматический советник также круглосуточно анализирует рынок, подает сигналы на открытие торговых позиций, рекомендует уровни для Take Profit и Stop Loss, объемы лотов. Решение по сигналам и рекомендациям этого советника принимает трейдер;
- скрипты — небольшие программы, которые предлагают варианты сделок. Выбор варианта и решение на вход остается за трейдером. Сигналы скриптов рассматривают, как подтверждение или усиление сигналов торговой стратегии.
По свойствам и типу торговой стратегии в алгоритме советников разделают на категории:
- комбинированных – рабочий алгоритм таких ATS базируется на нескольких торговых стратегиях;
- мультивалютных – роботов, которые одновременно торгуют несколькими валютными инструментами;
- роботы для долгосрочной торговли;
- скальперы или советники для краткосрочной торговли.
Торговый робот функционирует по алгоритму, который построил программист. Алгоритм строится на базе торговой стратегии, которую разработал трейдер. Поэтому не стоит возлагать большие надежды на советников – роботы работают по сценариям, которые пишут люди.
Торговые эксперты, которых собирают с помощью конструкторов, мало чем отличаются. В некоторых конструкторах роботы сразу создаются с расширением «*.ex4» и без проблем встраиваются в торговый терминал Metatrader4. Для установки такой файл перетаскивают в окно графика нужного валютного инструмента. Некоторые конструкторы легко интегрируются и функционируют непосредственно из среды МТ4.
Конструктор советников Форекс
При выборе конструктора трейдеров интересуют следующие нюансы:
- функционал программы – при создании сложных ATS желательно, чтобы генерирование кода, отладка, тестирование и запуск готового советника, проводились в одной программе;
- интерфейс – одни конструкторы русифицированы, другие с англоязычным, но интуитивно понятным и комфортным в работе интерфейсом;
- язык программирования – в большинстве конструкторов коды и скрипты пишутся на языке С# или C++, который сложно выучить рядовому трейдеру и MQL, изучить который можно в течение двух недель. Некоторые конструкторы для построения советников предлагают использовать функциональные блоки. В этом случае знание языков программирования не требуется.
Ниже приводим описание 10 популярных сегодня конструкторов.
1. MetaEditor
Редактор запускается из среды МТ4 и представляет собой бесплатный, конструктор с полным функционалом и языком программирования MQL, знать который – не обязательное условие работы с этой программой. На рисунке 1 видно, какие задачи этот редактор советников предлагает выполнить пользователю.
Готовый алгоритм можно сразу протестировать в тестере стратегий и запустить в МТ4.
StockSharp
Конструктор представляет собой библиотеку торговых роботов. Коды новых экспертов создаются в Visual Studio или другой программной среде. Для работы в этом конструкторе трейдеру сначала придется изучить язык программирования С# и содержимое библиотеки. Это причины, по которым новичкам в этом редакторе работать не рекомендуется.
TSLab
Работать в этой среде, в сравнении с предыдущим редактором, легче и проще. Конструктор предлагает создавать советников из готовых функциональных блоков. Код блоков, которые писались в среде С++, не виден пользователю в процессе работы и не доступен для изменений. Скрипты и коды, которые пользователь пишет самостоятельно, остаются открытыми для изменения и коррекции.
WealtLab
Программа представляет собой визуальный редактор, в котором роботов пишут на языке программирования С#. Конструктор слабоват, но тестер стратегий, посредством которого тестируется работа советников или скриптов, в работе безупречен.
Этот конструктор считается средним звеном между двумя предыдущими программами. Тестер WealtLab, который выводит результаты тестов в графическом виде, в тестировании среднесрочных и внутридневных торговых форекс стратегий считается полезным инструментом. Одним, но весомым недостатком этого редактора пользователи называют слабую скорость тестирования – на одном процессорном ядре тестер не умеет работать быстрее.
Forex EA Generator
В этом конструкторе создавать роботов можно посредством готовых блоков без использования языков программирования.
Этот подход упрощает и ускоряет создание экспертов и удобен для новичков трейдинга. Профессиональному трейдеру этот конструктор покажется слишком примитивным.
Gordago Forex Optimizer
Графически окно этого конструктора напоминает рабочую среду МТ4. В верхней зоне окна указываются условия по входу в рынок. В нижней части окна фиксируются условия на выход из рынка. Конструктор отличается интуитивно-понятным интерфейсом. Редактор хранит торговые стратегии в файлах с собственным – «*.gso», расширением. Готовый форекс советник без проблем интегрируется в МТ4.
В платформу входит торговый сервер, пользователь может сразу протестировать нового советника на архивных котировках и начать торговлю при наличии соединения серверов. При работе с Gordago Forex Optimizer пользователь:
- добавляет в окно редактора необходимые торговые инструменты и определяет задачи для анализа рыночной ситуации;
- указывает параметры на автоматическое открытие торговых позиций;
- определяет значения для установки отложенных ордеров, уровней Stop Loss и Take Profit.
Точность указания необходимых условий будет влиять на функциональность робота.
Hlaiman EA Generator
В этом конструкторе также создаются автоматические советники. Добавьте на график торговые инструменты форекс и стрелками вверх или вниз отметьте направление сделки и вход в рынок. Внимательно указывайте условия, которые будут влиять на точность работы торгового советника.
Конструктор самостоятельно анализирует информацию пользователя и определяет условия для входа робота в рынок.
Ensed Cor
Это платный редактор кодов. Конструктор мало функциональный, с минимальным набором инструментов. Даже в demo варианте недостаточно инструментов, слабый функционал программы. Насколько полезен этот редактор, решайте сами. У бесплатного редактора MetaEditor и то функционал больше. Готовые советники сохраняются с расширением «*.ex4» и легко встраиваются в торговую платформу МТ4.
Forex Strategy Builder
Конструктор в чести у профессиональных трейдеров. Платформа функционирует на базе ядра МТ4, поэтому на 100% совместима с торговым терминалом, без него работать не сможет. В центре окна редактора лежит поле для ввода скриптов и кода с описанием условий и параметров торговой стратегии. В левой части окна – панель для вывода результатов тестирования. Робота проверяют в тестере стратегий, после чего советник интегрируется в соответствующий каталог МТ4 и готов к работе.
Trading diagram
Конструктор «Торговая диаграмма» — это графический редактор с блочным интерфейсом, блоки которого выстраиваются в виде диаграммы. Блоки соединяют стрелками для связи программных компонентов между собой. Точное введение параметров и указание связей для блоков гарантирует правильную и корректную работу советника.
Поместите необходимые блоки «Technical Analysis» на диаграмму редактора:
Кликом мыши по иконке «ТА» вызовите окно параметров и задайте нужные значения торговых условий для длинных позиций:
Таким же способом задайте значения на вход по коротким позициям:
Теперь поставьте на диаграмму блоки «Buy» и «Sell»:
Следующим шагом, задайте параметры значений для Stop Loss и Take Profit, укажите шаг для Trailing Stop блока «BUY»:
Задайте параметры Stop Loss, Take Profit и Trailing Stop для блока «SELL»:
Соедините между собой блоки, чтобы получить диаграмму торговли:
На следующем шаге сгенерируйте диаграмму, чтобы получить программный код советника. В меню «Trading Diagram» на панели инструментов выберите пункт «Generate MQL5 Code» для генерирования программного кода диаграммы. Сгенерированный торговый робот готов к использованию и доступен для работы в МТ4 или МТ5. Для активации советника перетащите файл бота на рабочий график терминала.
Получить бесплатно ТОП 5 лучших торговых роботов можно здесь!
Заключение
Конструктор форекс советников необходим:
- профессионалам трейдинга;
- молодым игрокам
- тем, кто не знает языков программирования.
Функционал редактора и степень сложности поставленной задачи — критерии выбора конструктора роботов. Создать сложного робота без знания рынка и опыта торговли, без языков программирования и в конструкторе с малым функционалам, невозможно. Не сложных советников без знания основ программирования помогут создать блочные редакторы кода.
Ни один советник не будет работать в прибыль на недоработанной торговой стратегии. Готовых экспертов используйте в трейдинге только после тщательного тестирования. Конструктор помогает в создании экспертов, но стратегию торговли разрабатывает сам трейдер.
Комментарии
Все материалы на сайте носят исключительно информационный характер и не являются указанием к действию. Представленные данные – это только предположения, основанные на нашем опыте. Публикуемые результаты торговли добавляются исключительно с целью демонстрации эффективности и не являются заявлением доходности. Прошлые результаты не гарантируют конкретных результатов в будущем. Проведение торговых операций на финансовых рынках с маржинальными финансовыми инструментами имеет высокий уровень риска, поэтому подходит не всем инвесторам. Вы несёте полную ответственность за принятые торговые решения и результат, полученный в ходе работы.
https://traderblog.net/torgovyj-sovetnik-na-mql4/
https://1sovetniki.ru/sozdanie-torgovix-robotov/konstruktory-sovetnikov-forex