Как написать советника для mt4 для автоматической торговли

Все мы знаем, что основное достоинство терминала Metatrader 4 – это возможность создания роботов и торговля с их помощью. 

Далеко не все трейдеры владеют программированием на mql4/5. Разработчики программы Forex Tester смогли решить эту проблему. Теперь можно создать робота или реализовать торговую идею в виде индикатора на ресурсе «Визуальный конструктор стратегий» (Visual Strategy Builder). Без навыков программирования.

Как это сделать, плюсы и минусы бесплатного (на текущий момент) конструктора роботов – в нашем материале.

Visual Strategy Builder — Автоматизируем Стратегии без программирования

Постоянные читатели нашего сайта знакомы с Forex Tester 4 – уникальным симулятором торгов, выступающим в роли тренажера, тестера и анализатора. Программа имела функцию написания на заказ индикаторов и советников, совместимых с Metatrader. Теперь разработчики платформы решили дать каждому трейдеру шанс самостоятельно создать собственные стратегии. 

Сконструированные с помощью готовых модулей команд скрипты также совместимы с Metatrader 4, их создание на период бета-тестирования полностью бесплатно. Так что спешим читать статью и воплощаем в жизнь все идеи индикаторов и советников, которые были отложены до лучших времен.

Сервис Visual Strategy Builder расположен по адресу: https://tools.forextester.com/

Зачем нужен Visual Strategy Builder?

Visual Strategy Builder (VSB) представляет собой программную оболочку с набором инструментов теханализа, которые хорошо знакомы пользователям Metatrader 4. В отличие от этой торговой платформы VSB позволяет задавать в индикаторах правила открытия позиции и установки ордеров тейк-профит и стоп-лосс.

Любой новичок может выбрать сигнал на открытие позиции из набора готовых опций (кроссоверы, пересечения уровней, больше/меньше и т. д.). Эти настройки открывают недоступную для Metatrader 4 возможность протестировать работу одного или нескольких индикаторов. 

Например, можно получить реальный торговый результат по стратегии пересечений скользящих средних линий. Такой советник создается в VSB за 5 минут, потом его можно экспортировать в Metatrader 4 или Forex Tester.

Разобравшись с созданием одного индикатора в Visual Strategy Builder, трейдер может в несколько кликов создать рабочую автоматизированную стратегию и тоже проверить ее в тестере. Если советник показывает положительные результаты, то по его сигналам можно торговать на реальном счете через Metatrader 4.

Кстати, тестировать стратегию однозначно лучше через Forex Tester – там точнее котировки и можно быстро эмулировать сессию за любой торговый день. Например, выбрав какой-нибудь «черный вторник», чтобы воочию понять, как аномальная волатильность повлияет на настройки мани менеджмента.

Профессиональные трейдеры могут экспортировать код советников прямо в VSB, соединять его с созданными там программами или редактировать в Metaeditor и отправлять обратно в Metatrader 4.

Visual Strategy Builder будет полезен тем, кто ищет новые идеи – программа поддерживает библиотеку стратегий пользователей. Любой желающий без навыков программирования сразу поймет «внутренности алгоритма» по составу индикаторов и описанным правилам торговых сигналов. Тут же можно самостоятельно убедиться в результативности торговой системы.

Как работать на платформе Visual Strategy Builder

Сервис Visual Strategy Builder расположен по адресу: https://tools.forextester.com/

Использование VSB требует регистрации – это быстрая и несложная процедура. Введите адрес электронной почты и придумайте пароль для входа. Он должен быть не менее 8 символов, содержать буквы разного регистра, почтовый ящик лучше указать gmail.

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

Валютным спекулянтам доступно создание стратегии, использование шаблона от разработчиков или других пользователей VSB, а также создание собственного «индикатора мечты».  Если пользователь планирует собрать торговую систему, надо нажать на иконку «Стратегии».

Платформа удобно сохраняет их под выбранным пользователем именем с кратким описанием сути системы. На странице предусмотрена кнопка возврата, если трейдер допустил ошибку на предыдущем этапе.

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

  • Уровни (Ценность);
  • Конкретная цена;
  • Диапазон (цены открытия, закрытия, максимумы и минимумы свечей);
  • Открытие по дням недели, месяца (опция время);
  • По конкретному объему или его абстрактному критерию;
  • Таймфрейм.

Перечисленные опции можно объединять друг с другом, накладывая различные условия выполнения сделки, например, пробой уровня только до американской сессии и т. д. Определитесь с главным инструментом своей стратегии и перетащите его в окно «Состояние 1».

Как только он там отобразится, можно приступать к редактированию параметров. Наведите курсор на поле присоединенного Bollinger Bands (BB), чтобы увидеть эту опцию.

После ее нажатия появится таблица со стандартными настройками линий BB. Стоит отметить одну особенность: для каждой из них сигналы на открытие позиций прописываются отдельно.

Набор правил входа в позицию доступен после нажатия рядом окна «Операции», вместе с которым активируется аналогичная опция слева со списком шаблонов. Учитывая, что работа идет с верхней линией, а вход в рынок планируется по контртренду, выбираем кроссовер сверху вниз.

Теперь конкретизируем тип позиции и условия мани менеджмента с помощью пункта меню на левой панели «Действия». Перетаскиваем в поле ордер на продажу и редактируем его параметры.

Пройдем по пунктам снизу вверх – индикатор на графике предусматривает многократное открытие позиции, поэтому ставим «Нет» на предложение открыть ордер один раз. Магический номер необходим, если открытие позиций по сигналам Bollinger Bands будет пересекаться с работающими на графике другими советниками.

Остальные опции понятны, следует только внимательно отнестись к пунктам: 25 – это для четырехзначной системы котировок. При пяти знаках умножайте значения пунктов на 10.

Для нижней линии Боллинджера потребуется создать второе правило, опцию можно выбрать слева вверху, повторив все вышеописанные операции со следующими изменениями:

  • В настройках индикатора выбираем нижнюю линию;
  • Кроссовер – снизу вверх;
  • Тип ордера, открываемого по рынку – «Покупка».

Полученную стратегию можно сохранить и экспортировать в ForexTester или Metatrader 4. В последнем случае используйте латинские буквы в названии файла. Стратегия сохраняется в файл ex4 в папку, выбранную трейдером.

Запустить написанный советник можно сразу после его установки в Metatrader 4. Это делается обычным способом, описанным на нашем сайте.

Заключение

Основной плюс Конструктора стратегий от Forex Tester – простота интерфейса и функциональность шаблонов. Это позволяет трейдеру частично автоматизировать стратегии или дополнить ручную торговлю дополнительными сигналами, которые приходилось искать визуально на графике.

Любителей сеток особо порадует наличие опции «Мартингейл», а также команд на закрытие всех ордеров по условию. Среди минусов VSB следует отметить баги бета-версии и будущую запланированную плату за опцию. Так что спешим писать и экспортировать советников, пока платформа имеет открытую лицензию.

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

Тема на форуме

С уважением, Алексей Вергунов
Tlap.com

Come to my page!

Создание

Для создания советников используются язык программирования торговых стратегий MetaQuotes Language 4 (MQL4) и редактор MetaEditor. Чтобы запустить редактор советников, необходимо выполнить команду «Создать» контекстного меню окна «Навигатор — Советники», команду меню «Сервис — Редактор MetaQuotes Language», нажать клавишу F4 или кнопку Редактор MetaEditor панели «Стандартная».

ea_create_navigator

При создании эксперта автоматически откроется мастер создания советников, позволяющий быстро приступить к работе с новой MQL4-программой. В нем в качестве типа создаваемого объекта необходимо указать «Советник» и заполнить поля требуемыми данными:

  • Имя — название советника;
  • Автор — имя автора;
  • Ссылка — адрес сайта разработчика;
  • Параметры — список входных параметров советника. Чтобы добавить новый параметр, необходимо нажать кнопку «Добавить», чтобы удалить — кнопку «Удалить».

После этого в редакторе открывается окно нового советника с заданными параметрами. Файл с исходным текстом (*.MQ4) советника автоматически помещается в папку /EXPERTS клиентского терминала. С этого момента можно приступать к написанию кода эксперта.

По завершении разработки необходимо скомпилировать советник. Для этого в редакторе советников необходимо выполнить команду меню «Файл — Компилировать», нажать клавишу F5 или кнопку Компилировать панели инструментов. В результате успешной компиляции создается исполняемый файл программы с расширением *.EX4, автоматически помещаемый в папку /EXPERTS. Список скомпилированных экспертов можно просмотреть в окне «Навигатор — Советники» клиентского терминала. Если компиляция не была успешно завершена, пиктограмма эксперта будет закрашена серым цветом. Это означает, что его использовать нельзя.

Редактирование советников

Чтобы приступить к редактированию уже существующего советника из терминала, необходимо выполнить команду «Изменить» контекстного меню окна «Навигатор — Советники». При этом откроется редактор советников, в который уже будет загружен исходный текст выбранного эксперта. После изменения исходного текста советника необходимо повторно скомпилировать его и получить новый исполняемый EX4-файл. В противном случае в терминале будет использоваться неизмененная, предыдущая версия эксперта.

Внимание: если компиляция не была успешно завершена, пиктограмма эксперта будет закрашена серым цветом. Это означает, что его использовать нельзя.

Если вы задавались вопросом «Как написать советник на языке программирования MQL4», то данный пост создан именно для вас. Сегодня мы будем создавать самый простой из всевозможных советников для МТ4, который будет определять незамысловатое условие на вход, открывать ордер и модифицировать его цели.

Алгоритм программирования советника на MQL4

Выше представлена схема процесса работы торгового робота, который мы планируем написать. Любой советник должен иметь как минимум три функции обработки событий:

OnInit()

Она генерируется только один раз за время работы советника в самом начале. Нужна, чтобы внутри нее определить, рассчитать и задать те переменные и массивы данных, которые не нуждаются в дальнейшей корректировке по мере обновления тиков. То же самое касается и графических объектов. В советнике раздел OnInit выполняет ту же роль, что мы проходили в теме создания первого индикатора.

OnDeinit()

Функция вызывается советником только один раз перед непосредственным удалением его с графика. Она используется также и в индикаторах. Раздел OnDeinit нужен, чтобы подчистить график после советника, обнулить глобальные переменные и выдать окончательный расчет или текст пользователю. Более подробно мы ее проходили при создании первого индикатора.

OnTick()

