olegas Мар 14, 2015 / 544 Views
Ниже показан процесс создания простого торгового робота для работы в терминале MetaTrader4.
На этом простом примере вы сможете попытаться создать своих торговых роботов для частичной или полной автоматизации торговли на рынке Форекс. Для создания торгового робота мы будем использовать язык программирования
MQL4
. На самом деле все не так страшно и сделать это сможет даже ребенок, конечно, придется приложить некоторые усилия для изучения основ языка программирования, но результат в итоге стоит затраченных усилий.
Шаблон создаваемого торгового робота
Шаблон, это то с чего начинается создание любого торгового робота или советника. Шаблоны могут несколько отличаться друг от друга, но я предлагаю вам простой работающий вариант:
#property copyright «»
#property link «»
//В этом месте программного кода описываются все переменные, используемые в программе
int start() // Спец. функция start
{
// В этом месте прописывается алгоритм действий торгового робота (с использованием //специальных команд языка MQL4)
return; // Выход из start()
}
Как происходит установка и подключение
С технической стороны все просто.
Шаг 1: Откройте корневую папку с данными.
После запуска торгового терминала нажмите «Файл» в верхнем меню навигации. После этого откройте нужную папку в раскрывающемся меню.
Вы будете перенаправлены в папку данных вашего MT4, где сможете установить советник.
Шаг 2: Поместите советник в папку.
В открывшейся папке дважды щелкните по значку «MQL4».
Здесь выберите папку «Эксперты». Это место, куда нужно поместить наш код.
Шаг 3: Вставьте файлы бота в папку Experts.
В данном примере использован советник Боллинджера от Forex Robot Academy.
В конце перезапустите терминал MT4, чтобы убедиться, что советник доступен для использования.
После этого отрегулируйте настройки штатными методами MT4, поместите на график и можете приступать к испытаниям.
Алгоритм действий торгового робота
В алгоритм действий создаваемого торгового робота мы закладываем свою торговую систему. Торговые роботы могут иметь сложные разветвленные алгоритмы действий, учитывающие множество факторов и путей развития событий на рынке Форекс. В данном случае мы ограничимся простым алгоритмом, основанным на покупке при цене выше скользящей средней и продаже при цене ниже скользящей средней.
Скользящая средняя это понятие технического анализа, выражающее некоторое усредненное значение цен, графически представленная в виде линии на графике. См. рис.:
Кликните по рисунку для увеличения |
Итак, мы хотим, чтобы создаваемый торговый робот осуществлял покупку при цене выше скользящей средней. Для этого напишем следующий программный код:
if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )
{ OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point); }
Давайте подробно разберём этот код. Сначала идет проверка условия, что цена находится выше скользящей средней:
if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )
Здесь:
Bid
– цена спроса*;
iMA()
– оператор вычисляющий значение скользящей средней (в данном случае используется простая скользящая средняя с периодом задаваемым в настройках торгового робота);
If (условие)
–
if
в переводе с английского означает «если». Другими словами если условие, написанное в скобках, выполняется то, выполняется и действие, указанное в фигурных скобках после:
{ OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point); }
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid—sl*Point, Bid+tp*Point)
— это приказ на покупку 0,1 лота с установкой ордеров стоп-лосс (sl) и тейк-профит (tp) задаваемых в настройках торгового робота.
Для того, чтобы создаваемый торговый робот осуществлял продажу при цене ниже скользящей средней напишем следующий программный код:
if( Bid
{ OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point); }
Конструкция аналогична предыдущей, отличающаяся только тем, что в условии if()
цена меньше скользящей средней, а в фигурных скобках стоит приказ на продажу того же 0,1 лота, с теми же ордерами стоп-лосс и тейк-профит.
Таким образом на данный момент мы имеем следующий алгоритм действий:
if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )
{ OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);}
if( Bid
{ OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);}
Это означает, что при каждом изменении цены программа будет проверять оба этих условия и совершать покупку или продажу в зависимости от того какое из условий истинно в данный момент времени.
И если мы не ограничим программу дополнительным условием, то она сразу же наоткрывает кучу позиций, исчерпав весь депозит.
Давайте поставим ему дополнительное условие, открывать позицию только в том случае когда открытых позиций нет: if( OrdersTotal()=0)
, здесь
OrdersTotal()
– функция возвращающая значение открытых и отложенных ордеров.
Более того, давайте сделаем так, чтобы торговый робот сначала проверял наличие открытых позиций, а потом, в случае если открытых позиций нет, производил дальнейшие действия по алгоритму:
if( OrdersTotal()=0)
{
if( Bid>iMA (Symbol(), Period(),PMA, 0,MODE_SMA , PRICE_CLOSE, 0) )
{ OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Bid+tp*Point);}
if( Bid
{ OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Ask-tp*Point);}
}
Как видите, мы весь алгоритм с проверкой условий поместили в фигурные скобки под условием if( OrdersTotal()=0)
и если это условие не будет выполнено, торговый робот просто будет ждать следующего тика (изменения цены).
На этом простейший алгоритм торгового робота закончен, но работать такая программа не будет до тех пор, пока мы не опишем все переменные входящие в алгоритм.
MQL5 Wizard. Сделать советник за 5 минут
Итак, для начала запускаем MetaTrader 5 и переходим в редактор приложений (кнопка F4). На верхнем меню жмем кнопку «Создать» и в появившимся диалоге выбираем генерацию нового советника.
Дальше нужно указать название советника и основные входные параметры.
Добавляем модули торговых сигналов. Модули могут быть как стандартные, так и разработанные сообществом (вы тоже можете поучаствовать в данном процессе).
Собственно, все стандартные сигналы хорошо описаны в онлайн справке на официальном сайте. Там же можно скачать и кастомные.
Выбрав подходящий индикатор нужно указать его входные параметры. Тут же можно обозначить вес сигнала по отношению к другим, если их много.
Обычный трейлинг стоп или закрытие сделки по значениям индикатора – на ваш выбор.
Также на выбор предлагается фиксированный лот, либо объем сделки в процентах от депозита. Для самых рискованных новоявленных программистов также есть мартингейл с его геометрической прогрессией лота, способной принести вам миллионы за пару лишних проходов в тестере стратегий.
Собственно, даже если вы не состоите в клане Метатрейдера, не страшно, наверняка уже написан конструктор под нужную вам торговую платформу. Дело, опять же, в возможностях и желании. Мораль проста: не стоит пытаться реализовать то, что уже давно реализовано. Игнорирование чужого труда может дорого обойтись, придумывать науку заново совсем не обязательно.
Переходим к плану обучения.
В качестве языка программирования для реализации стратегий будет использован Python. Данный язык кроссплатформенный (что для сторонников Linux и macOS является обязательным атрибутом), прост в освоении (по своему опыту изучения Java, могу сказать что Python легче), широко распространен (применяется в Big Data, веб-разработке, автоматизации тестирования, науке, системном администрировании, для прототипирования квантовых моделей в хедж-фондах и «квантовых» трейдерских подразделений в банках и др.)
Какие недостатки имеет бот для трейдинга криптовалют
Заработок миллионов лишь на советниках только кажется реальным. Нередко такими лозунгами оперируют мошенники, которые продают пустышку, которая в лучшем случае не принесет никакой пользы. Недостатков у торговых роботов тоже полно, и давайте их перечислим.
- Советники нельзя использовать во времена рыночной нестабильности. Любая неожиданная новость может кардинально изменить направление цены. Робот о ней даже не узнает, поэтому будет заключать невыгодные сделки. Поэтому как минимум присматривать за программой придется.
- Программы-помощники используют лишь технический анализ, который основывается на следствиях, а не причинах.
- У программы нет эмоций. Да, это не ошибка. Отсутствие эмоций у торгового робота также является и недостатком. Если что-то идет не по плану, человек испугается и закроет сделку, а робот так не сможет. Конечно, если в нем нет механизма контроля убытков, которого у большинства советников нет.
Идеальный способ решения этих проблем – включение советника в полуавтоматический режим. То есть, робот будет лишь давать сигналы, а трейдер сам решает, стоит ли к этим советам прислушиваться. Но тогда часть плюсов просто пропадает. В общем, грамотный трейдер умеет ловко балансировать между плюсами и минусами советников.
Пример 1
график демонстрирует зависимости прибыли (P) нашего торгового робота, торгующего EURUSD, полученной на годовом отрезки истории часовых измерений цены, от значения параметра — период “медленной” скользящей средней (M). Все остальные параметры фиксированы и не подвергаются оптимизации.
ЦФ (прибыль) достигает максимума 0.27 в точке M = 12. Чтобы гарантированно найти максимальное значение прибыли, нам потребуется провести 20 итераций тестирования. Альтернатива — провести меньшее количество испытаний торгового робота со случайно выбранным значением параметра M на интервале [9, 20]. К примеру, после 5 итераций (20% от общего количества испытаний, мы нашли квазиоптимальный вектор (вектор, очевидно, одномерный) параметров: M = 18 со значением ЦФ (M), равным 0.18:
Оставшиеся значения на графике от нашего алгоритма оптимизации скрыл “туман войны”.
Оптимизация одного из четырех параметров нашего торгового робота, при фиксированных значениях остальных параметров, не позволяет нам увидеть всей картины. Возможно, максимум ЦФ, равный 0.27 — не лучшее значение показателя, если варьировать значение других параметров?
Вот так изменяется зависимость прибыли от периода скользящей средней при различных значениях параметра TakeProfit на интервале [0.2… 0.8].
Величина допустимой месячной просадки по депозиту
В случае достижения по депозиту просадки, заданной в параметрах депозита допустимой месячной, будет происходить закрытие всех открытых сделок и остановка работы робота до наступления следующего календарного месяца согласно терминальному времени. При этом просадка рассчитывается как разница величины депозита на начало текущего месяца и текущего уровня Equity. В расчете данной величины робот будет учитывать абсолютно все торговые операции по данному торговому счету, т.е. «ручная» и «автоматическая» торговля не будут различимы.
Данная мера нацелена на сохранение торгового депозита и возможности продолжения работы согласно текущей (либо измененной) системы.