Создание нейросетевых торговых роботов на базе MQL5 Wizard и Hlaiman EA Generator

 

Создание нейросетевых торговых роботов на базе MQL5 Wizard и Hlaiman EA Generator

Создание нейросетевых торговых роботов на базе MQL5 Wizard и Hlaiman EA Generator

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

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

Для этого будет описан метод автоматической генерации нейросетевых советников-роботов MetaTrader 5 на базе MQL5 Wizard и Hlaiman EA Generator.

Выбор средств для решения поставленной задачи не случаен:

  1. MQL5 Wizard – это эффективный и наиболее быстрый на сегодняшний день механизм автоматической генерации MQL5 кода, который масштабируется с помощью дополнительных модулей.
  2. Hlaiman EA Generator — это нейросетевой движок с гибким механизмом объектной интеграции, который программируется непосредственно в MQL5 коде советника.

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

Общая характеристика

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

Кратко о средствах решения задачи. В отличие от Hlaiman, MQL5 Wizard — неоднократно освещался в статьях и документации, он, как и MetaTrader 5, в презентации не нуждается. Социально ориентированный проект Hlaiman предназначен для разработки и продвижения многопрофильного модульного программного обеспечения в виде плагинов, одним из которых и является EA Generator. Функционально, как уже указывалось выше, EA Generator представляет из себя нейросетевой движок и средства интеграции.

В состав Hlaiman EA Generator входит оболочка , которая представляет собой Windows GUI приложение с мультидокументным интерфейсом и плагины в виде динамически загружаемых компонентных библиотек. Система предоставляет широкий набор ручных и алгоритмических методов настройки и управления компонентами, как загружаемыми в составе плагинов, так и базовыми. В процессе ее работы можно создавать сложные древовидные структуры объектов и гибко управлять их методами и свойствами, как при помощи ручного диалога (Object Inspector), так и при помощи программных средств автоматизации, например скриптов.

Для интеграции Hlaiman EA Generator в MQL5 используется скриптовый интерпретатор Object Pascal, передача исходного кода осуществляется по именованным каналам Named Pipes, а в качестве главного нейросетевого компонента применяется многослойный персептрон MLP.

Интеграция Hlaiman EA Generator в MQL5 Wizard выполняется посредством модуля библиотеки сигналов SignalHNN.mqh. После автоматической генерации советники могут быть обучены торговле на любом количестве инструментов и таймфреймов. Для этого в терминале МetaТrader 5 можно вручную наносить на график цены графические объекты стрелок, указывающие на сигналы, или использовать скрипт TeachHNN.mq5 для автоматического нанесения, который так же автоматически запускает процесс обучения советника.

На этом теоретическое описание заканчивается и начинается практическая часть, которая состоит из двух разделов, а именно — «Как это работает» и «Как это устроено».

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

Как это работает

В MQL5.community, наверное, излишне напоминать, что для работы необходим терминал MetaТrader 5. Если он у вас не установлен — то скачайте и установите его. Также скачайте и установите демо-версию пакета Hlaiman EA Generator.

Запустите терминал МetaТrader 5 и MetaEditor. Войдите в мастер создания советников MQL5. Мастер MQL5 может быть вызван с помощью команды «Создать» в меню «Файл» или панели инструментов «Стандартная», а также при помощи горячих клавиш «Ctrl+N».

В окне мастера MQL5 выберите пункт «Советник (сгенерировать)» и нажмите «Далее».

Рис. 1. Создание советника в Мастере MQL5

Рис. 1. Создание советника в Мастере MQL5

Введите путь и имя советника, например «ExpertsSampleHNN», и нажмите «Далее».

Рис. 2. Общие параметры советника

Рис. 2. Общие параметры советника

Нажмите кнопку «Добавить». В появившемся окне «Параметры модуля сигналов» выберите модуль сигналов «Signals of patterns Hlaiman Neural Network EA generator» из выпадающего списка и нажмите «OK».

Рис. 3. Выбор модуля торговых сигналов Hlaiman Neural Network EA generator

Рис. 3. Выбор модуля торговых сигналов Hlaiman Neural Network EA generator

В самом простом случае реализации на оставшихся этапах мастера MQL5 можете нажимать «Далее». При необходимости вы также можете выбрать дополнительные опции советника.

По завершению процесса генерации кода нажмите кнопку «Компилировать» и закройте окно «MetaEditor». Созданный советник будет отображен в разделе «Советники» на панели «Навигатор» терминала МetaТrader 5.

Рис. 4. Советник SampleHNN

Рис. 4. Советник SampleHNN

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

Рис. 5. Подготовка к обучению нейросети

Рис. 5. Подготовка к обучению нейросети

Для обучения советника, на панели терминала «Навигатор» в разделе «Скрипты», выберите «TeachHNN» и активируйте его для выбранного графика.

Скрипт «TeachHNN», перед запуском должен быть соответствующим образом настроен. Для этого у него имеются следующие параметры:

  • Document name — наименование советника для обучения;
  • Neural layers — количество слоев в нейросети;
  • Middle neurons — количество нейронов;
  • Teaching epochs — количество эпох обучения;
  • Pattern bars — количество баров в паттерне;
  • Teaching a net? — запустить обучение нейросети (или просто создание сигналов);
  • SignalsCreate — автоматически создать графические изображения сигналов;
  • SignalsBarPoints — порог для создания сигнала в количестве пунктов;
  • SignalsBarsCount — количество баров для подсчета количества пунктов;
  • SignalsStartTime, SignalsEndTime — время начала и конца периода для создания сигналов;
  • SignalsClear — автоматически удалять изображения сигналов по завершению обучения.

Рис. 6. Параметры скрипта TeachHNN

Рис. 6. Параметры скрипта TeachHNN

Если все готово, жмите «OK» для запуска процесса обучения советника. Начнется автоматическое формирование графических паттернов по каждому из имеющихся на графике сигналов.

Информация об этом отображается в журнале «Эксперты» на панели «Инструменты» терминала, а в окне Hlaiman EA Generator появляются соответствующие объекты.

После завершения формирования паттернов начинается непосредственное обучение нейросети. Об этом сигнализирует появляющаяся на экране панель хода обучения.

Обучение Hlaiman EA Generator

Рис. 7. Панель процесса обучения

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

Сообщение об окончании обучения и работы скрипта будет отражено в журнале на вкладке «Эксперты». Например сообщение «Neural net create success! On 431 patterns» свидетельствует об успешном завершении обучения советника с использованием 431-го сигнала.