Данная функция новая в наших уроках. Раздел OnTick генерирует события исключительно для экспертов и не может быть вызвана в индикаторах или скриптах. Ее тип данных void и набор параметров отсутствует. По своей логике работы она схожа с функцией для индикаторов OnCalculate,  только она не возвращает никакого значения после завершения. Задача у нее одна — запускаться каждый новый тик и проходить циклом весь написанный код в ней от начала до конца. Так как любой советник должен проверять условия для входа/выхода из рынка, считать количество открытых ордеров и выполнять их сопровождение, то можно уверенно сказать, что функция OnTick является самой важной в коде любого эксперта.

Продолжим разбирать алгоритм работы. Вначале советник инициализируется. Далее запускается функция OnTick, в которой выполняются все дальнейшие действия. Для данного советника сначала необходимо проверить наличие уже открытых им ордеров. Если они есть — дальнейший расчет и поиск условия на вход не выполняются, потому что в рынке у нас должен быть только один ордер за раз. Если же открытых сделок нет, то идет определение направления будущей позиции. В зависимости от него запускается пользовательская функция на открытие Buy или Sell ордера. Если по какой-то причине сделка не смогла открыться, расчет возвращается назад в функцию OnTick, чтобы попробовать выставить ордер снова. Если же ордер открылся, то он модифицируется (выставляется Тейк-Профит и Стоп-Лосс). На этом алгоритм заканчивает свою работу по работе с ордерами, потому что счетчик новых ордеров уже будет учитывать этот открывшийся ордер, делая проверку каждый тик. И только после того, как ордер закроется по достижению своей цели (ТП или СЛ), цикл проверки условия на открытие ордера запустится снова. Функция OnDeinit запустится только тогда, когда вы удалите советник с графика.

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

Торговая система «Монетка»

форекс тс монетка

Когда перед нами стоит вопрос «как создать Форекс советник», то в первую очередь в голову приходит мысль о торговой системе, заложенной в нем, логике открытия ордеров. Так как в этом уроке не стоит цель создать так называемый на сленге «Грааль», то для получения опыта в написании первого эксперта мы возьмем на вооружение самую простую ТС, которую только можно выдумать.

Период советника установим М15. Мы будем входить в рынок по воле случая, или, если хотите, удачи. Мы начнем условно подкидывать монетку и смотреть на результат этого несложного действия. Орел или Решка — только два исхода событий будет у советника. Вариант «ребро» в данном случае не рассматривается 🙂

Зачем использовать такую простую систему? Чтобы понять, что произойдет в результате этого эксперимента и ответить себе на вопрос: можно ли заработать на Форекс входя в рынок наобум? Получится ли прибыльно торговать не имея четко спланированной торговой системы?

Проверка советника на ошибки: GetLastError()

При написании советника (как и при его использовании) очень важно следить за возможными ошибками в коде. Речь идет не об ошибках компиляции, их вы можете увидеть во вкладке «Ошибки» окна «Инструменты». Разговор о скрытых ошибках, которые проявляют себя во время тестирования или работы советника на реальном счете. Проверку на эти ошибки нужно делать как минимум один раз за тик в функции обработки событий OnTick. Как максимум — в каждой вашей пользовательской функции.

Чтобы получить номер возможной ошибки, нужно вызвать функцию GetLastError(). Она имеет тип int и возвращает целое число, значение системной переменной _LastError. Тут нужно обратить внимание, что на языке MQL4 после вызова функции GetLastError ее значение обнуляется и повторный вызов ее в том же месте кода вернет значение 0, поэтому ее значение нужно сохранять в отдельную переменную.

Язык MQL различает как минимум 150 разных ошибок. Соответственно каждый возвращаемый номер имеет свою расшифровку. Ноль значит это ошибки нет и все отлично, 134 значит, что недостаточно денег на счете и т.д.

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

#property copyright «Copyright (c) DaVinci FX Group»

#property link «https://www.davinci-fx.com/»

#property version «1.00»

#property strict

#include <..Librariesstdlib.mq4> //библиотека для расшифровки ошибок

Теперь осталось прописать проверку в самом конце функции обработки событий OnTick()

int Error = GetLastError(); //поиск ошибок по завершению тика

if(Error != 0) Print(«OnTick() Error «,Error,«: «,ErrorDescription(Error));

В этом коде вначале сохраняется значение ошибки в переменную Error, далее проверяется, чтобы ошибка точно была (значение не было равно нулю) и если это так, то выводится принт в журнал с номером ошибки и ее расшифровка.

Напиши в комментариях, если вы хотите видеть более подробную расшифровку ошибок на русском языке в будущих уроках.

Пишем свой первый советник

Чтобы создать советник, нажмите «Файл»  — «Создать». Затем выберите вариант «Советник (шаблон)», клик по кнопке Далее, придумываете ему имя, гордо записывая себя, как автора и добавляете ссылку на ваш (или наш) сайт. Параметры добавлять не нужно, мы их пропишем вручную, тык по кнопке Далее. Обработчики событий нам не нужны, поэтому еще раз клик на Далее. Функция OnTester полезная при оптимизации сов, но в этом уроке она не понадобится (мы рассмотрим ее в будущих статьях). Жмем Готово.

Программа создаст стандартный шаблон из описания и трех функций обработки событий: OnInit, OnDeinit и OnTick.

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

  • Lot — торговый лот, с которым будет открываться ордер. По умолчанию задаем его минимальным. Тип переменной будет double, т.к. это лот не может быть целым числом.
  • Slippage — максимально допустимое проскальзывание в пунктах, больше которого ордер не будет открыт.
  • Stop Loss — Стоп Лосс (ограничение убытка) для каждого ордера советника. По умолчанию задается в пунктах.
  • Take Profit — Тейк Профит нужен для закрытие ордера при достижении заданной прибыли. По умолчанию задается в пунктах.
  • Comments — текстовый комментарий, с которым будет открыт ордер. Его можно будет увидеть в окнах «Торговля» и «История Счета» в столбце «Комментарий». Он полезен, если на счете торгует несколько советников, либо используется ручная торговля. Некоторые брокеры в комментарий прописывают проскальзывания при открытии конкретного ордера. Также он хранит информацию, если ордер был частично закрыт.
  • MagicNumber — номер (целое число), который задается всем ордерам конкретного советника, открытым по текущему символу. Магик нужен для того, чтобы советник мог отличить свои сделки от чужих. Для каждой пары и советника рекомендуется задавать свой уникальный магик. Ордера, открытые вручную имеют нулевой магик. Магик также можно увидеть на мониторинге сервисов MyFxBook или FxBlue, и сделать по нему фильтрацию.

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

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//+——————————————————————+

//| 3.0 Coin EA |

//| Copyright (c) DaVinci FX Group |

//| https://www.davinci-fx.com/ |

//+——————————————————————+

#property copyright «Copyright (c) DaVinci FX Group»

#property link «https://www.davinci-fx.com/»

#property version «1.00»

#property strict

#include <..Librariesstdlib.mq4>

extern string s0 = «<== General Settings ==>»; //> > >

extern double Lot = 0.01;

extern int Slippage = 5;

extern double StopLoss = 20;

extern double TakeProfit = 20;

extern string Comments = «DaVinci EA»;

extern int MagicNumber = 123123;

Переходим к функции OnInit. Так как на Форекс до сих пор существуют типы счетов с котировками, у которых разное количество знаков после запятой, то необходимо добавить проверку для тех параметров, значение которых указываются в пунктах. Изначально мы задали значения проскальзывания, Стоп Лосса и Тейк Профита в старых пунктах. Если же у валютной пары три знака (для JPY) или пять (для остальных валют) после запятой, то нам необходимо перевести старые пункты в новые, умножив это значение на десять.

int OnInit() {

if (Digits == 3 || Digits == 5) {

Slippage *= 10;

StopLoss *= 10;

TakeProfit *= 10;

}

return(INIT_SUCCEEDED);

}

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

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

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

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

int CountOrder() {

int orders=0;

for(int i=OrdersTotal()-1;i>=0;i—){

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==false) continue;

if(OrderSymbol() !=_Symbol || OrderMagicNumber() != MagicNumber) continue;

if(OrderType() > 1) continue;

orders++;

}

return orders;

}

Теперь эту функцию нужно добавить в тело OnTick и проверить условие, чтобы открытых ордеров не было.

void OnTick() {

if(CountOrder() == 0) { //проверка, чтобы не было открытых ордеров

// дальнейший код

}

int Error = GetLastError();

if(Error != 0) Print(«OnTick() Error «,Error,«: «,ErrorDescription(Error));

}

Далее нам необходимо определиться с направлением сделки. Как говорилось выше, мы будем входить по системе «Монетка», т.е. нам нужно рандомно (наугад) определить направление входа. С этим поможет справиться функция MathRand(), она возвращает псевдослучайное целое число в диапазоне от 0 до 32767. Так как нам нужно получить только два значения: 0 (для покупок) или 1 (для продаж), то просто добавим знак %, с помощью которого получим остаток от деления на 2. Каждый тик результат будет случайно определяться между 0 и 1.

int TradeDirection = MathRand()%2; //поиск рандомного направления сделки

Пользовательская функция OpenTrade()

С условием на вход определились, осталось в зависимости от него осуществить покупку или продажу. Для этого введем еще одну пользовательскую функцию OpenTrade(). Ей будет передаваться один параметр — направление на вход. В зависимости от направления сделки нужно определить:

  • Price — цена открытия ордера. Рыночные ордера на покупку открываются по цене Ask, а закрываются по цене Bid. И наоборот, рыночные ордера на продажу открываются по цене Bid, и закрываются по цене Ask.
  • Цвет стрелочки да пометки открытия ордера на графике. По обычаю покупки имеют синий цвет, продажи красный.
  • Текст для открытия ордера.

Для упрощения работы мы воспользуемся условным оператором ? 

bool OpenTrade(int OP_Type) {

double price = (OP_Type == OP_BUY ? Ask : Bid);

color col_type = (OP_Type == OP_BUY ? clrBlue : clrRed);

string op_str = (OP_Type == OP_BUY ? «на покупку» : «на продажу»);

Print(«Открываем ордер « + op_str);

//дальнейший код

return(false);

}

Переходим к самой главной торговой функции OrderSend. Она и отвечает за открытие рыночного или отложенного ордера. Имеет тип данных int и возвращает тикет открытого ордера в случае успешного выполнения, либо же ноль в случае неудачи. Функция имеет ряд параметров, которые ей необходимо передать:

  • symbol — символ, по которому необходимо открыть ордер. Текущий символ задается как Symbol().
  • cmd — торговая операция, т.е. один из шести типов ордера, который нужно открыть: рыночные (buy или sell) и отложенные (buylimit, selllimit, buystop, sellstop).
  • volume — размер торгового лота.
  • price — цена открытия ордера. Для рыночных ордеров нами она рассчитана выше.
  • slippage — проскальзывание в пунктах, берется из внешней переменной.
  • stoploss — Стоп Лосс рассчитанный по цене котировок.
  • takeprofit — Тейк Профит рассчитанный по цене котировок.
  • comment — комментарий к ордеру, берется из внешней переменной.
  • magic — магик номер, берется из внешней переменной.
  • expiration — срок жизни ордера. Нужен только для отложенных ордеров, поэтому оставляется равный нулю.
  • arrow_color — цвет стрелочки на графике при открытии ордера.

Открываем ордер.

int ticket = OrderSend(Symbol(), OP_Type, Lot, price, Slippage, 0, 0, Comments, MagicNumber, 0, col_type);

Пометка: после появления современных технологий торговли, таких как ECN, STP и NDD, цели для ордера нельзя выставлять сразу при подаче заявки на открытие ордера. Его нужно модифицировать только после успешного открытия сделки. Для старых типов счетов можно задать его сразу, но зачем, когда можно провести модификацию и после.

Ордер открылся, теперь ему необходимо выставить цели (Тейк Профит и Стоп Лосс) в случае, если он сработал без ошибок. Для этого данный ордер нужно выделить по номеру тикета с помощью функции OrderSelect.

Для расчета цены Стоп Лосса по текущим котировкам:

  • для покупок от текущей цены открытия ордера (OrderOpenPrice) вычитаем значение переменной StopLoss, умноженной на Point.
  • для продаж к текущей цене открытия ордера (OrderOpenPrice) прибавляем значение переменной StopLoss, умноженной на Point.

Для расчета цены Тейк Профит по текущим котировкам:

  • для покупок к текущей цене открытия ордера прибавляем значение переменной TakeProfit, умноженной на Point.
  • для продаж от текущей цены открытия ордера вычитаем значение переменной TakeProfit, умноженной на Point.

Модификацию выполняем с помощью торговой функции OrderModify. Она содержит почти такие же параметры, как и функция OrderSend, плюс ей передается номер тикета ордера, который нужно модифицировать.

Собрав все описанное выше вместе у нас получается готовая пользовательская функция для открытия и модификации ордера.

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

bool OpenTrade(int OP_Type) {

double price = (OP_Type == OP_BUY ? Ask : Bid);

color col_type = (OP_Type == OP_BUY ? clrBlue : clrRed);

string op_str = (OP_Type == OP_BUY ? «на покупку» : «на продажу»);

Print(«Открываем ордер « + op_str);

int ticket = OrderSend(Symbol(), OP_Type, Lot, price, Slippage, 0, 0, Comments, MagicNumber, 0, col_type);

if(ticket > 0) { //Если ордер был открыт

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) {

double SL = 0, TP = 0;

if(OP_Type == OP_BUY) {

SL = OrderOpenPrice()-StopLoss*Point;

TP = OrderOpenPrice()+TakeProfit*Point;

}

else {

SL = OrderOpenPrice()+StopLoss*Point;

TP = OrderOpenPrice()-TakeProfit*Point;

}

Print(«Модифицируем ордер « + op_str);

if(!OrderModify(ticket, price, SL, TP, 0, clrNONE)) {

int Error = GetLastError();

Print(«Ошибка модификации ордера «,Error,«: «,ErrorDescription(Error));

}

else return(true);

}

}

else {

int Error = GetLastError();

Print(«Ошибка открытия ордера «,Error,«: «,ErrorDescription(Error));

}

return(false);

}

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

Нам осталось вернуться в функцию OnTick и добавить эту пользовательскую функцию в его тело.

void OnTick() {

if(CountOrder() == 0) { //проверка, чтобы не было открытых ордеров

int TradeDirection = MathRand()%2; //поиск рандомного направления сделки

if(TradeDirection == OP_BUY) {

if(OpenTrade(OP_BUY)) Print(«Ордер на покупку открыт и модифицирован»);

}

else if(TradeDirection == OP_SELL) {

if(OpenTrade(OP_SELL)) Print(«Ордер на продажу открыт и модифицирован»);

}

}

int Error = GetLastError(); //поиск ошибок по завершению тика

if(Error != 0) Print(«OnTick() Error «,Error,«: «,ErrorDescription(Error));

}

Проверка советника в тестере

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

Хочу заметить, что раз вы взялись за изучение программирования на MQL4, то при тестировании самый основной режим для вас всегда будет режим визуализации. Только так можно найти и устранить основные ошибки в первоначальной логике кода. Визуализация плотно совмещается с работой с журналом. График и огромное количество ваших принтов смогут помочь найти большинство ошибок.

Полученный код должен выдавать три принта при каждом новом появлении ордера (об открытии, модификации и об этом всем вместе). Никаких других ошибок в журнале быть не должно. Смотрим в журнал.

Все выглядит хорошо, значит делаем вывод, что код написан без ошибок. По крайней мере видимых.

Посмотрим на график тестирования системы «Монетка» и сделаем выводы.

Заключение

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

Одной из целей данного урока было доказать, что необдуманная торговля не в состоянии принести прибыль. В данном примере мы использовали рандомный вход с абсолютно одинаковыми ТП и СЛ, равными 20 пунктов каждый. Т.е. при таком раскладе, если 55% сделок были бы прибыльными, то график доходности шел вверх. В нашем случае кривая прибыли нацелена строго вниз, что говорит нам самую простую истину: вы никогда не заработаете на рынке, если у вас не будет четкой и строго сформулированной торговой системы. Форекс это далеко не казино и на волю случая тут нельзя полагаться. Без четких правил входа, сопровождения ордеров и выхода из сделки вас ждет неудача.

На этом все, код советника приложен ниже. Если пост был вам полезен, то вы знаете, что делать! Оставляйте комментарии и делитесь им в тематических сообществах. Всем профитов!

0. Начало работы

Блог для успешных трейдеров на рынке Форекс. Полезный сайт о Forex — DaVinci FX Group.

В этом руководстве по 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 свечи были бычьими. Давайте начнем!

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

void OnTick() { 
if(Close[1] &gt; Open[1] &amp;&amp; Close[2] &gt; Open[2] &amp;&amp; Close[3] &gt; Open[3]) { //Ордер на покупку } 
}

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

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

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

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

if(Close[1] > Open[1] && Close[2] > Open[2] && Close[3] > Open[3])
      {
         //Ордер на покупку
         OrderSend(_Symbol,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*_Point,Ask+TakeProfit*_Point,"Покупка",MagicNumber);
      }

Что из себя представляет функция 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. Она будет возвращать количество открытых ордеров.

int TotalOpenOrders()
{
   int total_orders = 0;
 
   for(int order = 0; order < OrdersTotal(); order++) 
   {
      if(OrderSelect(order,SELECT_BY_POS,MODE_TRADES)==false) break;
 
      if(OrderMagicNumber() == MagicNumber && OrderSymbol() == _Symbol)
         {
            total_orders++;
         }
   }
 
   return(total_orders);
}

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

   if(TotalOpenOrders() == 0)
   { 
      if(Close[1] > Open[1] && Close[2] > Open[2] && Close[3] > Open[3])
      {
         //Ордер на покупку         
OrderSend(_Symbol,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*_Point,Ask+TakeProfit*_Point),"Покупка",MagicNumber);
      }
   }

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

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

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

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

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

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

void OnTick()
  {
//---
 
   if(TotalOpenOrders() == 0 && IsNewBar() == true)
   { 
      if(Close[1] > Open[1] && Close[2] > Open[2] && Close[3] > Open[3])
      {
         //Ордер на покупку
         OrderSend(_Symbol,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*_Point,Ask+TakeProfit*_Point,"Покупка",MagicNumber);
      }
   }
 
  }
//+------------------------------------------------------------------+
 
//Проверка новой свечи
bool IsNewBar()   
{        
      static datetime RegBarTime=0;
      datetime ThisBarTime = Time[0];
 
      if (ThisBarTime == RegBarTime)
      {
         return(false);
      }
      else
      {
         RegBarTime = ThisBarTime;
         return(true);
      }
}   
 
// Возвращаем количество открытых ордеров
int TotalOpenOrders()
{
   int total_orders = 0;
 
   for(int order = 0; order < OrdersTotal(); order++) 
   {
      if(OrderSelect(order,SELECT_BY_POS,MODE_TRADES)==false) break;
 
      if(OrderMagicNumber() == MagicNumber && OrderSymbol() == _Symbol)
         {
            total_orders++;
         }
   }
 
   return(total_orders);
}

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

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

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

//--- глобальные переменные
double MyPoint;
int    MySlippage;

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

//Получаем My Points   
double MyPoint()
{
   double CalcPoint = 0;
 
   if(_Digits == 2 || _Digits == 3) CalcPoint = 0.01;
   else if(_Digits == 4 || _Digits == 5) CalcPoint = 0.0001;
 
   return(CalcPoint);
}
 
 
//Получаем My Slippage
double MySlippage()
{
   double CalcSlippage = 0;
 
   if(_Digits == 2 || _Digits == 4) CalcSlippage = Slippage;
   else if(_Digits == 3 || _Digits == 5) CalcSlippage = Slippage * 10;
 
   return(CalcSlippage);
}

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

int OnInit()
  {
//---
   MyPoint = MyPoint();
   MySlippage = MySlippage();
 
//---
   return(INIT_SUCCEEDED);
  }

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

//--- входные параметры
input int      TakeProfit=50;
input int      StopLoss=50;
input double   LotSize=0.1;
input int      Slippage=3;
input int      MagicNumber=5555;

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