По сообщениям можно определить, сколько и какие номера паттернов участвовали в обучении. В частности, BUY и SELL определяются по сообщениям типа «Sell signal detected at pattern #211».

Журнал обучения Hlaiman EA Generator

Рис. 8. Сообщения скрипта TeachHNN в процессе обучения

Причины, по которым процесс обучения советника может запускается с ошибкой:

  1. Предварительно не была запущена программа Hlaiman. В этом случае будет отображено сообщение «CSignalHNN::InitHNN: Error! initializing pipe server (possible reason: HLAIMAN APPLICATION IS NOT RUNNING!)».
  2. Отсутствие стрелок, обозначающих сигналы на графике, при отключенной автогенерации сигналов (переменная SignalsCreate = false). В этом случае будет отображено сообщение «OnStart: error, orders arrow not found!». При включенной автогенерации сигналов (переменная SignalsCreate = true) ошибку может вызывать наличие на графике других графических объектов, так как в программе предполагается не портить пользовательские разметки. Поэтому для автогенерации сигналов рекомендуется открывать все графики отдельно.

После обучения советника можно просмотреть его результаты. Для этого вам необходимо перейти в GUI Hlaiman и выбрать соответствующие объекты и панели визуализации.

Рис. 9. Вкладка

Рис. 9. Вкладка «Text» программы Hlaiman

Рис. 10. Вкладка

Рис. 10. Вкладка «Graph» программы Hlaiman

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

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

Рис. 11. Настройки тестирования советника SampleHNN на исторических данных

Рис. 11. Настройки тестирования советника SampleHNN на исторических данных

Рис. 12. Внешние переменные советника SampleHNN могут быть изменены

Рис. 12. Внешние переменные советника SampleHNN могут быть модифицированы

Ниже приведен пример отчета по работе советника в тестере стратегий. Советник был обучен по автоматически сгенерированным сигналам, все внешние параметры обучающего скрипта выставлены по умолчанию, период обучения — 01.01.2010-01.07.2013 по инструменту EURUSD H4.

Отчет Тестера стратегий

Советник: SampleHNN
Символ: EURUSD
Период: H4 (2010.01.01-2013.07.12)
Валюта: USD
Начальный депозит: 10 000.00
Плечо: 0,111111111
Бэктест
Качество истории: 100%
Бары: 5497
Чистая прибыль: 9 159.58
Общая прибыль: 29 735.97
Общий убыток: -20 576.39
Прибыльность: 1.45
Фактор восстановления: 12.81
AHPR: 1.0005 (0.05%)
GHPR: 1.0005 (0.05%)
Всего трейдов: 1417
Всего сделок: 2246
Тики: 60211228
Абсолютная просадка по балансу: 0.00
Максимальная просадка по балансу: 679.98 (3.81%)
Относительная просадка по балансу: 4.00% (715.08)
Матожидание выигрыша: 6.46
Коэффициент Шарпа: 0.16
LR Correlation: 0.98
LR Standard Error: 595.06
Короткие трейды (% выигравших): 703 (56.61%)
Прибыльные трейды (% от всех): 793 (55.96%)
Самый большой прибыльный трейд: 53.00
Средний прибыльный трейд: 37.50
Максимальное количество непрерывных выигрышей: 9 (450.38)
Максимальная непрерывная прибыль: 450.38 (9)
Средний непрерывный выигрыш: 2
Символы: 1
Абсолютная просадка по средствам: 6.60
Максимальная просадка по средствам: 715.08 (4.00%)
Относительная просадка по средствам: 4.00% (715.08)
Уровень маржи: 6929.24%
Z-Счет: -1.24 (78.50%)
Результат OnTester: 0
Длинные трейды (% выигравших): 714 (55.32%)
Убыточные трейды (% от всех): 624 (44.04%)
Самый большой убыточный трейд: -53.30
Средний убыточный трейд: -32.97
Максимальное количество непрерывных проигрышей: 9 (-234.00)
Максимальный непрерывный убыток: -276.67 (7)
Средний непрерывный проигрыш: 2

Рис. 13. Результаты тестирования советника SampleHNN на исторических данных

Рис. 13. Результаты тестирования советника SampleHNN на исторических данных

Рис. 14. Статистика входов советника SampleHNN

Рис. 14. Статистика входов советника SampleHNN

Рис. 15. Корреляция прибыли и MFE/MAE советника SampleHNN

Рис. 15. Корреляция прибыли и MFE/MAE советника SampleHNN

Рис. 16. Статистика времени удержания позиции советника SampleHNN

Рис. 16. Статистика времени удержания позиции советника SampleHNN

Как это устроено

Главным компонентом программной реализации на MQL5 является класс CSignalHNN, описанный в модуле сигналов SignalHNN.mqh. Класс наследован от базового класса CExpertSignal и включает в себя все необходимые поля данных и методы для работы и интеграции Hlaiman, а также для работы с советниками, создаваемыми с помощью мастера MQL5.

Шаблон класса выглядит следующим образом:

//+------------------------------------------------------------------+ //| Class CSignalHNN. | //| Purpose: Class of generator of trade signals based on | //| the 'Hlaiman EA Generator Neural Net' indicator. | //| Is derived from the CExpertSignal class. | //+------------------------------------------------------------------+ class CSignalHNN :public CExpertSignal < protected: //--- variables int m_hnn; // handle of HNN connect string hnn_path; // MT5 Terminal data path string hnn_fil; // HNN file w neural net string hnn_nam; // Expert name string hnn_sym; // Symbol name string hnn_per; // Period name ENUM_TIMEFRAMES hnn_period; // Period timeframe int hnn_index; // Index ext multinet int hnn_bar; // index of last bar int hnn_in; // input layer int hnn_out; // output layer int hnn_layers; // layers count int hnn_neurons; // neurons count int hnn_epoch; // learn epoch double hnn_signal; // value of last signal double pattern[]; // values of the pattren bool hnn_norm; // normalize pattern public: CSignalHNN(void); // class constructor ~CSignalHNN(void); // class destructor //--- methods of setting adjustable parameters void PatternBarsCount(int value) < hnn_in = value; ArrayResize(pattern, value + 1); > void LayersCount(int value) < hnn_layers = value; > void NeuronsCount(int value) < hnn_neurons = value; > void EpochCount(int value) < hnn_epoch = value; > void Normalize(bool value) < hnn_norm = value; > //--- method of verification of settings virtual bool ValidationSettings(void); //--- method of creating the indicator and timeseries virtual bool InitIndicators(CIndicators *indicators); //--- methods of checking conditions of entering the market virtual double Direction(void); bool FillPattern(datetime tim = 0); // prepare pattern bool AddPattern(string name, int ptype); // add new pattern bool TeachHNN(void); // learn neural net bool SaveFileHNN(void); // neural net file double CalculateHNN(void); // calc neural signal //protected: //--- method of initialization of the Hlaiman Application bool InitHNN(bool openn); // Hlaiman App Init void FreeHNN(void) < // Hlaiman App Deinit if(m_hnn!=0 && m_hnn!=INVALID_HANDLE) < FileClose(m_hnn); m_hnn=0; > >; >;

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

  1. Режим обучения: в этом режиме происходит сбор рыночных паттернов и обучение нейросети.
  2. Режим индикатора: в данном режиме по текущему паттерну рассчитывается сигнал нейросети.