//Ордер на покупку
OrderSend(_Symbol,OP_BUY,LotSize,Ask,MySlippage,Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,"Ордер на покупку",MagicNumber);

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

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

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

   if(TotalOpenOrders() == 0 && IsNewBar() == true)
   { 
      // Buy Logic
      if(Close[1] > Open[1] && Close[2] > Open[2] && Close[3] > Open[3])
      {
         //Ордер на покупку
         int ticket = OrderSend(_Symbol,OP_BUY,LotSize,Ask,MySlippage,0,0,"Ордер на покупку",MagicNumber);
            if(ticket<0)
            {
               Print("Ошибка #",GetLastError());
            }
            else
            {
               Print("Ордер размещен успешно");
            }
 
         // Изменяем наш ордер
         bool res = OrderModify(ticket,OrderOpenPrice(),Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,0,Blue);
            if(!res)
            {
               Print("Ошибка=",GetLastError());
            }
            else
            {
               Print("Ордер изменем успешно.");
            }
      }

Теперь наш код будет работать на всех ECN и не ECN брокерах.

Очистим наш код

Наш исходный код выглядит сейчас слишком сложным. Но мы можем его упростить. Для этого мы помещаем торговую логику и OpenOrder / ModifyOrder в пользовательскую функцию и вызываем ее в области OnTick().

   if(TotalOpenOrders() == 0 && IsNewBar() == true)
   { 
      // Проверяем параметры на вход
      if(BuySignal() == true)
         {
            OpenBuy();
         }
         }

Добавляем индикаторы

Теперь я покажу вам, как можно добавить индикаторы в наш торговый советник. Мы добавим индикатор RSI с фильтром скользящей средней.

Во-первых, нам нужны глобальные переменные для хранения значений наших индикаторов, чтобы мы могли работать с ними позже. Добавим их после MyPoint и MySlippage:

//--- индикаторы
double RSI;
double MA;

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

//Инициализируем индикаторы.
void InitIndicators()
{
   // Индикатор RSI
   RSI = iRSI(_Symbol,PERIOD_CURRENT,14,PRICE_CLOSE,1);
 
   // Скользящая средняя
   MA = iMA(_Symbol,PERIOD_CURRENT,200,0,MODE_SMA,PRICE_CLOSE,1);
}

Мы вызываем функции iRSI и iMA и сохраняем эти цены в переменных. В обоих функциях мы сначала используем текущий символ и таймфрейм, для которых мы хотим получить показания индикаторов. В нашем случае это символ и таймфрейм (период), к которому мы прикрепляем советник.

Для RSI мы хотим, чтобы период 14 рассчитывался по цене закрытия. Скользящая средняя должна быть периодом 200, Сдвиг 0. Что такое 1 в конце? Здесь мы определяем, от какой свечи мы хотим получать эти значения. 0 означает текущую свечу, 1 — предыдущую и т. д.

Чтобы эта функция работала, мы должны вызывать ее в разделе OnTick:

   if(TotalOpenOrders() == 0 && IsNewBar() == true)
   { 
      // Инициализируем индикаторы
      InitIndicators();
 
      // Сигнал на вход
      if(BuySignal() == true)
         {
            OpenBuy();
         }
   }

Теперь у нас есть все необходимые значения для создания нашей логики входа. Мы хотим открыть ордер на покупку, если RSI находится ниже уровня 30, а минимум предыдущей свечи находится выше скользящей средней:

// Вход на покупку
bool BuySignal()
{
   if(RSI <= 30 && Low[1] >= MA)
   {
      return(true);
   }
   else
   {
      return(false);
   }
}

Изменяем параметры индикаторов

На данный момент, если мы хотим изменить, скажем, период RSI от 14 до 20, мы должны сделать это в исходном коде. Теперь я покажу вам, как вы можете изменить все параметры индикаторов как обычный входной параметр в Свойствах эксперта. Для этого мы пишем:

//--- входные параметры
input int            TakeProfit=50;
input int            StopLoss=50;
input double         LotSize=0.1;
input int            Slippage=3;
input int            MagicNumber=5555;
 
//--- индикаторы
sinput string        indi = "";                // ------ Индикаторы -----  
input int            RSI_Period = 14;          // RSI период
input int            RSI_Level  = 30;          // Значение RSI
input int            MA_Period  = 200;         // MA период
input ENUM_MA_METHOD MA_Method  = MODE_SMA;    // MA метод

Теперь мы должны связать эти параметры с нашими индикаторами и торговой логикой. Для этого мы изменим наш код на следующий:

 // индикатор RSI
   RSI = iRSI(_Symbol,PERIOD_CURRENT,RSI_Period,PRICE_CLOSE,1);
 
   // Скользящая средняя
   MA = iMA(_Symbol,PERIOD_CURRENT,MA_Period,0,MA_Method,PRICE_CLOSE,1);
   if(RSI &lt;= RSI_Level &amp;&amp; Low[1] &gt;= MA)

Вот полный код нашего первого торгового советника:

//+------------------------------------------------------------------+
//|                                                  My First EA.mq4 |
//|                                     
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "https://traderblog.net/"
#property link      "https://traderblog.net/"
#property strict
 
//--- входные параметры
input int            TakeProfit=50;
input int            StopLoss=50;
input double         LotSize=0.1;
input int            Slippage=3;
input int            MagicNumber=5555;
 
//--- индикаторы
sinput string        indi = "";                // ------ Индикаторы -----  
input int            RSI_Period = 14;          // RSI период
input int            RSI_Level  = 30;          // Значение RSI
input int            MA_Period  = 200;         // MA период
input ENUM_MA_METHOD MA_Method  = MODE_SMA;    // MA метод
 
//--- глобальные переменные
double MyPoint;
int    MySlippage;
 
//--- индикаторы
double RSI;
double MA;
 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MyPoint = MyPoint();
   MySlippage = MySlippage();
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
   if(TotalOpenOrders() == 0 && IsNewBar() == true)
   { 
      // Инициализиуем индикаторы
      InitIndicators();
 
      // Проверяем ордер на покупку
      if(BuySignal() == true)
         {
            OpenBuy();
         }
 
   }
 
  }
//+------------------------------------------------------------------+
//| Пользовательские функции                                           
//+------------------------------------------------------------------+
 
 
// Инициализируем индикаторы
void InitIndicators()
{
   // индикатор RSI
   RSI = iRSI(_Symbol,PERIOD_CURRENT,RSI_Period,PRICE_CLOSE,1);
 
   // Скользящая средняя
   MA = iMA(_Symbol,PERIOD_CURRENT,MA_Period,0,MA_Method,PRICE_CLOSE,1);
}
 
 
// Логика на покупку
bool BuySignal()
{
   if(RSI <= RSI_Level && Low[1] >= MA)
   {
      return(true);
   }
   else
   {
      return(false);
   }
} 
 
// Размещаем ордер на покупку
void OpenBuy()
{
   // Open Buy Order
   int ticket = OrderSend(_Symbol,OP_BUY,LotSize,Ask,MySlippage,0,0,"Ордер на покупку",MagicNumber);
 
      if(ticket<0)
      {
         Print("Ошибка",GetLastError());
      }
      else
      {
         Print("Ордер успешно открыт");
      }
 
   // Modify Buy Order
   bool res = OrderModify(ticket,OrderOpenPrice(),Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,0);
 
      if(!res)
      {
         Print("Ошибка",GetLastError());
      }
      else
      {
         Print("Ордер успешно изменен.");
      }
}
 
 
// Рассчитываем котировки 
double MyPoint()
{
   double CalcPoint = 0;
 
   if(_Digits == 2 || _Digits == 3) CalcPoint = 0.01;
   else if(_Digits == 4 || _Digits == 5) CalcPoint = 0.0001;
 
   return(CalcPoint);
}
 
 
// Рассчитываем проскальзывание
int MySlippage()
{
   int CalcSlippage = 0;
 
   if(_Digits == 2 || _Digits == 4) CalcSlippage = Slippage;
   else if(_Digits == 3 || _Digits == 5) CalcSlippage = Slippage * 10;
 
   return(CalcSlippage);
}
 
 
// Проворяем свечу
bool IsNewBar()   
{        
   static datetime RegBarTime=0;
   datetime ThisBarTime = Time[0];
 
   if (ThisBarTime == RegBarTime)
   {
      return(false);
   }
   else
   {
      RegBarTime = ThisBarTime;
      return(true);
   }
}   
 
 
// Возвращаем количество открытых ордеров
int TotalOpenOrders()
{
   int total_orders = 0;
 
   for(int order = 0; order < OrdersTotal(); order++) 
   {
      if(OrderSelect(order,SELECT_BY_POS,MODE_TRADES)==false) break;
 
      if(OrderMagicNumber() == MagicNumber && OrderSymbol() == _Symbol)
         {
            total_orders++;
         }
   }
 
   return(total_orders);
}

В качестве примера для обучения решил начать с нуля создание собственного торгового советника. Для пущего привлечения читателей к своему детищу назову его Форекс-Грааль (Forex-Grail), слово «святой» (holy) от греха подальше опущу. Буду стараться делать код удобочитаемым, чтобы в дальнейшем было проще его расширять и искать ошибки. Итак, вперед.

Запускаем редактор Метаедитор (MetaEditor)  из поставки Метатрейдера 4 (Metatrader), до 5 версии думаю я еще не скоро дойду, а в нем «Мастер MQL», где выбираем из предлагаемого списка шаблон советника.

wizard-grail
Откроется окно среды разработки, приступим к наполнению исходника.
Первым делом назначим нашему советнику имя, номер версии, не забудем и копирайт и ссылочку на данный блог.

//+------------------------------------------------------------------+
//|                                                  Forex-Grail.mq4 |
//|                                     Copyright 2016, HomeTrade.ru |
//|                                             https://hometrade.ru |
//+------------------------------------------------------------------+
/*
Учимся писать советник.
Версия 1 - основные функции
*/
#define VERSION "1.00"
#property version VERSION
#property copyright "Copyright 2016, HomeTrade.ru"
#property link      "https://hometrade.ru"
#property strict
string ExpertName="Forex-Grail v."+VERSION;
Затем идут внешние переменные, отвечающие за настройку и оптимизацию советника
//внешние переменные extern int SlipPage = 3; //Проскальзывание extern int StopLoss = 20; //Стоп-лосс extern int TakeProfit = 20; //Тейк-профит extern int MagicNumber = 333; //Magic номер extern double StartLot = 0.1; // Размер лота для начала торгов extern double MaxLot = 1; //Максимально допустимый лот

Переменные MINLOT,MAXLOT нужны для корректировки возможного несоответствия наших желаний требованиям дилинг-центра. Эта проверка осуществляется в блоке OnInit(), который выполняется после загрузки советника в терминал. Также событие OnInit происходит при смене периода графика, валюты, после перекомпиляции или смене счета. Тут нужно размещать однократно изменяемые сущности.

//внутренние переменные
double MINLOT,MAXLOT;
bool expertStopped=false; //признак остановки эксперта
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//Если наши значения не попадают в пределы устанавливаемые брокером
MAXLOT = MarketInfo(Symbol(),MODE_MAXLOT);
MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
if (MaxLot>MAXLOT) MaxLot=MAXLOT;
if (StartLot<MINLOT) StartLot=MINLOT;

//корректируем некоторые значения для 5 или 3 значных котировок
if (Digits == 5 || Digits == 3)
{
TakeProfit *= 10;
StopLoss *= 10;

}

return(INIT_SUCCEEDED);
}

В функции OnDeinit ничего нет. Это событие возникает при закрытии графика, перед сменой валюты, при изменении входных параметров после перекомпиляции исходника, при смене счета ну и при выключении торгового терминала.

void OnDeinit(const int reason)
{

}

Основная логика советника реализована в блоке OnTick(), который выполняется при получении терминалом новых валютных котировок.
Вначале идет проверка на наличие у нас денег для торговли. Потому как без денег нужно вначале их найти, а не долбить сервер брокера невыполнимыми приказами, рискуя нарваться на блокировку счета.

void OnTick()
{
//если нет денег для торговли, сообщим об этом однократно
double margin= MarketInfo(NULL, MODE_MARGINREQUIRED);
if ( AccountFreeMargin() < margin)
{
if (expertStopped) return; //уже сообщали что не хватает денег. Чтобы не тревожить брокера
Print ("AccountFreeMargin= ",AccountFreeMargin()," margin= ",margin);
expertStopped=true;
return;
}

expertStopped=false;
Traiding(); //торговые операции
// ТОДО другие операции, например отслеживание - трейлинг - убыточных/профитных сделок, проверка условий на закрытие ордеров и т.п.

}

Далее идет функция Traiding(), в которой мы проверяем условия входа в сделку и при необходимости открываем их.

//Проверяем условия на открытие позиций, открываем позиции
void Traiding()
{
int direction,ticket;

if (TradesCount()>0) return; //уже есть открытые ордера

// куда будем открываться при отсутствии ордеров
if (Open[1]<Close[1])
direction=OP_BUY;
else direction=OP_SELL;

if (direction==OP_BUY)
{
ticket= MyOrderSend(Symbol(),OP_BUY,StartLot,NormalizeDouble(Ask,Digits),SlipPage,NormalizeDouble(Bid - StopLoss*Point,Digits),NormalizeDouble(Bid + TakeProfit*Point,Digits),ExpertName,MagicNumber,0,Blue);
}
else if (direction==OP_SELL)
{
ticket= MyOrderSend(Symbol(),OP_SELL, StartLot,NormalizeDouble(Bid,Digits), SlipPage, NormalizeDouble(Ask + StopLoss*Point,Digits),NormalizeDouble(Ask - TakeProfit*Point,Digits),ExpertName,MagicNumber,0,Green);
}

}

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

//Подсчитаем число открытых рыночных ордеров
int TradesCount() {
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) //пройдем по всем ордерам
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)==true) //смотрим только те что в рынке
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) //если мэджик номер и пара совпадают - это наш ордер
count++;
}
}
return (count);
}

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

//Впоследствии можно улучшить обработку ошибок с попытками их исправления, а пока просто аналог OrderSend
int MyOrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,
string comment=NULL,int magic=0,datetime expiration=0, color arrow_color=clrNONE)
{
int ticket=-1;
ticket=OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
if(ticket<0)
{
Print("Ошибка OrderSend:",GetLastError()," cmd=",cmd);
}

return ticket;
}

Хотелось бы заострить внимание на моменте выставления стоп-лосов и тейк-профитов. Зачастую в советниках встречается подобное:

OrderSend(Symbol(),OP_BUY,0.1,Ask,Slippage,Ask-lStop,Ask+dTake," коммент",0,0,clOpenBuy);

И это будет работать в большинстве случаев. Но иногда можете нарваться на ошибку 130 — неправильные стопы. Особенно если вы скальпер и несколько пипсов в сделке вам ох как важны. А все потому что стопы и тейки в длинной позиции нужно устанавливать не от Ask, а от Bid.
Запомним несколько простых, пусть и печальных для трейдера правил:
1) Брокер работает против вас, любая сделка открывается не в вашу пользу.
2) Продаем по заниженной против нас цене, а покупаем по завышенной.
3) ASK — цена по которой вы покупаете (для вас завышают цену), она выше цены, по которой вы же можете продать (А идет выше буквы B).
4) BID — цена по которой вы продаете (для вас занижают цену), она ниже цены, чем продают вам (буква B стоит ниже А)
5) Длинная позиция, покупка, открывается по невыгодной для вас цене ASK , соответственно закрытие длинной позиции, будь то стоп или профит, будет проходить как продажа вами по невыгодной для вас цене BID.
6) Короткая позиция, продажа, открывается по невыгодной для вас цене BID, соответственно её закрытие будет проводиться брокером как покупка вами по грабительской цене ASK.

Разница между ценами Ask и Bid называется спредом и является существенным заработком для брокеров, и иногда, при резких движениях торгового инструмента, она может существенно возрастать. Надеюсь, это небольшое отступление будет полезно для новичков.

Итак, вот в общем-то наш первый советник и готов. Пора приступить к испытаниям и открывать реальный торговый счет для загребания денег :).

strategy-tester-grail-1
К сожалению, график не внушает оптимизма, с Канарами придется повременить и продолжить работать головой. Постойте, раз на рынке только 25% времени существуют выраженные тренды, а оставшееся время валюты и сырье болтаются во флете, то может нам нужно не идти в направлении предыдущей свечи, а развернуться? Поменяем знак сравнения в if (Open[1]<Close[1]) чтобы получилось if (Open[1]>Close[1]) — в лонг идем при черной свече. И заново протестируем «грааль».

strategy-tester-grail-2

Стало значительно лучше, даже вышли в плюс. Кстати, почаще заглядывайте в журнал тестера на проверку наличия там ошибок. Лучше выявить и исправить их сразу при тестировании, чем после непонятных реальных финансовых потерь.
journal-grail

А если еще и провести оптимизацию значений
grail-input-opt
то можно получить вполне себе симпатичный график.
strategy-tester-grail-opt-2

На этой оптимистической ноте и закончим создание первой самостоятельной версии автоматического торгового советника Форекс-Грааль. И постоянного профита всем нам!

Продолжение находится здесь: вводим трейлинг-стоп.

Комментирование и размещение ссылок запрещено.

Программа для создания советника является не чем иным, как автоматизированным алгоритмом торговой стратегии. Если Вы имеете проверенную торговую стратегию Форекс, то при желании можете самостоятельно автоматизировать ее для MT4 и 5, превратив в торгового робота.

Однако чтобы создать советник для Metatrader, необходимо уметь пользоваться языком программирования «Meta Quotes Language», а это умеют делать далеко не все. Как раз для тех, кто не силен в программировании и предназначена программа для создания советника для MT4 и 5.

создаем советника в онлайне для MT4

Сегодня, Вы можете найти массу обучающих материалов на русском языке о том, как написать советник при помощи MQL, но как говорилось выше, новичкам разобраться во всем этом достаточно сложно, а ведь они, как и любой другой трейдер мечтают о создании своей собственной уникальной автоматизированной стратегии, то есть о советнике Форекс для Metatrader.

Поэтому мы хотим рассказать Вам о некоторых популярных на сегодняшний день программах для создания советников Форекс для MT4 и 5. Некоторые из них на русском языке, а некоторые если даже и не русифицированы, то понятны на интеллектуальном уровне, поэтому разобраться в них будет не сложно.

ВЫБИРАЙТЕ ЛУЧШИХ! ЭТИХ БРОКЕРОВ МЫ ПРОТЕСТИРОВАЛИ ДЛЯ ВАС:

Программа для создания советника Форекс «StrategyQuant» для MT4 и 5

Итак, начнем с того, что сама программа для создания советника StrategyQuant является универсальной, так как способна создавать сложные алгоритмы для Forex трейдинга и также опционной торговли и торговли акциями. Уникальность программы в том, что от самого трейдера не требуется каких либо знаний в области торговли и программирования. Результат использования данного алгоритма будет сохранен как советник для metatrader, причем с полным кодом.

Как же работает программа для создания советника StrategyQuant?

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

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

  • Stochastic, Momentum, RSI, CCI и тому подобных),
  • свечных паттернов («Доджи», «Падающая звезда», «Молот» и других),
  • нестандартных индикаторов,
  • временных показателей (определенные дни, часы) и так далее.

Затем необходимо выбрать валютную пару и промежуток времени, а также фильтр отбора прибыльных стратегий (допустимые просадки, прибыльность, убытки и тому подобное). Указав все интересующие нас параметры – запускаем генератор стратегий.

форекс, грамотное создание советника

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

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

Еще одна программа для создания советника «Ensed Cor», подходящего для MT4 и 5

По большому счету, любая программа для создания советника для  MT4 и 5 работает по аналогичным алгоритмам, и основными отличиями такого ПО являются дополнительные функции. Рассматриваемый нами программный конструктор Ensed Cor, предлагает использование минимального набора функций.

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

параметры программы

Примечательно еще и то, что данный конструктор может замечательно работать как с «заточенными» индикаторами metatrader-а, так и с версиями пользовательских алгоритмов. Просто нанесите на графическое окно инструмента необходимые индикаторы и сохраните шаблон, после чего загрузите его в Ensed Cor.

советник в метатрейдер, параметры

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

Неплохая разработка программы «Expert Advisor» для создания советника Forex

Терминал Metatrader 5, сравнительно недавно появился на рынке Форекс, поэтому на русском языке программ для создания под него советников пока нет. Но это не страшно, программа для создания советников и других алгоритмов Expert Advisor, хоть и не русифицирована (пока), но является интуитивно понятной, так как представляет собой графическую среду с набором уже готовых блоков торговли, позволяющих создать торгового робота буквально в считанные минуты, причем без навыка программирования.

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

Чтобы создать торгового робота при помощи программы Expert Advisor и начать торговать, нужно понять такие моменты:

модуль программный

Trading diagram (торговая диаграмма) является графическим представлением робота, которое отображает процесс принятия решений системой торговли. Такие диаграммы создают из специальных блоков, соединяющихся между собой. В результате получаются сложные торговые советники. Главное правильно задать параметры таких блоков и связать их между собой.

Итак, запускаем программу и на торговую диаграмму помещаем несколько блоков «Technical Analysis»:

запуск алгоритма для создания советников

Для определения торговых условий будущей стратегии, кликните по иконкам «ТА» мышкой и задайте параметры. К примеру, для открытия длинных позиций:

переключение в русский интерфейс

Для открытия коротких позиций:

обратные параметры

Далее, на диаграмму торговли поместим блоки «SELL» и «BUY»:

настраиваем русские данные

Теперь необходимо задать параметры «Stop Loss» / «Take Profit», а также величину «Trailing Stop» для блока «BUY»:

форекс советник, аналоговое создание

То же самое проделайте с блоком «SELL»:

zapolnyayem-ostatochnyye-parametry

Далее соединяем между собой все блоки и получаем диаграмму торговли:

выставление в программе параметров

После того, как Ваша диаграмма торговли будет готова, необходимо сгенерировать код торгового робота. Для этого следует выбрать в подменю главного меню пункт «Trading Diagram» и в выпадающем окошке активировать «Generate MQL5 Code»:

Также, программа полностью преобразует диаграмму торговли в работоспособный торговый робот. После того, как будет сгенерирован код советника, он станет доступным для работы с ним в терминале metatrader 5. Чтобы советник начал торговать просто запустите его на своем рабочем графике.

Программная разработка для создания советника «Gordago Forex Optimizer»

В заключение хотим рассмотреть еще одну программу современности – «Gordago Forex Optimizer». Данное ПО практически не отличается от платформы metatrader, при этом сам процесс создания программных модулей реализован достаточно удобно.

Окно для работы разделено на две области (верхняя/нижняя). В верхней Вы задаете параметры вхождения в рынок, а в нижней области, задаются условия, по которым ордера будут закрываться.

создание в спец программе советника

Как видите, все очень просто и понятно, хоть конструктор и не на русском. Все стратегии, данный конструктор сохраняет с расширением «.gso».

Создаем советник в программе Forex ЕА generator для MT4

Существует два варианта разработки автоматической торговой системы: написание советника по готовому алгоритму и использование специальных конструкторов. Первый вариант более эффективен, зато второй не требует знания кода. System Creator — это универсальный многофункциональный конструктор, позволяющий создавать вручную и генерировать целую армию торговых советников по базовым и пользовательским индикаторам с учетом личных правил риск-менеджмента. Также программа позволяет оптимизировать настройки только что созданных или уже существующих советников, оценивать их результативность по нескольким методикам стресс-тестирования. В этом обзоре вы познакомитесь с тем, как создавать с нуля свои автоматические торговые системы.

В этой статье мы разберем:

  • System Creator: создаем автоматическую торговую систему без знания кода
  • System Creator: обзор функционала и возможностей конструктора
  • Вывод

System Creator: создаем автоматическую торговую систему без знания кода

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

Есть два варианта создания советника по работающей торговой системе:

  • Заказать написание кода (или написать самому) по заданному торговому алгоритму. При знании MQL 4 или 5 это идеальный вариант. Но если знаний языка нет, будет непросто: сможет ли исполнитель правильно воплотить идею торговой системы? Как потом оптимизировать робота? И таких вопросов возникает много.
  • Создать роботов с помощью специальных программ, ведь навыков кодирования для этого не требуется. Пусть этот вариант немного ограничивает трейдера в возможностях (все-таки выше того, что заложено в программе, не прыгнешь), но он остается оптимальным вариантом для тех, кто хочет создать своего уникального советника.

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

Несколько его особенностей:

  • Советники создаются под МТ4.
  • Программа бесплатная (это плюс) и найти ее в интернете можно за 5 минут.
  • Установка программы занимает 2-3 минуты, но есть некоторые проблемы с совместимостью операционных систем. Я считаю, что причина в Windows. Точно утверждать, что это так, не берусь, но на одном из компьютеров ни одна из версий System Creator так и не запустилась.

System Creator: обзор функционала и возможностей конструктора

Первое, с чего стоит начать работу с конструктором — выбрать язык. Это можно сделать в меню View (вид). Следующий шаг — загрузить историю данных в главном окне «Исторический центр». Если при запуске окно исторического центра не появилось (то есть на мониторе только верхнее меню и серый экран), то вызвать его можно в меню «Рынок/Скачать архивные данные».

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Варианта скачивания архивных котировок три: с сервера, с МТ4 (куда автоматически подгружаются котировки) или с терминала JForex. Обратите внимание, что от качества котировок (их точности, отсутствия пропусков дат и т.д.) будет зависеть результативность советника, а точнее расхождение результатов торговли по историческим данным и на реальном счете:

  • Загрузка данных FSB Demo Data. Загрузка котировок с сервера разработчиков. Качество котировок здесь не лучшее. Для тренировки может быть и подойдет, но для создания реального работающего советника лучше рассмотреть другие варианты.
  • JForex. Платформа, разработанная компанией-брокером Dukascopy. По заверению разработчиков, это многофункциональная платформа для автоматической торговли с визуализацией стратегий и поддержкой интегрированной среды для разработки Java IDE. Упор здесь сделан на детализированные исторические данные, которые и предлагается подгрузить в System Creator. С сайта брокера котировки скачиваются в отдельную папку, к которой в конструкторе указывается путь.
  • МТ4. Предусматривает загрузку котировок с терминала. Теоретически этот вариант самый лучший, так как предполагает, что трейдер уже ответственно подошел к выбору котировок, загрузив их в свою платформу. Кроме того, все лучше делать с привязкой к одному брокеру: чьи торговые условия, у кого будет запускаться советник, того и котировки.

Особенность конструктора — ограничение количества баров истории в 1 млн.

Сразу отмечу комфортность работы с программой, а именно расположение меню и окон. Основных панелей меню две: «Файл/Редактор…» и панель со значками. Некоторые функции дублируются. Например, начать создавать стратегию можно с первой (самой левой) кнопки или вызвав чуть выше меню «Файл/Новый». Импорт и экспорт стратегий в МТ4/5 находится в меню «Стратегия». Все вызываемые функции (Исторический центр, шаблоны стратегий, конструктор новой стратегии и т.д.) открываются в отдельных окнах, которые расположены под меню.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Обратите внимание, что на рисунке выше есть вкладка со стратегией Demo, список которых можно увидеть в правом окне. Это уже готовые демо стратегии по стандартным индикаторам, заложенные разработчиками. Это сделано для того, чтобы пользователь увидел, как визуально выглядит готовая программа. Вызываются они путем нажатия кнопки «Проводник стратегий» в ленте настроек (меню с картинками).

В левом окне вы можете увидеть дополнительное меню, пункты которого меняются в зависимости от того, какое открыто основное окно. Например, на скрине выше основное окно — это окно новой стратегии, а слева в подменю «Редактор» дополнительные настройки. До них мы еще доберемся.

Еще несколько полезных функций:

  • Предусмотрена возможность корректировки открытого кода. То есть, если есть знания языка MQL, созданный советник можно доработать, добавив свои уникальные методы риск-менеджмента, трейлинг-стопы и т.д. (то, чего нельзя скомпоновать в конструкторе).
  • В System Creator предусмотрены журналы. В самой стратегии (на скрине выше в левом подменю в «Обзоре») журнал — это статистика записей сделок по готовой стратегии: транзакция, направление, цена лота, маржа и т.д. В нижней части журнал — это статистика действий трейдера, выходной лог, где отражается информация о том, что делает пользователь, ошибках и т.д. Подобный аналог есть и в МТ4.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

1. Настройки аккаунта

С этого начинается подготовка к работе. В верхнем меню нажимаем «Счет/Настройка аккаунта», тем самым вызывая отдельное окно «Панель управления». Здесь необходимо создать новый профиль, для чего нажимаем в левом подменю соответствующую кнопку, вводим имя профиля и описание. Возвращаемся во вкладку «Главная».

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Следующий шаг: в «Активном режиме» выбираем новосозданный профиль, их может быть создано сколько угодно. Зачем — это уже иной вопрос. Например, чтобы разграничивать кардинально разные типы стратегий.

В Панели Управления есть следующие подразделы:

  • Бэктестер. Предусматривает возможность автоматического закрытия сделки по маржин-коллу, чтобы наиболее приблизить тестирование к реальным условиям. Второй пункт позволяет работать на укороченных периодах. То есть если стратегия рассчитана на часовые периоды, для тестирования используются и периоды М1-М15. Рекомендую включить обе эти опции.
  • График Баланс/Капитал. Обе опции дополнительные и относятся к информационным. Первая, кроме основной линии прироста, выводит аналогичную статистику отдельно по длинным и коротким сделкам. Чтобы понимать, работает ли вообще стратегия, этого не нужно. Но для оптимизации этот момент важен: для стабильной торговой системы не важно, в какую сторону открыта сделка. То есть прибыль и по коротким, и по длинным позициям должна быть приблизительно одинакова. Во втором поле поставить галочку будет не лишним.
  • Программа. Это также вспомогательные функции, суть которых ясна из названия. Нужно ли их включать — решать вам.
  • Сетевые. Настройки прокси, которые каждый устанавливает индивидуально.

Только что вы находились в разделе «Главная». Теперь переходим в подменю «Источники данных» (опция расположена под разделом «Профиль» в левом окне).

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Здесь нужно добавить свой источник данных, где его взять — хороший вопрос, думаю, у каждого, кто занимается трейдингом, он есть. В окне есть также возможность загрузить источники с МТ4 или специального файла (который еще нужно создать), но нас эти варианты не интересуют. Лучше скачивать их с сайта брокера.

Следующий шаг — настраиваем счет. В левой панели (в Панели Управления) переходим во вкладку «Счет». В активном режиме снова выбираем созданный нами профиль, в данном случае LiteFinance. Дальше устанавливаем характеристики счета: минимальный депозит, валюту, плечо и т.д. Можно выбрать отображение статистики в валюте или пунктах.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Последний штрих — нажимаем на кнопку «Обновление», чтобы обновить все курсы валют из интернета. В принципе, здесь указываются те вводные данные, которые уже есть на старте у трейдера на реальном счете.

Во вкладке «Символы» можно добавить любые позиции, по которым есть обновленные котировки, выставить спред, своп по длинным и коротким позициям, шаг лота. Можно задать количество знаков после запятой, но по умолчанию оно уже сразу устанавливается правильно. Учтите, что своп обычно указывается в пунктах, хотя его можно выставить и в валюте. Чтобы максимально приблизить тестовые условия к реальным, можно добавить параметр проскальзывания. 

Где брать все эти значения? У брокера, с которым вы собираетесь работать. Из-за разных стартовых торговых условий одна и та же система с одинаковыми параметрами может давать разные результаты. То есть у кого-то будет работать, у кого-то нет. Например, слишком поздно открывать сделки из-за реквот, или же спред по инструменту будет мешать выходить на плановую прибыль. Потому советник обычно создается под конкретного брокера, у которого берутся данные по котировкам, спреду и т.д.

«Горизонт данных». Здесь указывается минимальное и максимальное число баров для анализа по историческим данным, а также количество тиков внутри баров. Также предусмотрена возможность указания даты начала и конца тестового периода. Увы, все диапазоны имеют жесткие ограничения, которые подойдут для формирования стратегий на таймфреймах Н1 и выше. Для минутных таймфреймов System Creator не подходит, стратегии на коротких периодах не будут иметь точности.