Идентификация режима происходит при вызове метода инициализации InitHNN посредством булевского параметра openn. Причем истинное значение этого параметра инициирует поиск и открытие файла данных уже обученной нейросети, его загрузку и работу в режиме индикатора (2). Этот режим является рабочим и используется в советнике для торговли.

В отличие от режима обучения (1), который инициируется при вызове метода InitHNN с параметром openn=false, этот режим индикатора является для советника подготовительным и используется для работы обучающего скрипта.

Реализация метода инициализации выглядит следующим образом:

//+------------------------------------------------------------------+ //| Initialize HNN | //+------------------------------------------------------------------+ bool CSignalHNN::InitHNN(bool openn) < //--- initialize Hlaiman Application int num=0; ulong res=0; if(m_symbol!=NULL) < hnn_sym=m_symbol.Name(); hnn_period=m_period; >else < hnn_sym=_Symbol; hnn_period=_Period; > hnn_per = string(PeriodSeconds(hnn_period) / 60); hnn_fil = hnn_nam + NAME_DELIM + hnn_sym + hnn_per + NAME_DELIM + string(hnn_index) + TYPE_NEURO; if(m_hnn== 0|| m_hnn == INVALID_HANDLE) m_hnn=FileOpen(HLAIMAN_PIPE,FILE_READ|FILE_WRITE|FILE_BIN); if(m_hnn!=0 && m_hnn!=INVALID_HANDLE) < string source,result=""; if(openn==true) < result=CON_OPENN+CON_TRUE; if(!FileIsExist(hnn_fil,FILE_READ)) < if(FileIsExist(hnn_fil,FILE_READ|FILE_COMMON)) hnn_fil=TerminalInfoString(TERMINAL_COMMONDATA_PATH)+PATH_FILES+hnn_fil; else < // hnn_fil = hnn_path + PATH_MQL5 + PATH_FILES + hnn_fil; hnn_fil=TerminalInfoString(TERMINAL_DATA_PATH)+PATH_MQL5+PATH_FILES+hnn_fil; > > else hnn_fil=TerminalInfoString(TERMINAL_DATA_PATH)+PATH_MQL5+PATH_FILES+hnn_fil; > else < result=CON_OPENN+CON_FALSE; hnn_fil=TerminalInfoString(TERMINAL_DATA_PATH)+PATH_MQL5+PATH_FILES+hnn_fil; > source="unit InitHNN; Interface "+result+" var libr, term, exp, sym: TObject;" " Implementation function main: integer;nr" // Line #1 " begin" " Result := 0;" " libr := Open('mt45.dll');nr" // Line #2 " if (libr <> nil) then" " begin" " term := Open('"+hnn_path+"');nr" // Line #3 " if (term <> nil) then" " begin" " exp := term.ObjectOfName('"+hnn_nam+"');" " if (exp = nil) then exp := term.AddObject('TMT45Expert');nr" // Line #5 " if (exp <> nil) then" " begin" " if (exp.Name <> '"+hnn_nam+"') then exp.Name := '"+hnn_nam+"';nr" // Line #6 " sym := exp.ObjectOfName('"+hnn_sym+hnn_per+"');" " if (sym = nil) then sym := exp.AddObject('TMT45Symbol');" " if (sym <> nil) then" " begin" " sym.Log.Add('"+hnn_sym+hnn_per+"');nr" " if (sym.Name <> '"+hnn_sym+hnn_per+"') then sym.Name := '"+hnn_sym+hnn_per+"';" " if (sym.Period <> "+hnn_per+") then sym.Period : string">";" " if (openn = true) then" " begin" // " sym.Log.Add('" + hnn_fil + "');" " if (sym.Open('"+hnn_fil+"')) then Result := sym.TeachInput;nr" // ret input Line #8 " end else" " begin" " sym.TeachInput : functions">IntegerToString(hnn_in)+";" " sym.TeachOutput : functions">IntegerToString(hnn_out)+";" " sym.TeachLayer : functions">IntegerToString(hnn_layers)+";" " sym.TeachNeurons : functions">IntegerToString(hnn_neurons)+";" " sym.TeachEpoch : functions">IntegerToString(hnn_epoch)+";" " sym.FileName := '"+hnn_fil+"';" " Result := sym.TeachInput;nr" // ret input Line #9 " end;" " end;" " end;" " end;" " end;" " end; end."; FileWriteString(m_hnn,source,StringLen(source)); FileFlush(m_hnn); while(res0 && (MQL5InfoInteger(MQL5_TESTER) || numSleep(SLEEP_TIM); res=FileSize(m_hnn); num++; > if(res>0) < result=FileReadString(m_hnn,int(res/2)); res=StringToInteger(result); if(res<=RES_OK) printf(__FUNCTION__+": Error! Initialization data(possible reason: FILE NOT EXIST OR CORRUPTED "+hnn_fil); else < printf(__FUNCTION__+": Initialization successful! NEURAL PATTERN "+string(res)); ArrayResize(pattern,int(res+1)); return(true); > > else printf(__FUNCTION__+": Error! pipe server not responding(possible elimination: RESTART HLAIMAN APPLICATION)"); > else printf(__FUNCTION__+": Error! initializing pipe server (possible reason: HLAIMAN APPLICATION IS NOT RUNNING!)"); //--- ok return(false); >

Как видно из кода, на первом шаге инициализации делается попытка открыть именованный канал для установки связи с приложением Hlaiman. Если это не удается (например, когда не запущен), то осуществляется выход с отрицательным статусом. На втором шаге (при удачном завершении первого и рабочем режиме индикатора) происходит просмотр локальных и общих папок терминала с целью поиска соответствующего имени файла с данными нейросети. На третьем шаге выполняется подготовка текста кода на языке ObjectPascal (Delphi) для инициализации непосредственно в приложении Hlaiman.