«Пользовательский код». Разработчики System Creator позаботились о том, чтобы пользователи имели доступ к внешним ресурсам, этакой базе данных, хранилищу всего самого основного. В этой вкладке можно перейти в это хранилище и получить доступ к десяткам уже готовых стратегий. Нужно ли это трейдеру, который сам составляет торговую систему? Вопрос риторический. Думаю, нет. Но вот что точно может понадобиться, так это дополнительные индикаторы, отличающиеся от базовых. Потому жмем «Перейти на форум индикаторов».

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Попав на сайт разработчиков, в верхнем меню нажимаем кнопку Repository, которая перенаправляет пользователя в раздел ручных торговых систем и индикаторов. В меню страницы выбираем соответствующее название «Индикаторы» и в предложенном списке выбираем тот, который заинтересовал. Наибольшая сложность с описанием особенностей работы индикатора и его настройками. Потому, если об индикаторе ничего не нашли, попробуйте рассмотреть другие варианты импорта индикаторов в System Creator. Правда, индикаторы с сайта разработчиков совместимы с конструктором, а вот с совместимостью инструментов, скачанных с других ресурсов, могут возникнуть проблемы.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Это скрин вкладки с индикатором с сайта разработчиков. Сейчас открыта вкладка с общей информацией. Рядом две вкладки с открытым кодом в двух его версиях в зависимости от языка, с которым можно познакомиться, не скачивая инструмент. Если индикатор подходит, то скачиваем обе его версии: MQL понадобится для Метатрейдера, С# — для конструктора. 

Теперь сворачиваем окна конструктора и сайта разработчиков, переходим к архиву System Creator, где кроме запускающего файла есть две папки. Заходим в «User Files/Indicators» и копируем туда скачанные файлы индикатора.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Краткое описание содержимого папок System Creator:

  • Code. Здесь хранятся все дополнения к конструктору. В первоначальной версии здесь только один файл по статистике счета, который при знании программирования можно подкорректировать. Тем, кто только начинает учиться создавать советники, здесь ничего трогать не нужно.
  • Data. Сюда копируются исторические данные, по которым будет строиться стратегия. Если вы уже нажимали кнопку обновления котировок, то они окажутся как раз в этой папке.
  • Indicators. Папка с индикаторами.
  • Libraries. Здесь хранятся уже скомпилированные индикаторы.
  • Logs. Здесь хранятся те же данные, которые отображаются в журнале конструктора, то есть история действий.
  • MT4 Files. Здесь находится подпрограмма (вспомогательная программа), устанавливающая связь между System Creator и МТ4. С ее помощью можно работать с советником на реальном счете через МТ4 непосредственно с System Creator. Запустить ее можно в System Creator в верхнем меню: «Торговля/Запуск установки Bridge».
  • Strategies. Сюда попадают стратегии, которые вы взяли (если захотели) с сайта разработчиков, ваши стратегии, демо-стратегии конструктора.
  • System. Системная папка, где можно добавить язык, которого нет в списке конструктора, или добавить какие-то свои уникальные слова. Здесь можно корректировать модули конструктора, их визуальное отображение и т.д. Правда, если есть знания кода и понимание того, как работает программа.

Чтобы загруженные индикаторы появились в списке конструктора, в Панели управления в Пользовательском коде (откуда был сделан вход на сайт разработчика) нажимаем кнопку «Обновить пользовательские индикаторы». Если индикаторы не появились, есть несовместимость. Кнопка «Тест пользовательских индикаторов» тоже пригодится — здесь конструктор проверяет адекватную работу индикатора (бывает, что индикатор отображается в списке, но может иметь сбой в коде). Если указано «ОК», индикатор рабочий.

«Приемлемость». Снова возвращаемся к панели управления. Это вкладка с настройками политики риск-менеджмента будущей стратегии. Здесь можно указать максимально допустимую просадку в валюте и процентах, минимальное и максимальное количество сделок и т.д. Позиции можно и вовсе отключить, если есть мнение, что они будут мешать.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

В следующей вкладке «Советник» указывается путь к папкам МТ4, куда будут выгружены советники. В «Настройках» предусмотрена еще одна возможность установки размера проскальзывания при открытии и закрытии ордеров в зависимости от спреда. «Автостарт» — вкладка для создания скрипта, который будет автоматически запускать советник в платформе. Нужно указать в поле название стратегии, скопировать советник в автозагрузку. 

2. Загрузка исторических данных

Вся информация по загрузке данных находится в меню «Исторический центр», о котором я писал выше и с которого начинается работа по созданию советника. Одна из интересных вкладок — «Статистика данных». Здесь отражается все, что использовано в отдельно взятой запущенной стратегии: статистика по котировкам, количество баров и т.д. Это одно из информационных полей, которое может быть использовано для анализа результатов советника.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Например, на скрине выше указана статистика по валютной паре EUR/USD с дневным таймфреймом (о чем также сообщает и журнал внизу экрана, если включить его отображение).

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

3. Создание стратегии

После того, как все настроено, загружены котировки, создан аккаунт, можно переходить к созданию стратегии. Жмем кнопку «Новая стратегия» и начинаем конструировать.

Появившееся окно также имеет левое меню вкладок и основные сектора: вводные параметры стратегии, суть самой стратегии, условия открытия/закрытия сделок, график индикаторов, статистика аккаунта, соотношение баланса и капитала. Обратите внимание, что мы сейчас находимся в подменю «Редактор» (выделен синим фоном как активная вкладка) в разделе «Builder» (меню расположено левее красной рамки на скрине ниже).

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Сначала указываем вводные данные во вкладках, выделенных на скрине красной рамкой. Выбираем профиль, источник котировок, актив, таймфрейм и метод тестирования — их в конструкторе пять. Отличаются они подходом к закрытию позиции. Например, в начале новой свечи стоп-лосс и тейк-профит оказываются внутри данного временного интервала. При пессимистическом методе тестирования активируется стоп-лосс, оптимистическом — тейк-профит. В режиме Shortest сделка закроется по движению на более младших периодах (смотря какой ордер попадется на пути первым), в режиме Nearest закрытие произойдет исходя из того, какой ордер ближе к цене открытия позиции, в режиме Random сделка закроется случайным образом.

Переходим к полю «Стратегия» на основном экране, где можно изменять и указывать характеристики стратегии. Щелкаем на «Свойства стратегии» два раза левой кнопкой мыши.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Свойства стратегии разбиты на три блока:

  • В первом блоке указывается размер лота и максимальный объем позиции.
  • Во втором блоке можно выставить дополнительные условия на вход. Например, открыть еще одну позицию, если основная сделка в плюсе. Или наоборот в минусе (построение сетки, сеточная стратегия). Можно уменьшать текущую позицию, закрывать ее при наступлении определенных событий полностью.
  • В третьем блоке можно указать фиксированные стоп-лосс и тейк-профит, указать множитель Мартингейла (коэффициент умножения размера следующей позиции при заданных условиях, например, закрытия предыдущей сделки в плюс).

Возвращаемся к основному полю стратегии. Ниже настроек самой торговой тактики расположены правила открытия и закрытия сделок (на последнем скрине они расположены ниже красной рамки). Нажимаем «Добавить логическое условие открытия» и попадаем в меню индикаторов, в котором представлены все инструменты как базовые самого конструктора, так и загруженные пользовательские. Здесь же можно указать настройки индикатора стратегии — все как у МТ4 (сдвиг, множители, периоды скользящих и т.д). Обратите внимание на то, как будет изменяться график соотношения баланса и капитала, реагирующий на любые изменения параметров индикаторов.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

В основе построения стратегии лежит «Логическая группа», которая объединяет множественные условия открытия сделок. Каждой группе можно присвоить имя и добавить в нее сколько угодно индикаторов. Таким образом можно составить торговый советник, открывающий сделки по нескольким разноплановым стратегиям. Правда, насколько такой подход эффективен, вопрос риторический. Ведь все стратегии не могут быть успешными и потому имеет смысл создать советники равные количеству стратегий, после чего отсеять нерабочие. И уже из рабочих при желании можно создавать единую автоматическую систему.

Отображение эффективности стратегии на графике происходит одной или несколькими линиями. Если на графике несколько линий, то это эквити, доходность коротких и длинных позиций (2 линии), общий прирост депозита. На последнем скрине график торговой системы показывает, что ее категорически нельзя применять: кроме того, что у нее видны резкие глубокие просадки, в конечном счете депозит уходит в ноль.

4. Генератор стратегий

Меню редактирования хорошо показывает себя тогда, когда человек понимает, что у него должно получиться и какую именно торговую систему он хочет построить. А как быть, если толком нет представления, как в принципе строится торговая система? Здесь на помощь приходит «Генератор» (вкладка Панели Управления). 

Главное окно «Генератора» почти такое же, как и в «Редакторе», но есть некоторые отличия. Во-первых, полностью другое верхнее меню (панель инструментов):

  • Общие параметры. Настройки генератора. Тем, кто создает советника впервые, настройки ордеров лучше оставить по умолчанию. Важным здесь являются позиции «Максимум логических слотов открытия/закрытия», то есть условий, при совпадении которых осуществляется вход в рынок.
  • Настройки. Здесь задаются вводные условия в отношении того, какую стратегию в результате хочет видеть трейдер: отношение прибыли к риску, минимальная просадка депозита и т.д. Важный здесь параметр — время на генерацию стратегии. Чем он больше, тем точнее результат. Например, по отзывам пользователей, для дневного таймфрейма подходит количество минут 360-400.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

  • Индикаторы. Здесь представлен весь набор индикаторов конструктора. Если снять галочку, то программа не будет использовать данный индикатор в стратегии. Снимать галочки или не снимать — личное предпочтение каждого, но хотя бы поверхностно, что они из себя представляют, придется разобраться.
  • Вне обработки. Здесь указывается количество котировок исторического периода от общего числа котировок, на котором будет проводиться форвардное тестирование. Форвард тест — это вид тестирования, который больше используется для оптимизации. Рынок переменчив и его поведение на данный момент может кардинально отличаться от того, что было 2-3 года назад даже при относительно похожих ситуациях. Потому считается, что оптимизировать советник нужно только по последнему периоду (не менее 3 месяцев). Это и называется форвард тестирование. 

И еще один момент, на который стоит обратить внимание. В правом верхнем углу каждого блока есть значок. Точнее, есть три его варианта отображения: он полностью отсутствует, отображен замок или что-то похожее на прямоугольник. 

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

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

После того, как все отметки в блоках сделаны, в нижней части окна нажимаем кнопку «Начало». Генерация может занимать от нескольких минут до нескольких часов (смотря какая выставлена точность, какой период, какие индикаторы и т.д.). 