Читать статью  Торговые советники (роботы) для Форекс: что это и реально ли на них зарабатывать

Текст кода помещается в строку source. Для удобства форматирования он разбит с помощью перевода каретки «nr» на подстроки и содержит обращения к свойствам и методам объектов Hlaiman (см. комментарии). Объектная среда MetaTrader 5 Hlaiman плагина, как определено в тексте, построена в иерархическую древовидную структуру, в корне которой находится объект самого плагина.

На следующем уровне находится объект терминала МetaТrader 5, затем — объекты советников и символов. При удачной трансляции и выполнении исходного кода, переданного по именованному каналу, в возвращаемом значении Result будет получено количество элементов входного вектора нейросети. Это значение, как видно из кода, используется для инициализации массива паттерна, и выполнение метода завершается с положительным статусом.

Следующими ключевыми методами класса CSignalHNN являются CalculateHNN, AddPattern и TeachHNN, первый из которых возвращает результат расчета нейросети в режиме индикатора. Вторые два используются в режиме обучения для пополнения коллекции при сборе паттернов и запуске процесса обучения нейросети соответственно.

Реализация указанных методов в файле выглядит следующим образом:

//+------------------------------------------------------------------+ //| Calculate HNN signal | //+------------------------------------------------------------------+ double CSignalHNN::CalculateHNN(void) < if(m_hnn==0 || m_hnn==INVALID_HANDLE) return(0.0); int num = 0; ulong siz = 0; double res=0.0; string source,result=""; if(FillPattern(0)==true) < result=CON_START; for(int i=1; i<(ArraySize(pattern)-1); i++) result= result+DoubleToString(pattern[i])+CON_ADD; result = result + DoubleToString(pattern[ArraySize(pattern) - 1]) + CON_END; source = "unit CalcHNN; Interface " + result + " var i: integer; libr, term, exp, sym, lst: TObject;" " Implementation function main: double;nr" // Line #1 " begin" " Result := 0.0;" " libr := Open('mt45.dll');nr" // Line #2 " if (libr <> nil) then" " begin" " term := Open('"+hnn_path+"');nr" // Line #3 " if (term <> nil) then" " begin" " exp := term.ObjectOfName('"+hnn_nam+"');nr" // Line #4 " if (exp <> nil) then" " begin" " sym := exp.ObjectOfName('"+hnn_sym+hnn_per+"');nr" // Line #5 " if (sym <> nil) then" " begin" " lst := TStringList.Create;" " if (lst <> nil) then" " begin" " lst.Text := cons;" " if (lst.Count >= sym.NetInputs.Count) then" " begin" " for i := 0 to sym.NetInputs.Count - 1 do" " begin" " sym.NetInputs.Objects[i].NetValue := StrToFloat(lst[i]);nr" // Line #6 // " sym.Log.Add('Input ' + IntToStr(i) + ' = ' + lst[i]);" " end;" " sym.Computed := true;" " Result := sym.NetOutputs.Objects[0].NetValue;nr" // ret input Line #7 " end;" " lst.Free;" " end;" " end;" " end;" " end;" " end;" " end; end."; FileWriteString(m_hnn,source,StringLen(source)); FileFlush(m_hnn); while(siz0 && (MQL5InfoInteger(MQL5_TESTER) || numSleep(SLEEP_TIM); siz=FileSize(m_hnn); num++; > if(siz>0) < result=FileReadString(m_hnn,int(siz/2)); res=StringToDouble(result); > > //else Print("fill pattern error!"); return(res); > //+------------------------------------------------------------------+ //| AddPattern | //+------------------------------------------------------------------+ bool CSignalHNN::AddPattern(string name,int ptype) < int num=0; long res=0; ulong siz=0; string result,source,nam=name; if(m_hnn!=0 || m_hnn!=INVALID_HANDLE) < pattern[0]=ptype; result=CON_START; for(int i=0; i<(ArraySize(pattern)-1); i++) result= result+DoubleToString(pattern[i])+CON_ADD; result = result + DoubleToString(pattern[ArraySize(pattern) - 1]) + CON_END; source = "unit AddPatternHNN; Interface " + result + " Implementation function main: integer;" " var i: integer; out: double; onam: string;" " libr, term, exp, sym, ord, tck, lst: TObject;nr" // Line #1 " begin" " Result := 0;" " libr := Open('mt45.dll');nr" // Line #2 " if (libr <> nil) then" " begin" " term := Open('"+hnn_path+"');nr" // Line #3 " if (term <> nil) then" " begin" " exp := term.ObjectOfName('"+hnn_nam+"');nr" // Line #4 " if (exp <> nil) then" " begin" " sym := exp.ObjectOfName('"+hnn_sym+hnn_per+"');nr" // Line #5 " if (sym <> nil) then" " begin" " lst := TStringList.Create;" " if (lst <> nil) then" " begin" " lst.Text := cons;" " if (lst.Count >= (sym.TeachInput + sym.TeachOutput)) then" " begin" " out := StrToFloat(lst[0]);" " if(out >= 0) then onam := 'BUY-"+nam+"'" " else onam := 'SELL-"+nam+"';" " ord := sym.ObjectOfName(onam);" " if (ord = nil) then ord := sym.AddObject('TMT45Order');nr" // Line #6 " if (ord <> nil) then" " begin" " if (ord.Name <> onam) then ord.Name := onam;nr" // Line #7 " if (out >= 0) then ord.OrderType := 0 else ord.OrderType := 1;" " if (ord.NetOutput <> out) then ord.NetOutput := out;nr" // Line #8 " for i := 1 to sym.TeachInput do" " begin" " if(i " tck := ord.AddObject('TMT45Tick');nr" // Line #10 " if (tck <> nil) then" " begin" " tck.x := i;" " tck.y := StrToFloat(lst[i]);nr" // Line #11 " end;" " end;" " end;" " Result := sym.Count;nr" // ret input Line #12 " end;" " lst.Free;" " end;" " end;" " end;" " end;" " end;" " end; end."; FileWriteString(m_hnn,source,StringLen(source)); FileFlush(m_hnn); while(siz0 && (MQL5InfoInteger(MQL5_TESTER) || numSleep(SLEEP_TIM); siz=FileSize(m_hnn); num++; > if(siz>0) < result=FileReadString(m_hnn,int(siz/2)); res=StringToInteger(result); > > return(res>0); > //+------------------------------------------------------------------+ //| TeachHNN | //+------------------------------------------------------------------+ bool CSignalHNN::TeachHNN(void) < int num=0; long res=0; ulong siz=0; string result,source; if(m_hnn!=0 || m_hnn!=INVALID_HANDLE) < source="unit TeachHNN; Interface const WAIT_TIM = 100; WAIT_CNT = 100;" " var i: integer; libr, term, exp, sym: TObject;" " Implementation function main: integer;nr" // Line #1 " begin" " Result := 0;" " libr := Open('mt45.dll');nr" // Line #2 " if (libr <> nil) then" " begin" " term := Open('"+hnn_path+"');nr" // Line #3 " if (term <> nil) then" " begin" " exp := term.ObjectOfName('"+hnn_nam+"');nr" // Line #4 " if (exp <> nil) then" " begin" " sym := exp.ObjectOfName('"+hnn_sym+hnn_per+"');nr" // Line #5 " if (sym <> nil) then" " begin" " if (sym.Teached) then sym.Teached := false;nr" // Line #6 " sym.Teached := true;nr" // Line #7 " Result := sym.Count;nr" // ret input Line #8 " end;" " end;" " end;" " end;" " end; end."; FileWriteString(m_hnn,source,StringLen(source)); FileFlush(m_hnn); while(siz0) // && (MQL5InfoInteger(MQL5_TESTER) || num < WAIT_TIMES)) Sleep(SLEEP_TIM); siz=FileSize(m_hnn); num++; > if(siz>0) < result=FileReadString(m_hnn,int(siz/2)); res=StringToInteger(result); > > return(res>0); >

Как видно из кода, тело методов в основном состоит из строк source, текст которых построен аналогично тем, что рассмотрены выше при описании метода InitHNN. Отличие состоит в том, что в объектной иерархии плагина для олицетворения паттернов добавлены два уровня — ордер и тик. Кроме того, в коде используются дополнительные свойства и методы объектов. Так для запуска расчета нейросети взводится флаг Computed объекта «символ», а для запуска обучения — флаг Teached.

Отличием в CalculateHNN от других методов является также тип возвращаемого функцией main значения — теперь он double. Это значение как раз и является откликом нейросети — сигналом, где в диапазоне 0..1 находится уровень BUY, а в диапазоне 0..-1 — уровень SELL. Контроль этого сигнала, который используется советником для принятия решений об открытии или закрытии соответствующих торговых позиций, осуществляется посредством метода Direction. Он отвечает за пересчет при появлении нового бара и возвращает его значение в процентном выражении.

//+------------------------------------------------------------------+ //| Check conditions for trading signals. | //+------------------------------------------------------------------+ double CSignalHNN::Direction(void) < if( m_hnn == 0 || m_hnn == INVALID_HANDLE) return(EMPTY_VALUE); //--- check new bar condition int cur_bar = Bars(hnn_sym, hnn_period); if (hnn_bar != cur_bar) < //--- condition OK hnn_signal = CalculateHNN() * 100; hnn_bar = cur_bar; > return(hnn_signal); >

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

  • input int Signal_ThresholdOpen =10; // Signal threshold value to open [0. 100]
  • input int Signal_ThresholdClose=10; // Signal threshold value to close [0. 100]

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

Выводы

Использование Hlaiman EA Generator предоставляет компоненты и прозрачную контролируемую объектную среду интеграции в MQL5, при этом:

  1. В интерфейсе MQL5 Wizard появляется дополнительный тип, основанный на распознавании паттернов и сигналов, а также возможность генерации нейросетевых советников-роботов.
  2. Быстро создаваемые нейросетевые советники так же быстро могут быть адаптированы к изменениям рынка и многократно подвергаться обучению на различных торговых инструментах и таймфреймах.
  3. Благодаря возможности MQL5 Wizard подключать несколько модулей сигналов, можно создавать сложные мультивалютные нейросетевые советники иили комбинированные индикаторно-нейросетевые советник. Также их можно комбинировать с различными дополнительными фильтрами, например, временными.
  4. Наконец, сам нейросетевой модуль можно использовать в качестве дополнительного фильтра для повышения эффективности уже готового рабочего советника. Для этого служит возможность обучения нейросети на графиках визуализации результатов теста исходного советника.

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

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

Ознакомительную версию программы Hlaiman EA Generator можно скачать по ссылке.

  • SignalHNN.mqh — модуль сигналов «MQL5IncludeExpertSignal».
  • TeachHNN.mq5 — обучающий скрипт «MQL5Scripts».
  • SampleHNN.mq5 — торговый советник на базе модуля торговых сигналов «Signals of patterns Hlaiman Neural Network EA generator», созданный при помощи MQL5 Wizard.

System Creator: армия роботов не вставая с дивана

При запуске программы открывается стартовая страничка. Поле 1 предназначено для быстрого доступа к сохраненным вами ранее стратегиям. Естественно, при первом запуске оно будет пустым. Поле 2 – лента рабочих инструментов. Помимо опций создания новой стратегии, сохранения и закрытия текущей, тут вы найдете также кнопочку экспорта вашей стратегии прямо в терминал MT4 в виде готового советника с открытым кодом, который вы можете при желании отредактировать (добавить тралы, варианты мани менеджмента и так далее). Но, конечно же, лишний раз вставать с дивана не обязательно – все будет хорошо работать и в текущем виде. Также в левой части ленты вы можете увидеть кнопки различных инструментов, о которых мы поговорим ниже. Меню (3) содержит выпадающие списки различных инструментов и настроек, но чтобы сразу вам не забивать голову, мы тоже оставим их на потом. А вот поле 4 довольно интересное. Оно содержит всего три кнопки: New Strategy (создать новую стратегию, при нажатии на которую откроется соответствующее окно), Open Strategy (открывает окно с уже готовыми вашими стратегиями) и Repository Strategies (открывает окно с длинным списком демо-стратегий с сайта авторов программы). В поле 5 вы найдете готовые демо-стратегии. В поле 6 можно найти справку по программе, на английском языке, разумеется. Поле 7 содержит три галочки. Первая позволяет отключить при последующих запусках стартовое окно, вторая отвечает за автосохранение, третья позволяет автоматически закрывать стартовое окно при открытии пользователем необходимой стратегии. Ну и поле 8 – это журнал, аналог журнала в терминале. Сюда пишутся все сообщения о предпринимаемых пользователем действиях, ошибках и прочая информация.

Подготовка к использованию