Сгенерированную систему можно найти в меню «Вид/Хранилище». Нас интересует «Локальный репозиторий» (левое вертикальное меню), где хранятся все стратегии (как созданные, так и загруженные). Есть фильтрация, помогающая расположить стратегии в удобном порядке. Находим созданную стратегию (пока она одна, проблем с поиском нет) и смотрим ее статистику. Для этого в правом нижнем углу смотрим на пункт «Слоты стратегии», а затем «Статистика аккаунта».

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

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

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

Систему, которая кажется удачной, прогоняем на демо-счете МТ4 и сравниваем статистику терминала с тем, что рассчитал System Creator.

Сразу предупрежу: идеальных стратегий конструктор не выдаст. Например, в интернете есть отзывы тех, кто скрупулезно подошел к разработке и анализу систем, созданных программой. Из 600 сгенерированных и протестированных стратегий только около 80 оказались приемлемыми, только 10 из них успешно прошли форвардное тестирование и только 2-3 показали сравнительно терпимые результаты, достойные проверки на демо счете.

5. Оптимизатор стратегии

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

Возвращаемся во вкладку, где разрабатывалась (и генерировалась) стратегия и переходим в «Оптимизатор». Настроек здесь относительно немного. По аналогии с предыдущими меню здесь есть основное окно и верхняя панель инструментов. В панели выбираем «Настройки» и ставим галочки там, где это необходимо. Объяснять смысл каждого пункта, думаю, не стоит, они вполне понятны. В главном окне «Настройки оптимизации» корректируем настройки индикаторов так как считаем нужным, снова нажимаем «Начало» и ищем оптимизированную стратегию в Хранилище.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

6. Обзор

«Обзор» — это отдельная группа вкладок в левом вертикальном меню. Это еще одна из вариаций подачи статистической информации, но несколько в ином виде. Кому как удобнее. Его составляющие:

  • Обзор. Текстовое описание стратегии с логикой входа и выхода с рынка, детальным описанием работы индикаторов и т.д. Основной язык — английский. Если вы будете работать, например, с русским языком, то описание здесь все равно будет на 50% на английском (то есть на русском будут отдельные фразы, заголовки и статистика, на английском — описательная часть).
  • График баланса. Тот же самый график, который отображается в правом нижнем углу окна, только в увеличенном виде. Кроме основного окна графика, в верхней панели инструментов есть еще две вкладки, но информативности в них я не заметил.
  • Основной график. Здесь можно увидеть данные каждого используемого индикатора, цену открытия и закрытия по каждой позиции, уровни стопа (красная горизонтальная линия) и тейк-профита (зеленая линия). Вверху есть панель инструментов из 10-ти кнопок: наводите на кнопку и тут же видите, что она означает. Описывать каждую нет смысла.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

  • Журнал. Представляет собой полный список всех сделок с результатами и статистикой. Можно выгрузить в Excel (в редакторе удобнее сортировать и фильтровать данные).
  • Проводник бара. Более детальная статистика работы советника внутри каждого бара.

7. Анализ

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

«Компаратор». Открываем вкладку (действие, обязательное для каждого сгенерированного советника) и нажимаем кнопку «Начало». В первой половине статьи я вкратце рассказывал о методах закрытия сделки (оптимистический по тейк-профиту, пессимистический по стоп-лоссу и т.д.). В этой вкладке происходит сравнение графиков, построенных по разным методам. Если после проверки линия графика одна (или линий несколько, но они расположены близко друг к другу), значит все хорошо. Если есть расхождение, удаляйте стратегию и начинайте все заново — что-то пошло не так. Ниже пример такой стратегии с ошибкой.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

«Мультирынки». Еще один вариант стресс-теста созданной стратегии: проверка на то, будет ли система работать на других рынках. Считается, что показывающая прибыль система должна не оказаться убыточной на других. Вопрос спорный, но если на большинстве других активов прибыльность сохраняется — это говорит об устойчивости системы. Например, созданная мною стратегия, оказалась не очень устойчивой, так как почти на 50% других инструментов показала убыток (старт с 10 тыс., уменьшение депозита к концу периода). С другой стороны, хотя бы депозит полностью не обнулился, уже хорошо.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

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

«Монте Карло». Последний стресс-тест, который анализирует поведение советника в случае внезапного изменения поведения рынка. В верхнем меню есть две вкладки: Симуляторы и Опции. В них можно добавить такой форс-мажор, как случайный спред, случайные котировки и т.д. Задача — проверить результативность системы при наступлении разного рода случайностей. Самый важный результат — это нижняя линия графика, которая показывает, что теоретически может произойти в самом худшем случае. Если при худшем раскладе баланс по итогу оказался меньшим, я бы такую систему сразу удалял.  Например, если судить по результатам моей системы, то она балансирует на грани.

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

8. Автоторговля

System Creator предусматривает возможность торговли с помощью советника непосредственно из конструктора, не сохраняя программу в файл для МТ4. Своего рода экономия времени. Чтобы перейти в режим автоторговли, нужно переключиться с категории «Builder» в категорию «Trader» в левом вертикальном меню в самом верху над позицией «Редактор». Также нужно установить связь (мост, Bridge). Для этого в папке User Files/MT4 Files запускаем установочный файл Bridge Installer. После установки назначаем ID номер, который копируем в поле конструктора Set Connection ID и нажимаем кнопку «Начало». 

Если Автоторговля не интересует, тогда в меню «Стратегия» нажимаем «Сохранить как советник» и перегоняем сгенерированную стратегию в МТ4.

И последний штрих — копирование статистики по всему созданному портфелю в Excel. 

LiteFinance: Создание советника для форекс бесплатно с помощью System Creator | Litefinance

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

В общих чертах, думаю, принцип работы с программой понятен: вводим ключевые данные стратегии и риск-менеджмента, запускаем генерацию советника, анализируем статистику, оптимизируем. Вроде все кажется не таким уж и сложным. На практике все несколько сложнее. Во-первых, все существующие меню и вкладки описывать нет смысла — их гораздо больше. Во-вторых, разные версии программ (даже одна версия программы, но на разных языках) имеют отличия в интерфейсе и расположении меню. Отличия небольшие, но они есть. «Методом тыка» разобраться в программе можно, но простой ее не назовешь. Знающие английский язык могут воспользоваться инструкцией разработчиков по адресу.

Для тех, кто знает код, с System Creator открывается еще больше возможностей. Программа позволяет импортировать любые другие индикаторы, отличные от базовых. Главное, чтобы они были совместимы между собой.

Преимущества программы:

  • Неплохая «обучалка». Создавая торговую систему, трейдер глубже разбирается в ее структуре, учится оптимизировать параметры, видит визуальное отображение своих действий. В работе с советниками это все равно пригодится, а с System Creator это еще и в разы удобнее.
  • Помощник. Несмотря на критику сгенерированных стратегий, кое-что с его помощью создать получается. Правда, времени это занимает немало.
  • Дополнительный заработок. Полностью разобравшись в программе, можно пустить производство советников на конвейер, продавая их заинтересованным лицам.
  • Многофункциональность. System Creator — это конструктор, оптимизатор и тестировщик в одном лице. Аналогов, которые бы совмещали все эти функции в одной программе и были настолько удобны, я пока не видел.

Что не понравилось в программе:

  • Большой процент брака. Конструктор работает по заложенному алгоритму, потому логично, что при заданных критериях он выдает советники, которые даже на демо счете оказываются недееспособны. Не все, но многие. Стоит ли тратить время на оптимизацию и тестирование — вопрос риторический.
  • Неудобный поиск сгенерированных стратегий. Я не нашел возможности присваивать созданной системе имя и сортировать их, например, по алфавиту или дате создания.
  • Интересная программа, которая создает иллюзию простоты генерации прибыли. System Creator — это всего лишь программа, которая работает по заданному алгоритму. 

И еще хотелось бы акцентировать внимание на психологическом аспекте. Конструктор производит достаточно убедительное впечатление. Насыщенность индикаторами, возможность автоматической генерации торговых систем, стресс-тесты — все это кажется настолько убедительным, что к концу создания советника все эти цифры и графики вселяют в человека искреннюю веру в успех.  System Creator создает своего рода иллюзию возможности создания настоящего «Грааля». Но по факту все сгенерированные стратегии, прошедшие стресс-тесты, нуждаются в тщательном анализе. 

System Creator — это помощник, но не стоит возлагать на программу большие надежды. Это всего лишь один из вариантов создания автоматических торговых систем. Он имеет свои сильные и слабые стороны, требует времени, но при этом учит разбираться в нюансах настроек торговых систем.

Вывод

System Creator — конструктор, который хотя и далек от идеала, но это лучше, чем вообще ничего. Минусом является возможность генерации советников только на часовом и выше таймфреймах, но зато такие стратегии идеальны для трейдеров с небольшим опытом. Больше всего времени занимает оптимизация сгенерированной стратегии. Логично, что не все они будут работать на реальном счете, но при соблюдении технологии создания торговых систем и при их тщательном отборе можно получить вполне неплохой результат. В среднем на генерацию небольшой серии советников и отбор лучших из них уходит около недели.

Зачем скачивать уже отработавшие свое советники из интернета, если можно создавать свои? Скачиваем, устанавливаем и учимся работать с конструктором! Жду ваши отзывы, мнения, предложения и результаты в комментариях!


P.S. Понравилась моя статья? Поделись ей в соцсетях, это лучшее спасибо :)

Задавайте мне вопросы и комментируйте материал ниже. С удовольствием отвечу и дам необходимые пояснения.

Полезные ссылки:

  • Торговлю с проверенным брокером рекомендую попробовать тут. Система позволяет торговать самостоятельно или копировать сделки успешных трейдеров со всего мира.
  • Воспользуйтесь моим промокодом BLOG для получения бонуса 50% на депозит от LiteFinance. Промокод нужно просто ввести в соответствующее поле при пополнении счета в платформе LiteFinance и бонус зачислится одновременно с депозитом.
  • Чат трейдеров в телеграм: https://t.me/marketanalysischat. Делимся сигналами и опытом.
  • Канал в телеграм с отличной аналитикой, форекс обзорами, обучающими статьями и прочими полезностями для трейдеров: https://t.me/forexandcryptoanalysis

Создание советника форекс

Содержание данной статьи является исключительно частным мнением автора и может не совпадать с официальной позицией LiteFinance. Материалы, публикуемые на данной странице, предоставлены исключительно в информационных целях и не могут рассматриваться как инвестиционный совет или консультация для целей Директивы 2004/39 /EC.

Оцените данную статью:

{{value}}

( {{count}} {{title}} )

Понравилась статья? Поделить с друзьями:
  • Как написать собственный троян
  • Как написать собственный трек
  • Как написать собственный сюжет
  • Как написать собственный сценарий
  • Как написать собственный мессенджер