Многие из вас не так уж и хорошо знают иностранные языки, поэтому сразу же сменим его на родной и дальше будем работать в русифицированной версии программы. Для этого в основном меню жмем VIEW -> Language -> Russian: Под лентой появится сообщение «Language was change» и рекомендация перезапустить программу. Так и поступим, после чего все будет уже на русском языке.

Основные настройки аккаунта:

Жмем на кнопочку «Настройки аккаунта» Открывается окно с настройками:

  • Создаем новый профиль:

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

  • Далее идем на вкладку Главная:

Выбираем Активный режим – наш созданный новый профиль.

В поле бэктестер есть две опции. Первая эмулирует закрытие позиций по маржин коллу, вторая позволяет использовать более короткие периоды для тестирования. То есть, если у вас стратегия работает на Н1, для теста используются данные М1. Однозначно, в обоих случаях ставим галочку.

Поле График Баланс/Капитал

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

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

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

Далее нажимаем на кнопку в левом меню «Источники данных». Тут нам нужно создать свой источник исторических данных:

Находим поле Добавить источник данных, в поле Источник данных вбиваем его название, выбираем каталог для хранения данных. Все остальное оставляем без изменений и жмем на кнопочку Добавить источник. У нас появится новый источник данных. В источник данных можно импортировать список символов из уже существующего источника, из специального файла Instruments.xml (который сначала нужно создать) или из терминала МТ4, но нас это не интересует. В поле настройка источника данных сверху можно изменить путь к папке, содержащей исторические данных, добавить описание источника данных (например, название источника, откуда они были скачаны – Alpari-ECN, к примеру). Остальные галочки я советую не трогать.

Снова выбираем активный режим и настраиваем характеристики виртуального счета. В качестве валюты счета можно выбрать доллары США, евро, фунты и йену. Первоначальный депозит по умолчанию стоит 10 000 единиц, а плечо 1:100. Можно выбрать в каких единицах отображать всю торговую статистику – в пунктах или все-таки в валюте депозита. Ну и последнее поле – обменный курс счета, он служит для правильного расчета статистики торговли при использовании различных валютных пар для торговли. Тут просто нужно нажать на кнопку Обновление и курсы автоматически обновятся.

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

Читать статью  Советники для EURUSD торгуют поразному. Этот работает упоительно

Для этого в поле символ вводим обозначение символа латиницей, как в терминале МТ4 без суффиксов и префиксов, и нажимаем кнопку добавить. Если инструмент не относится к рынку Forex, можно выбрать тип инструмента Index или CFD. Жмем на кнопку добавить и символ появляется в поле доступные символы. Проделываем то же самое для всех ваших инструментов.

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

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

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

Тут мы можем указать максимальное количество баров данных (максимум 50 тысяч) и тиков внутри баров (максимум 100 тысяч). К сожалению, ограничения очень жесткие, но для генерации стратегий для периодов от Н1 и выше в принципе сойдет. Также можно указать дату начала и конца, но она опять же будет обрезана.

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

Перед вами будет три вкладочки – основная информация по индикатору (как правило, ссылки на загрузку и иногда описание индикатора), а также две вкладки с кодом. В них вы можете просмотреть и изучить код индикатора, не скачивая его. Индикаторы для программы пишутся на языке C#, имеют очень простую конструкцию, и любой желающий, при условии знания того же mql4, за пару часов сможет освоить технологию написания (ну а если не сможет, кричите в комментариях к уроку – запишу дополнительно разъяснение). Нам с вами нужны оба файла индикатора – и в C# варианте (для использования в программе) и в mql4 варианте (для последующего использования в терминале MT4 вместе с получившимся советником).

Далее жмем в программе кнопку Открыть папку индикаторов и все, что накачали, аккуратно складываем туда. Раз уж мы оказались в папочке User Files/Indicators, давайте поднимемся на уровень вверх и изучим содержимое папки User Files:

В папке Code хранятся все дополнения к программе. По умолчанию там находится только файл AccountStatistics, написанный на том же C# (вы ведь помните статью про алготрейдинг, где я призывал учить языки программирования). Этот файл можно подправить, внеся недостающую на ваш взгляд статистику по торговле (например, какие-то свои хитрые коэффициенты имени вас). Но мы с вами программирование в школе не учили и с дивана ради такого вставать не будем, поэтому едем дальше. В папке Data хранятся все наши исторические данные в формате csv. Их мы туда загрузим немного позже, а пока она пустует.

В папку Indicators мы уже скинули скаченные с сайта индикаторы, а если у вас будет желание переделать под программу кастомный индикатор из метатрейдера, класть его нужно именно сюда. Следующая папка Libraries содержит скомпилированные индикаторы в виде библиотек с расширением dll. Папка Logs содержит все сообщения журнала программы, аналогично терминалу МТ4. В папке MT4 Files содержится советник и инсталлятор Bridge Installer. Этот файл устанавливает специальный мост на выбранную МТ4 платформу для того, чтобы торговать советниками прямо из программы.

Следующая папка, Strategies, содержит файлы стратегий, в том числе и созданных вами. Если вы решите скачать с сайта кроме индикаторов еще и парочку стратегий, расположить их нужно именно тут. В папке System можно найти папку Languages. Тут вы можете при желании создать еще один xml файлик с переводом на любой другой язык, эльфийский, например, или язык гордых жителей народов севера. Также можно найти и файл Indicators_abbreviation, в котором содержатся названия стандартных индикаторов. Можно и их переназвать какими-нибудь матными словами. В самой же папке System находятся файлы, написанные на языке Java. Это и цветовые темы программы и все основные модули, которые можно редактировать и дополнять по своему вкусу, если вы, конечно, знаете, что нужно делать.

Чтобы наши закаченные индикаторы появились в программе, нажмите на надпись Обновить пользовательские индикаторы и они будут прочитаны программой и перекомпилированы из формата cs (открытый код) в формат dll и переложены в соответствующую папку (исходный код останется). Это может занять некоторое время, но, как правило, не более минуты – все зависит от вашей жадности (количества закачанных с сайта индикаторов).

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

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

На этой вкладке можно настроить свойства проскальзывания и количество сообщений в торговом журнале. Опережение времени «закрытие бара» позволяет входить за несколько секунд до закрытия бара, так как первый тик на новом баре может прийти не сразу, а спустя какое-то неопределенное время. Опция автопроскальзывание в зависимости от спреда позволяет эмулировать величину проскальзывания в зависимости от текущей волатильности – если рынок спокойный, то и проскальзывания не будет. Другой вариант – вы можете сами настроить величину проскальзывания, сняв галочку с автоопределения.

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

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

Чтобы создать стратегию, надо ее на каких-то данных протестировать. Для этого и существует инструмент «Исторический центр»:

После нажатия на кнопку у нас появится новое окно «Исторический центр».

Нам на первом этапе нужна левая менюшка (1), а именно поле «Импорт данных».
Предоставлено три варианта:

Загрузка данных с сайта авторов программы:

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

Второй вариант – загрузка модных «дукасовских» котировок:

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

Далее жмем импорт и наблюдаем, как разворачиваются события в окне Выходной лог. И еще. Никаких тиков в программе не будет – она из дукасовских тиков создаст минутные котировки в формате csv и все. Я не сторонник котировок дукаса, и вам не рекомендую. К тому же минутки из тиков дукаскопи получаются ой какие дырявые.

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

Задаем путь к историческим данным, это папка каталога данных терминала -> history -> название сервера, к которому был подключен терминал, в моем случае это папка Alpari-ECN1. Для тех, кто не в курсе, шаг 1 – открываем терминал, меню Файл -> открыть каталог данных:

Далее откроется окно обозревателя:

Вот и все. Далее выбираем уже, куда сохранять наши котировки, с какой даты начинать импорт и когда остановиться, ну и максимальное количество баров. Сколько ни бейся, программа обрезает часть истории, оставляя последний миллион баров. Это, конечно же, существенный минус, но, с другой стороны, более детально протестировать стратегию можно будет и позже, в родном терминале МТ4. Предварительно в терминале нужно проверить, вся ли история по всем инструментам есть, и, если что-то отсутствует, заранее подкачать. Итак, указываем пути, ставим 1 000 000 баров и жмем старт. Импорт занимает как правило от 10-15 минут до нескольких часов в зависимости от количества инструментов и глубины исторических данных. Ну а вы можете наблюдать за ходом импорта в окне Выходной лог.

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

И последняя вкладка инструмента «Исторический центр» — внутрибаровая статистика.

Это – аналог статусбара при тестировании в терминале МТ4. Он показывает, какие периоды и сколько баров каждого периода было использовано при тестировании стратегии. Для стратегии на Н1, судя по скриншоту, не было использовано ни одного бара Н1. Как вы помните, ограничение на количество баров в тесте 100 тысяч, поэтому для тестирования были взяты первые 100 тысяч баров минутного периода, далее пошли М5, когда они закончились, мы использовали М15 и так далее. Если бы у нас в котировках обнаружились дыры или один из периодов не смог бы загрузиться должным образом, мы увидели бы сообщение в поле Ошибка загрузки данных. Поэтому заглядывать сюда после тестирования бывает иногда полезно.

Создаем новую стратегию

У нас все настроено и готово к работе, поэтому давайте перейдем к самому интересному — создадим первую стратегию. Для этого на ленте нажмем на значок Новая стратегия и увидим новое окно:

  1. Выберем наш созданный профиль.
  2. Выберем источник исторических данных
  3. Выберем предпочитаемый инструмент и таймфрейм
  4. Выбираем предпочитаемый метод интерполяции (читай качество тестирования).
  5. Коллекция. Вы можете добавить стратегию в коллекцию, позже вы найдете вашу стратегию в репозитарии.

Пара слов о методах интерполяции

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

Основные настройки

Щелкнув на вкладке Новая стратегия, вы увидите выпадающее меню:

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

Слева вы видите меню с тремя полями инструментов. Первое относится к генерации стратегии, второе позволяет провести анализ готовой стратегии, а третье – провести стресс-тестирование. В основном окне вы видите несколько полей: входные параметры, график индикаторов, стратегия, статистика аккаунта и график баланса. Многие поля пока что пустые. В поле Входные параметры можно проверить основные используемые настройки, такие, как величина спреда, свопы, плечо, начальный баланс, проскальзывание и так далее. В поле график индикаторов – все индикаторы, используемые системой. Основная статистика торговли будет отображаться в поле Статистика торговли, а прирост депозита можно оценить в поле график баланс.

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

Нажмем сначала на кнопку Свойства стратегии:

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

Следующее поле – Дополнительные сигналы входа

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

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

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

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

В моем случае есть выбор из 8 различных вариантов. Все они касаются именно сделок на покупку (и так у всех остальных индикаторов – все условия только для покупки). Для продаж просто условие наоборот.

Кстати, у системы может быть несколько разных вариантов входа в позицию и выхода из нее, каждый из которых содержит несколько условий от нескольких индикаторов. В программе используется такое понятие, как логическая группа. Логическая группа – это группа условий, отвечающих за одно определенное событие. При настройке индикатора можно присвоить буквенное обозначение его группы, например, А. Таким образом в группе А, отвечающей за открытие позиции, может быть хоть десять индикаторов. То же самое в группе Б, также отвечающей за открытие позиций. В итоге можно создать советника, торгующего по двум, трем, десяти различным стратегиям.

Читать статью  Советник безубыток PBS

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

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

Настройки генератора стратегий

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

Остановимся на отличиях. Первое отличие в панели инструментов сверху:

  • Кнопка Общий открывает общие настройки генератора:

При желании можно задать диапазон для ТП, СЛ и БУ или оставить прежними (указанные в окне редактора). Эти параметры указаны в новых пунктах, как и все остальные в программе. Самые главные настройки тут – количество слотов для генерации сигналов на вход и выход, то есть по сути максимальное количество условий для входа и выхода из позиций. Также вы можете указать на необходимость генерации дополнительных сделок в случае появления повторного сигнала того же или противоположного направления.

  • Следующая кнопка Настройки открывает такое вот окно:

Тут мы можем выбрать способ отбора лучших вариантов по различным метрикам: максимальный баланс, коэффициент качества системы, коэффициент Шарпа, минимальная просадка по Эквити, прибыль, средний и геометрический HPR, профит фактор и отношение прибыли к риску. Самый важный параметр тут – выделенное время на генерацию стратегии (Рабочее время в минутах). Его величина зависит от используемого таймфрейма. Я уже почти неделю пользуюсь этой программой и уже получил кое-какие результаты, которые не стыдно и в торговлю отправить. Так вот, для периода D1 стоит поставить минимум 360 минут, за это время скорее всего сгенерируется 1-2 действительно неплохие системы. Для ТФ Н4 – 900 минут, для Н1 – 3600 (около недели). На периодах ниже я так и не добился приемлемого результата. По опыту использования скажу, что программу приятно использовать для генерации стратегий от Н4 и выше.

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

  • Следующая кнопка – Индикаторы:

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

  • Следующий пункт – Вне обработки.

Тут можно выбрать количество исторических данных, которые будут использоваться для проверки стратегии на форвард периоде. Я рекомендую выставить эту настройку в 20-30% от общего количества используемых котировок.

И последнее, что нужно сделать перед стартом – нажать по одному разу на блоки стратегии, которые вы не хотите заменять. Например, вам важно, чтобы стратегия помимо всего прочего использовала именно RSI, тогда, кликнув пару раз на этот блок и получив изображение замочка, вы запретите программе этот блок изменять. Если вы все сделали правильно, должны появиться замочки как у меня:

Генерирование стратегий

И последнее отличие от редактора – наличие вот такой панели внизу:

Смело жмем кнопку Начало и запускаем генератор стратегий. Расчет займет некоторое время, примерно от 5 минут до пары часов и это нормально. Вы же обратили внимание, насколько быстро выводятся в редакторе результаты тестирования? Верно, считанные секунды. Ну минуты в случае тестирования на М1. МТ4 на такое точно не способен!

Спустя 15 минут генератор завершил работу и наша панель приняла следующий вид:

Все наши сгенерированные стратегии перемещаются в Хранилище. Выбираем вкладку вид в основном меню -> Хранилище или находим кнопочку с тремя столбиками на ленте:

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

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

Анализ сгенерированных стратегий

Я очень придирчиво отношусь к сгенерированным стратегиям, поэтому с каждого сеанса у меня в лучшем случае остается 1-2 стратегии, иногда и ни одной. Но если вдруг остается, я сохраняю ее в виде эксперта для МТ4 и сразу тестирую там. Хотя тестирование сконвертированных в mql4 формат стратегий занимает довольно много времени (тестируются они очень туго, так как под завязку набиты различными классами, функциями, кастомными индикаторами и прочим), это сделать все же стоит – по какой-то причине программа неверно считает просадки и мани менеджмент и вместо граального прироста вы можете получить маржин колл.

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

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

Итак, вы настроили и запустили генератор, оставили его работать на 5-6 часов, а по приходу обнаружили, что у вас в хранилище лежит куча стратегий. После отсева тех, которые сливают на форварде, и тех, результаты которых слабоваты, у вас останется одна – две хорошие стратегии по каждой запущенной в работу паре.

Я генерировал стратегии на дневках фунта и евро в течение 800 минут, в результате было совершено несколько миллионов переборов, сгенерировано почти 600 стратегий, из них около 80 прошли мои критерии приемлемости, и около 10 успешно прошли форвард. Осталось по одной дневной стратегии для каждой пары:

Как видно, для входа система использует свечной паттерн трехбаровый разворот, а для выхода несколько осцилляторов (причем у нас два варианта выхода – по группе а и группе b). Есть и минусы системы, и существенные: система не использует стоп лосс, средняя потеря почти равна средней прибыли, сделок с 2000 года было совершено всего 354, а максимальное время застоя (то есть система не могла дать новый пик прибыли) целых 466 дней, то есть мы без прибыли сидели бы с ней дольше двух лет.

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

Оптимизатор

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

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

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

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

Обзор

Группа обзор состоит из пяти вкладок: собственно, обзор, График баланса, Основной график, Журнал и проводник бара.

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

На вкладке график баланса тоже есть панель инструмента сверху, содержащая три кнопки: График баланса, Начислено и Распределительная торговля. Перевод у программы корявый, но я сейчас все объясню. Итак, на графике баланса есть пять линий: серая – график цены инструмента, черная – график баланса, зеленая – прирост с длинных позиций, красная – прирост с коротких позиций и оранжевая – график эквити (его сейчас не видно).

На этой вкладке можно увидеть все используемые индикаторы на графике цены и историю открытых сделок. Зеленой стрелкой вверх обозначены покупки, красной стрелкой вниз – продажи. Крестик означает место выхода из позиции, зеленая линия – уровень ТП, а красная – уровень стопа. Это – аналог визуального тестирования в терминале МТ4. Сверху над графиком можно увидеть панель инструментов:

Тут можно включить/отключить сетку (1), перекрестие (2), отображение объемов (3), стрелочек входа в позиции (4), объемов позиции (5), уровней входа в позиции (6), уровней стопов и тейков (7), неоднозначных баров (8) (это тех, на которых не совсем понятно, как именно осуществлялся вход/выход/модификация), графиков индикаторов (9), навигацию (10, 11), и переключатель отображения графиков индикаторов в виде непрерывных линий или линий по ценам закрытия (12).

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

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

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

Компаратор

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

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

Мультирынки

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

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

Монте Карло

Это последний тест системы перед ее сохранением:

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

Вы также можете все вышеперечисленные опции настроить, ну а затем нажать на знакомую уже кнопку Начало и получить результат тестирования:

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

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

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

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

Но прежде вам нужно все же установить специальный мост в терминал с вашим счетом, который находится в знакомой уже папке User Files – MT4 Files. В этой папке лежит установщик моста. Установив мост в терминал, нужно прикрепить его на график того же таймфрейма той же пары, что и ваша стратегия. Далее назначаем ID номер и из советника копируем его в программу в поле Set connection ID:

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

Ну и дело за малым – сделать контрольный тест в терминале МТ4 и вперед, готовить следующую стратегию. Торговать одной единственной стратегией я бы не стал ни в коем случае, так как программа позволяет безболезненно генерировать стратегии для периода от Н4 и выше. А на высоких периодах без обновления предыдущего локального максимума баланса можно просидеть и год, и два. Гораздо более умным решением будет создание пары десятков различных стратегий и совместный их запуск на вашем счете. Благо, инструмент для этого в программе есть и называется он Портфолио стратегий:

Нажав на эту кнопку, статистика всех открытых в программе на данный момент стратегий сведется в один единый портфель:

Заключение

Программа System Creator позволяет создавать свои торговые системы людям, не умеющим программировать. У программы очень много различных возможностей, при этом все делается достаточно просто. Оптимизация и генерация стратегий занимает довольно немного времени. Но, к сожалению, генератор стратегий годится только для стратегий с таймфреймом от Н1 и выше, это серьезный минус.

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

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

Скачать программу

Программа устанавливается путем распаковки архива. Внимание! Для корректной работы путь к программе не должен содержать символов кириллицы .

С уважением, Дмитрий аkа Silentspec
TradeLikeaPro.ru

Источник https://www.mql5.com/ru/articles/706

Источник https://tlap.com/system-creator/

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

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