Скачать бесплатно индикатор Предсказатель на основе самообучающейся нейронной сети от gpwr для MetaTrader 4 в MQL5 Code Base, 2009.06.16
Neural Network Trend Predictor — очень интересный индикатор на основе нейронных сетей
Может есть у кого? Или кто достать может?
И просто выскажите мнение, такое возможно вообще?
alex72
Новичок
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
v1ctys
Интересующийся
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
Ну всё таки если есть что сказать говорите. Думаю многие не знают как следует о нейросетях, в том числе и я.
alex72
Новичок
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
Victys, в двух словах нейросетях не написать. целые книжки написаны по этому поводу. а если в двух словах.
Существуют целые программы для нейросетках, а тут просто индикатор. настораживает. на «вход» как правило подают набор условий включая индикаторы, а вот на выходе (после тренировки сетки) выходят сигналы для торговли. по идее сетка сама «обучается» . как может индюк «обучаться» — загадка. ладно. и второе . нейросетки сейчас «топчутся» на месте. нет «прорыва». по этому пока то, что вы видите в сетях (платное/бесплатное) всё это, мягко говоря «сырой материал». хотя я тоже верю, что за нейросетями будущее. но пока. это в двух словах и очень упрощённо я написал. очень сложная тема — нейросети.
v1ctys
Интересующийся
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
Aisller
Главный модератор
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
К словам alex72 добавлю: что для нейросетей используются очень сильные вычислительные машины, так как алгоритмы сами по себе требуют громадных расчетов ввиду большого кол-ва начальных данных.
Если по индикатору, то сейчас нейросети очень модное слово, поэтому с ним проще впарить индикатор.
Интересующийся
Ответ: Neural Network Trend Predictor — очень интересный индикатор на основе нейронн
Victys, в двух словах нейросетях не написать. целые книжки написаны по этому поводу. а если в двух словах.
Существуют целые программы для нейросетках, а тут просто индикатор. настораживает. на «вход» как правило подают набор условий включая индикаторы, а вот на выходе (после тренировки сетки) выходят сигналы для торговли. по идее сетка сама «обучается» . как может индюк «обучаться» — загадка. ладно. и второе . нейросетки сейчас «топчутся» на месте. нет «прорыва». по этому пока то, что вы видите в сетях (платное/бесплатное) всё это, мягко говоря «сырой материал». хотя я тоже верю, что за нейросетями будущее. но пока. это в двух словах и очень упрощённо я написал. очень сложная тема — нейросети.
Ничего тут не настораживает. Сказываются ваши знания в области ИИ. Нейросети это метод. О каком прорыве вы говорите. Это всё равно что говорить нет прорыва в линейной регрессии.
Зарегистрируйтесь на том сайте и посмотрите в разделе downloads кто и как использует нейросети.
Касательно этого индикатора, то сеть там уже обучена, и не дообучаеться. Задача той нейросети найходить закономерности в ценовых паттернах и показывать вероятностную картину. Помимо нейросети там есть ещё один метод прогнозирования. Вообще отличный от нейросетей, и тоже экстраполяция.
добавлено через 6 минут
К словам alex72 добавлю: что для нейросетей используются очень сильные вычислительные машины, так как алгоритмы сами по себе требуют громадных расчетов ввиду большого кол-ва начальных данных.
Если по индикатору, то сейчас нейросети очень модное слово, поэтому с ним проще впарить индикатор.
Всё зависит от задачи. Классический пример нейросетей приводится на примере операции XOR. Очень сильные вычислительные машины тут не нужны. И начальных данных 8 цифр.
Всё зависит от задачи. Хотя вы правы, с количеством нейронов в нейросети обьём вычислений растёт экспотенциально (и это зависит от архитектуры сети). И опять таки всё зависит от поставленной задачи.
Нейросети были модны в 60х. На данном этапе существует туча алгоритмов для классификации и аппроксимации. А модно сейчас думаю Fuzzy Neural Tree. уффф.
Предсказатель на основе самообучающейся нейронной сети — индикатор для MetaTrader 4
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Автор:
История версий:
16/06/2009 — в индикаторы BPNN Predictor.mq4 и Buy-Sell Classificator.mq4 добавлены проверки на появление нового бара чтобы тиковое обновление on-line графиков не перезапускало вычисления. Добавлен новый BPNN.zip файл содержащий недостающие системные DLL файлы.
Читать статью Индикатор Глаз. Настройка и применение
17/06/2009 — добавлена проверка на скорость уменьшения ошибки в BPNN.cpp существенно увиличивающаяся скорость вычислений. Приложены новые файлы BPNN.zip и BPNN.dll.
- файл BPNN.dll скомпилирован таким образом что он теперь включает все необходимые системные функции
- добавлены две новые функции активации нейронов: tanh и рациональная
- удалена проверка на скорость уменьшения ошибки в BPNN.cpp
- встроен новый, более надёжный алгоритм обучения iRProp+
- Старые файлы индикаторов не будут работать с новым BPNN.dll
- удалён Buy-Sell Classificator.mq4 так как он пока не работает. Он может появиться снова здесь как только я доведу его до ума.
— добавлен новый индикатор BPNN Predictor with Smoothing.mq, который до предсказания цен сглаживает их скользящей средней
20/08/2009 — исправлен код вычисления функции активации нейрона чтобы предотвратить зашкаливание. Обновлены файлы BPNN.dll и BPNN.cpp.
21/08/2009 — добавлена очистка памяти. Обновлены файлы BPNN.dll и BPNN.cpp.
Предлагается индикатор использующий нейронную сеть прямого распространения (feedforward neural network), которая самообучается методом Обратного Распространения Ошибки (backpropagation). Сеть загружается через DLL файл, исходный C++ код которого прилагается.
Нейронная сеть это ничто иное как нелинейная модель выходов как функция входов. На входы подаются данные задаваемые пользователем, например выборки временного ряда. Смысл выходных данных также задаётся пользователем, например сигналы 1=buy/0=sell. Структура сети опять же задаётся пользователем. Сеть прямого распространения состоит из
—входного слоя (input layer), элементами которого являются входные данные,
— скрытых слоёв (hidden layers), состоящих из вычислительных узлов называемых нейронами (neurons) и
— выходного слоя (output layer), который состоит из одного или нескольких нейронов, выходы которых являются выходами всей сети.
Все узлы соседних слоёв связаны между собой. Эти связи называются синапсами (synapses). Каждый синапс имеет вес (weight w[i,j,k]), на которой умножаются данные передаваемые по синапсу. Данные передвигается слева направа т.е. от входов сети к её выходам. Отсюда и название, «сеть прямого распространения». Общий пример этой сети изображён на рисунке внизу
Данные перерабатываются нейронами за два шага:
1. Все входы, помноженные на соответствующие веса, сначала суммируются
2. Затем получившиеся суммы обрабатываются функцией активации нейрона (activation or firing function) и посылаются на единственный выход.
Смысл функции активации нейрона заключается в моделировании работы нейрона мозга: нейрон срабатывает только после того как информация достигла определённого порога. В математическом аспекте, эта функция как раз и придаёт нелинейность сети. Без неё, нейронная сеть была бы линейной авторегрессионной моделью (linear prediction model). В прилагаемых библиотечных функциях возможен выбор трёх функций активации нейрона
- сигмоидальная функция sigm(x)=1/(1+exp(-x)) (#0)
- гиперболический тангенс tanh(x)=(1-exp(-2x))/(1+exp(-2x)) (#1)
- рациональная функция x/(1+|x|) (#2)
Порог активации этих функций равен 0. Этот порог может быть сдвинут по горизонтальной оси за счёт дополнительного входа нейрона называемом входом смещения (bias input), которому приписан определённый вес таким же образом как и к другим входам нейрона.
Таким образом, количество входов, слоев, нейронов в каждом слою и веса входов нейронов полностью определяют нейронную сеть, т.е. нелинейную модель, которую она создаёт. Чтобы пользоваться этой моделью необходимо знать веса. Веса вычисляются путём обучения сети на прошлых данных: на входы сети подаются нескольков наборов входных и соответствующих выходных данных и рассчитывается среднеквадратичная ошибка отклонения выхода сети от тестируемого. Цель обучения сети заключается в уменьшении этой ошибки путём оптимизации весов. Существуют несколько методов оптимизации, среди которых основными эвляются метод Обратного Распространения Ошибки (ОРО) и метод генетической оптимизации. Метод ОРО является пу существу методом градиентного спуска и вкратце опиан здесь
В прилагаемой функции Train() используется разновидонсть метода ОРО называемая «Улучшенный Эластичный метод ОРО» (Improved Resilient back-Propagation, IRProp). Этот алгоритм описан здесь
Прилагаемые файлы:
- BPNN.dll — библиотечный файл
- BPNN.zip — архив всех файлов необходимых для создания ДЛЛ файла
- BPNN Predictor.mq4 — индикатор предсказывающий будущее значение цены
- BPNN Predictor with Smoothing.mq4 — индикатор предсказывающий будущее значение цены, сглаженной ЕМА
Библиотечный файл BPNN.cpp содержит две функции: Train() и Test(). Train() предназначен для обучения сети для предоставленных входных и выходных данных. Test() предназначен для вычисления выходных данных на основе весов полученных после прогона Train().
Входными (зелёный цвет) и выходными (синий цвет) параметрами функции Train() являются:
double inpTrain[] — обучивающие входные данные (старый первый)
double outTarget[] — обучивающие выходные данные (старый первый)
double outTrain[] — выходы сети после обучения
int ntr — количество обучающих наборов входы-выходы
int UEW — ключ управляющий использованием внешних значений для инициализации весов (1=используем extInitWt[], 0=используем случайные числа)
double extInitWt[] — исходные значения весов
double trainedWt[] — значения весов после обучения
int numLayers — количество слоев в сети включая входной, скрытые и выходной
int lSz[] — одомерный массив размера numLayers, в котором хранятся количества нейронов в каждом слою. lSz[0] задаёт количество входов сети
int AFT — тип функции активации (0-сигмоидальная, 1-гиперболический тангенс, 2-рациональная)
int OAF — ключ использования функции активации в выходны нейронах (1=используем функцию активации, 0=нет)
int nep — максимальное количество обучающих шагов (эпох). Эпоха состоит из проверки всех обучающих наборов.
double maxMSE — среднеквадратичная ошибка, при которой обучения останавливается.
Читать статью Рейтинг индикаторов технического анализа. ТОП 10
Входными (зелёный цвет) и выходными (синий цвет) параметрами функции Test() являются:
double inpTest[] — входные данные (старый первый)
double outTest[] — выходные данные
int ntt — колчиство наборов в входных и выходных данных
double extInitWt[] — исходные значения весов
int numLayers — количество слоев в сети включая входной, скрытые и выходной
int lSz[] — одомерный массив размера numLayers, в котором хранятся количества нейронов в каждом слою. lSz[0] задаёт количество входов сети
int AFT — тип функции активации (0-сигмоидальная, 1-гиперболический тангенс, 2-рациональная)
int OAF — ключ использования функции активации в выходны нейронах (1=используем функцию активации, 0=нет)
Использование функции активации в выходных нейронах зависит от характера выходны данных. Если выходами сети являются биноминальные сигналы (0/1 или -1/1), то нужно использовать функцию активации (OAF=1). Причём учтите что для функции №0, уровни сигнала 0 и 1, а для функций №1 и 2 уровни -1 и 1. Если выходом сети является предсказание цены, то функция активации в выходном слое не нужна (OAF=0).
Примеры индикаторов использующих нейронную сеть:
BPNN Predictor.mq4 — предсказывает будущие цены. Входными параметрами сети являются относительные приращения цен:
где delay[i] берётся из ряда Фибоначи. Выходом сети является предсказываемое относительное приращение будущей цены. Фунцкия активации в выходном слое отключена.
Входными параметрами индикатора являются
extern int lastBar — номер последнего бара
extern int futBars — количество будущих предсказываемых баров
extern int numLayers — количество слоев в сети включая входной, скрытые и выходной
extern int numInputs — количество входов сети
extern int numNeurons1 — количество нейронов в слое №1
extern int numNeurons2 — количество нейронов в слое №2
extern int numNeurons3
extern int numNeurons4
extern int numNeurons5
extern int ntr — количество обучающих наборов входы-выходы
extern int nep — максимальное количество обучающих шагов (эпох)
extern int maxMSEpwr — экспонента используемая для расчёта максимальной допустимой среднеквадратической ошибки обучения maxMSE=10^maxMSEpwr
extern int AFT — тип функции активации (0-сигмоидальная, 1-гиперболический тангенс, 2-рациональная)
Индикатор выдаёт такую картинку, где
- красный цвет — предсказания от последней цены Open
- чёрный цвет — прошлые тренировочные цены Open, по котором (как ожидаемым выходным данным) проводилось обучение сети
- синий цвет — выходы обученной сети на тренировочных данных
BPNN Predictor with Smoothing.mq4 — тоже предсказывает цены, но с предварительным сглаживанием цен экспоненциальной скользящей средней (EMA) с периодом smoothPer.
Установка файлов:
- Копируйте приложенный BPNN.DLL файл в C:Program FilesMetaTrader 4expertslibraries
- Включайте использование DLL в метатрейдере: Tools — Options — Expert Advisors — Allow DLL imports
Если приложенный DLL файл не работает, то компилируйте сами. Все необходимые файлы содержатся в BPNN.zip.
Советы:
- Сеть с 3-ми слоями (numLayers=3: один входной, один скрытый и один выходной) достаточна для подавляющего большинства применений. По теоремe Cybenko (1989) сеть с одним скрытым слоем может моделировать любую непрерывную нелинейную фунцкию и сеть с двумя скрытыми слоями способна описать функцию с разрывами (http://en.wikipedia.org/wiki/Cybenko_theorem):
- Количество нейронов в скрытом слую определяйте экспериментально. В литературе встречаются такие рекомендации: кол-во скрытых нейронов = (кол-во входов + кол-во выходов)/2, либо SQRT(кол-во входов * кол-во выходов). Следите за сообщениями о среднеквадратичной ошибки обучения в окне experts метатрейдера.
- Для получения хорошего обобщения, количество обучающих выборок должно в 2-3 раза превышать количество оптимизируемых весов. Например, в опубликованных примерах, количество весов равно (12+1)*5 на входах скрытого слоя плюс (5+1) на входах выходоного слоя, т.е. 71. Поэтому количество обучающих выборок должно быть по крайней мере 142. Концепт обобщения объяснён на рисунке внизу для одномерного случая y(x).
- Увеличения количества обучающих эпох может не повысить точность предсказаний на тестируемых данных даже если ошибка обучения (MSE) уменьшилась. При большом количестве весов сеть становится переученной (см объяснения внизу).
- Входные данные должны преобразоваться в стационарный ряд. Цены сами по себе таковым рядом не являются. Рекомендуется также нормализовывать входные данные к диапазону -1..1.
На этом графике показана линейная функция y=b*x (x-вход, y-выход) с добавленным шумом к выходам. Из-за этого шума, измерения функции (чёрные точки) не лежат на прямой. Функция y=f(x) может быть смоделирована нейронной сетью. Сеть с большим количеством весов (степеней свободы) способна уменьшить ошибку обучения по всем имеюшимся измерениям до нуля и описать тренировочные выходные данные плавной кривой. Но эта кривая (показана красным цветом) не имеет ничего общего с нашей линейной фунцкией y=b*x (показана зелёным цветом). Использование такой сети для предсказания будущих значений функции y при новых входных значениях x приведёт к большим ошибкам так как шум не предсказуем.
Читать статью Скачать индикаторы показывающие объемы торгов на Форекс для МТ4 бесплатно — Tradexperts
Уважительная Просьба: eсли вам удастся создать прибыльный советник на основе этих файлов, пожалуйста поделитесь идеей в личку или [email protected].
О тех индикаторах с точки зрения нейросетей.
Что если в качестве лейблов на выход подавать не рост/падение рынка завтра, а срабатывание каких то техиндикаторов? Есть несколько классических правил торговли. Ну например пробой снизу вверх Close BolingerUpperband это к покупке, и сверху вниз BolingerDownperband к шорту. Или дивергенция MACD. Или Close пробивает SMA. Ну а че вы смеетесь? Когда я работал в представительстве Финама, мы предлагали клиентам следовать корпоративной стратегии, а вся стратегия это пробои Болинджеров. Я, как человек который вообще тогда не понимал как это все делается, готовился услышать какую то хитрую систему для зарабатывания денег, от московских экспертов, а когда услышал «тайну», я такой «эээээ. ». Или вот дивергенция MACD, открываешь википедию и там прямо «это сильнейший технический индикатор, если дивергенция то вот прям точно точно!».
Месяц назад я пробовал подать на вход CNN+GramianAngular падение/рост рынка, без каких то видимых успехов. Может тут проблема в инструменте? Попробуем спрогнозировать с помощью нейросети срабатывание этих самых техиндикаторов, подав цены накануне. Причем усложним задачу, будем подавать не точное число баров, а фиксированное, скажем 30. То есть нейросетка получает избыточные данные: мы хотим предсказать пересечение Close c SMA(25) а мы ей 30 баров предлагаем.
Сразу скажу, что результаты хорошие. Особо я не утруждался долгим обучением, но видно как сетка очень шустро, от эпохи к эпохе улучшает показатели точности. Ине суть что мы предсказываем — Bolinger, MACD, SMA, результаты примерно одинаковы, или их можно сделать одинаковыми обучив нейросеть чуть подольше. И на test выборке все хуже не становится.
Архитектура такая:
Угадывает она срабатывание тех индикаторов с точностью на test 85-90%.
Для любителей усваивать информацию зрительно, взял котировку какой то фишки, наложил на нее SMA25 и красными стрелками указал пересечение ее Close. Красные черточки сверху это пересечение сверху вниз, нижние-наоборот. Ну а зеленые это прогнозы. Как видим угадываем с высокой точностью.
Ну и некоторые циферки
Если сеть не путать и подавать точно число баров, то сеть начинает чуть быстрей обучаться, а так разницы нет, что позитивненько. Приятная инвариантность. И для смеха я сделал наоборот, дал сети недостаточное число данных (10 баров для пересечения с SMA(25)) — выкручивайся мол. Опять не стал долго обучаться, 10 минут и будя. Тем более что обучение застряла на определенной отметке, без какого то улучшения (что логично, как говорится иди незнаю куда, принеси то незнамо что-это трудно). Ну и на прогнозе чуда не произошло
Если вместо 25 необходимых подать 20 баров, то результаты будет получше:
Ну и если кто то дочитал до этого момента, вполне возможно задастся вопросом, что то типа «а зачем вообще все это нужно?!». Где профит?! Мани где?! Нет тут профитов и нет мани, мы ответили на вопрос-может ли CNN получив на выход сырой ряд ряд цен, спрогнозировать срабатывание тех индикаторов. То есть по сути, может ли CNN улавливать сложные конфигурации time series. Ответ — да, может. Ура товарищи. Вот вы можете по одному виду временного рядка сказать будет на следующем баре дивергенция MACD, или пересечение Bolinger или SMA? А моя нейросеть может.
Хотя одно практическое применение я могу придумать-ну вот например вы нашли какое то чудесное сочетание тех индикаторов, которые приносят профит. И хотите это показать публике. Но засвечивать Грааль не хотите. Ну так проставьте лейблы, и обучаете нейросеть по ним, и вот можете совать свою систему в продакшн, она еще и выглядеть будет круче, ибо «торговая система на основе нейросеть» звучит в наше время интересно, а кому нужна система на техниндикаторах?!
Для справедливости сеть все таки получила не сырой ряд данных, а предобработанный, будет интересно глянуть на сеть, если подать ей именно сырой. 1CNN. Вот этим я и займусь дальше.
А практический вывод из всего этого я вынес что надо поработать с lebeling.
Таки дела.
Похожие записи:
- Описание и назначение индикаторов рынка Форекс.
- Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов — Статьи по MQL5
- Индикаторы Форекс — что это такое и зачем они нужны – Портал TradeLikeaPro
- Индикатор, показывающий точные входы в рынок форекс
Практическое применение нейронных сетей в трейдинге
В данной статье я хочу поднять тему применения нейронных сетей при создании торговых роботов. Это в узком понимании данной проблемы. В более широком аспекте — попытаться ответить на ряд вопросов и рассмотреть несколько проблем:
- Возможно, ли построить прибыльную систему используя машинное обучение?
- Что мы можем получить от нейронной сети?
- Логическое обоснование обучения нейронных сетей на принятие решения.
- Нейронная сеть — это сложно или просто?
- Как интегрировать нейронную сеть в торговый терминал?
- Как тестировать нейронную сеть? Этапы тестирования.
- Об обучающих выборках.
1. Возможно ли построить прибыльную систему используя машинное обучение?
Наверное, каждый новичок, который приходит на валютный рынок и пытается реально на нем торговать, не имея какой либо системы, брал в руки лист бумаги и рисовал на нем таблицу понравившихся индикаторов. Далее напротив каждого из этих индикаторов ставил либо плюсики и минусики, либо стрелочки, либо проценты вероятности движения цены, исходя из графика индикатора в терминале. Потом он подводил итог своим наблюдениям и принимал определенное решение на вхождение в рынок в определенном направлении, а если продвинулся еще дальше, то и решение входить ли в рынок вообще или оставаться вне него.
И здесь мы задумаемся — а, что же происходит в самой совершенной нейронной сети — нашем мозге. А, оказывается, все довольно просто — пронаблюдав эти индикаторы, у нас в голове складывается образ, какого-то одного, общего индикатора, подающего нам сигнал, на основе которого мы и принимаем решение. А если хотите, то цепочка сигналов складывается в индикатор. И тут нам приходится задуматься — если мы изучаем индикаторы в определенный момент времени и заглядываем в прошлое максимум на несколько периодов — как нам исследовать эти индикаторы одновременно на протяжении нескольких предшествующих лет и на основании этого исследования построить единый индикатор с дальнейшей возможностью его оптимизации.
Итак, мы получили ответ на второй вопрос — что мы можем получить от нейронной сети в результате ее обучения? И даже в большей мере надо вопрос перефразировать — что мы хотим получить от нейронной сети в результате ее обучения? А логически подумав, мы можем ответить и на первый вопрос положительно. Поскольку технически и программно это сделать возможно. Как это реализуется на практике, вы можете увидеть в видеоролике на моем канале в https://youtu.be/5GwhRnSqT78. А также посмотреть плейлист с видео онлайн теста нейросетевых модулей на этом же канале https://youtu.be/3wEMQOXJJNk
2. Логическое обоснование обучения нейронных сетей на принятие решения
Прежде чем приступать к разработке любой торговой системы, мы задаемся вопросом — на каких принципах данная система будет функционировать? У нас есть два основополагающих принципа использования флетов и продолжение тенденции. Не будем рассматривать более узкие производные от них, внутридневная торговля или нет, на фундаментальных данных, на новостях, на открытии рынков и т.д. Мне пришлось сталкиваться с описанием нейросетевых продуктов, где их авторы в примерах использования предлагали прогнозирование каких либо курсов — акций, валют и т.д.
1. График отклика нейросети обученной на прогнозе цены
Рассмотрев график отклика нейронной сети, обученной на прогноз цены, мы видим, что хоть он и повторяет график цен, но на один шаг от него отстает. Причем это не зависит от того, прогнозируем ли мы ценовые данные или производные от них. Исходя из этого, мы можем это заключение постулировать. Например: “То, что для нас вчера, для нейронной сети — сегодня”. Согласитесь, что здесь, в принципе, ни о какой полезности речи идти не может. Однако отмечу, что данный вариант при определенной доработке мы так же можем использовать.
Но мы, конечно, хотели бы использовать постулат :“То, что для НС сегодня, для нас — завтра”. Машина времени какая-то. Однако мы понимаем, что все-таки самая лучшая нейронная сеть — это наш мозг. И мы можем использовать этот постулат максимум с 50% успехом (если мы говорим о вероятности да или нет), а то и хуже. Но ведь есть еще и третий вариант: “То, что для НС вчера, для нас — сегодня”. Или так: “ То, что для нас сегодня, для НС— вчера”. Разберем, что для нас означают эти постулаты в трейдинге:
- первый — мы совершаем сделку и завтра получаем ответ от НС — открылись в правильном направлении или нет. Хотя мы это уже знаем и без НС.
- второй — мы получаем информацию от НС, совершаем сделку и завтра видим, правильная рекомендация была или нет.
- третий — мы получаем информацию от НС, когда нам надо совершить ту или иную сделку вернее надо ли нам совершать сделку в настоящий момент, и в каком направлении.
Первый вариант, естественно, мы отбрасываем сразу. А вот второй и третий для торговли подходят. Однако второй вариант — вариант как бы заглядывания в будущее. Утрировано этот вариант торговли заключается в том, что мы получаем сигнал от НС в определенный момент времени, например, по закрытию дня с прогнозом, как закроется следующий день (и в данный момент времени нас не интересует движение цены до закрытия сделки). Реализовать его для чисто механической торговли на данном этапе сложно (для прибыльной торговли). Смысл третьего варианта заключается в том, что мы отслеживаем отклик НС на протяжении торговой сессии и покупаем либо продаем, интерпретируя его. И здесь нам надо понять основное.
Какой из вариантов мы сможем реализовать, зависит от того, как мы будем обучать нейронную сеть. И согласитесь, что третий вариант реализовать все-таки легче. Если во втором мы будем использовать какую-либо информацию с прицелом на получение результата на следующий день — его закрытия (день выбран как пример, естественно, может быть какой-либо другой период), то в третьем варианте мы используем информацию, пришедшую за шаг до принятия решения — куда двинется цена в этот момент времени. В своих системах я придерживаюсь третьего варианта.
3. Нейронная сеть это сложно или просто?
Если мы говорим о разработке системы торговли с помощью нейронных сетей, то естественно возникает вопрос – а где же нам взять саму нейронную сеть, как ее обучить и интегрировать в торговый терминал. На данном этапе я пока использую готовые НС “NeuroSolutions” и Matlab. Эти платформы позволяют выбрать подходящую вам нейронную сеть, обучить и довести ее до исполняемого файла с подходящим вам интерфейсом. В результате сама программа нейронной сети может выглядеть вот так:
2. Модуль нейронной сети, созданный в среде Matlab
3. Модуль нейронной сети, разработанный с помощью Neuro Solutions
Изучая возможности применения нейронных сетей на финансовых рынках, я пришел к заключению, что сети необходимо использовать не только в качестве основного поставщика сигналов на принятие решения, но также и как прекрасную возможность разгрузить программную часть эксперта торгового терминала. Представьте, что вы решили написать эксперт, который будет использовать десяток индикаторов, а у индикаторов различные параметрами, плюс их надо будет анализировать и сравнивать на какой-то временной глубине, плюс вы будете использовать несколько временных окон.… Получится довольно-таки перегруженный эксперт для реальной торговли, и что немаловажно, его будет сложно протестировать.
Но мы можем переложить функцию терминала по расчету индикаторов на нейронную сеть, обучив их определенным образом. И далее обучать нейронную сеть уже на этих индикаторах. То есть от эксперта нам понадобится передать в модуль нейронной сети только относительные ценовые данные, которые используются в формулах индикаторов. И впоследствии принять от нейронной сети несколько “единичек” и “ноликов” и, сравнив их, принять решение.
Давайте посмотрим на примере стохастического осциллятора, что у нас получится. Вот такие ценовые данные мы будем использовать в качестве входов, и в качестве одного обучающего примера мы будем использовать сам индикатор.
4. Ценовые данные
FileWrite(handle, iClose(NULL,0,i+4)-iLow(NULL,0,i+4), iHigh(NULL,0,i+4)-iClose(NULL,0,i+4), iHigh(NULL,0,i+4)-iLow(NULL,0,i+4), iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+4))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+4)), iClose(NULL,0,i+3)-iLow(NULL,0,i+3), iHigh(NULL,0,i+3)-iClose(NULL,0,i+3), iHigh(NULL,0,i+3)-iLow(NULL,0,i+3), iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+3))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+3)), iClose(NULL,0,i+2)-iLow(NULL,0,i+2), iHigh(NULL,0,i+2)-iClose(NULL,0,i+2), iHigh(NULL,0,i+2)-iLow(NULL,0,i+2), iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+2))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+2)), iClose(NULL,0,i+1)-iLow(NULL,0,i+1), iHigh(NULL,0,i+1)-iClose(NULL,0,i+1), iHigh(NULL,0,i+1)-iLow(NULL,0,i+1), iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i+1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i+1)), iClose(NULL,0,i)-iLow(NULL,0,i), iHigh(NULL,0,i)-iClose(NULL,0,i), iHigh(NULL,0,i)-iLow(NULL,0,i), iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,5,i))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,5,i)), iStochastic(NULL,0,5,3,3,MODE_SMA,1,MODE_MAIN,i), TimeToStr(iTime(NULL,60,i)));
После обучения нейронной сети, она нам выдаст вот такой результат.
5. Отклик нейросети
Для лучшего визуального исследования мы перенесем эти данные в виде индикатора в торговый терминал.
6. Стохастик и нейросетевой индикатор
В верхнем окне мы наблюдаем индикатор, построенный терминалом, а ниже – нейронной сетью.Даже визуально можно понять, что индикатор, построенный нейронной сетью, имеет все характеристики стандартного индикатора – уровни, пересечения, развороты, дивергенции и т.д. Хотя мы для обучения сети не использовали ни одной сложной формулы.
Таким образом, мы можем нарисовать вот такую блок схему торговой системы.
7. Блок-схема торговой системы
Блоки “MT4” – это наш торговый эксперт. Файл цен – “Input_mat”. Файл сигнала – “Open1,2,3”. Примеры этих файлов представлены в следующем разделе.
Основная работа у нас предстоит с блоками “Net1” и “Net2”. Подготавливая их, нам надо будет использовать несколько скриптов и экспертов для подготовки исторических данных и для тестирования сигналов от этих блоков нашим торговым экспертом. Но на самом деле, когда наша система готова как комплекс, ее модификация, развитие, экспериментирование с ней не занимает много времени. В качестве примера вы можете просмотреть видео https://youtu.be/k_OLEKJCxPE . То есть подготовка файлов, обучение “Net1” и “Net2” и первый этап тестирования на котором мы можем оптимизировать нашу систему, занимают 10 минут.
4. Интеграция нейронной сети в торговый терминал
Интеграция нейронной сети и торгового терминала особой проблемы не составляет. Этот вопрос я решил путем передачи информации через файлы, создаваемые терминалом и программой нейронной сети. Если кто-то скажет, что это замедляет действия системы на принятие решения, то я остановлюсь на основных достоинствах такого способа передачи информации. Ну, во-первых, информация, передаваемая терминалом, минимальна – всего несколько десятков байт. Посмотрите на строку файла, который записывается терминалом.
8. Файл нормализованных цен
Хотя сам способ передачи информации программно нам дает возможность открываться только на следующем тике после прихода сигнала от нейронной сети. Но если система не использует супер краткосрочные моменты совершения сделок, это не существенно. Забегая вперед, отмечу, что в данной статье я рассматриваю систему “по ценам открытия”. И опять-таки, забегая вперед и исходя из вышесказанного, мы приходим к выводу, что системы с таким способом передачи информации требуют тестов либо по контрольным точкам, либо по всем тикам. Тесты систем на нейронных сетях на контрольных точках и всех тиках практически идентичны. Хотя ранее, при разработке традиционных торговых роботов, я сталкивался с проблемой значительного ухудшения итогов торгов при переходе на тест по всем тикам.
Но основным достоинством такого способа передачи информации является то, что мы на каждом этапе можем контролировать передаваемые и получаемые данные. Это я считаю одним из основ дальнейшей успешной торговли с использованием нейронной сети. И кажущаяся громоздкость подготовки самой нейросетевой системы, в результате оборачивается достоинством при реальной работе, так как мы уменьшим до минимума вероятность получения программной ошибки либо ошибки логико структурной схемы системы. Все-таки сама система перед ее применением требует поэтапного тройного тестирования. На этом мы остановимся подробнее позднее.
На рисунке ниже мы видим файлы “Input_mat” и “Bar”. Эти файлы формируются торговым терминалом. Файлы “Open1,2,3” формируются программой НС. Единственное небольшое неудобство заключается в том, что в программе НС нам надо явно задавать пути, к этим файлам исходя из того, в каком качестве мы используем эксперт – тестируя его или реально с его помощью торгуя.
9. Файлы сформированные нейросетевым модулем и экспертом
Файл “Bar” – вспомогательный и используется в качестве счетчика.
В файлы “Open1,2,3” мы непосредственно получаем отклик НС. Первая строка – предшествующий отклик. Вторая – отклик в реальном времени. Данный формат является частным случаем. В зависимости от условий ведения торгов он может отличаться. Как и само количество файлов откликов. В данном случае это обусловлено тем, что в самом модуле НС используется три сети, обученные на разных временных отрезках.
10. Отклик НС модуля в файлах Open 1,2,3
5. Как тестировать нейронную сеть? Этапы тестирования
При подготовке торговых систем на основе нейронных сетей я использую три этапа тестирования. Первый этап я назвал быстрым тестированием. Это основной этап подготовки системы в смысле ее общей работоспособности. На этом этапе мы систему можем оптимизировать, и на оптимизацию у нас не уходит много времени. Здесь мы используем скрипт или эксперт для подготовки файла исторических данных после “истории”, на которой мы обучали нейронную сеть и по текущее время. Потом мы по этим данным получаем отклики от сети с помощью скрипта из среды матлаб и по ним строим индикатор. С помощью этого индикатора мы и оптимизируем наши НС отклики на вхождение в рынок и выход из него. На рисунке ниже приведен пример этого индикатора. Этот индикатор является интерпретацией 52 производных от 12 пользовательских индикаторов. Хотя это могут быть и стандартные индикаторы терминала.
11. Индикатор построенный по откликам нейросети
Далее мы можем оптимизировать нашу стратегию торговли.
12. Результаты тестирования откликов нейросети
Второй этап проведения тестов заключается в том, что мы должны обучить и записать нейронные сети в среде Matlab с помощью Neural Network Toolbox.
13. Neural Fitting
14. Полученные нейросети
Получить отклик от этих нейронных сетей из командного окна.
15. Получаем отклики от нейронных сетей
Таким образом, мы получим еще один индикатор, причем он должен быть идентичным предыдущему. Естественно, идентичным должен быть тест стратегии, построенной на его основе.
Если у нас все получится, то можно двигаться далее.
И протестировать эти НС с помощью скрипта модуля нейронной сети, который мы будем использовать в системе. Протестировать их на каком либо временном отрезке по контрольным точкам. Если этот тест совпадет с идентичным временным отрезком предыдущего теста индикатора, то мы движемся в правильном направлении. Мы запускаем этот скрипт в среде Matlab. Одновременно с этим запускаем наш рабочий эксперт в торговом терминале.
16. Запустим скрипт в рабочей среде Matlab
17. Запустим эксперт в терминале
Получим примерно такой результат.
18. Результат тестирования скрипта Matlab и эксперта MT4
Далее нам надо оформить интерфейс пользователя, скомпилировать модуль нейронной сети и протестировать его предыдущим способом.
19. Тестируем скомпилированный нейросетевой модуль
Если мы получим схожий с предыдущим результат, то можно приступать к реальной торговле по нашей нейросетевой системе.
5. Об обучающих выборках
В зависимости от того, на каких обучающих выборкам мы будем подготавливать нейронную сеть, мы получим различные индикаторы отклика сети. И, следовательно, сможем строить различные стратегии торгов. А комбинация различных стратегий даст нам более стабильный конечный результат. Один вариант я представил в предыдущих разделах. Там мы делали выборку по экстремумам торгового периода. Приведу еще один пример.
20. Индикатор откликов нейронной сети обученной по иной выборке
В данном случае я обучал две нейронные сети. Одну на покупку, вторую на продажу. Тренировку проводил на выборках, когда минимальная цена достигнута, а максимальная еще нет. И наоборот. В двух индикаторах, представленных на рисунке, интерпретированы двенадцать пользовательских индикаторов. Максимумы красной линии показывают, когда достигнута минимальная цена. Максимумы серой – максимальная цена. Как мы видим, теперь есть возможность оптимизировать данные индикаторы либо отдельно каждый или в паре. Например, по пересечению друг с другом, по разнице значений, по пересечению определенных уровней и т.д.
Согласитесь, что двенадцать индикаторов оптимизировать гораздо сложнее.
Заключение
На тему применения нейронных сетей в трейдинге написано много статей. Литературы, в которой бы полностью раскрывалась данная тема на предмет доведения системы построенной на нейронных сетях до реального ее применения, очень мало. Да и многие описания предназначены в основном для пользователей со специальными знаниями в программировании. В одной статье, да и в нескольких, данную тему раскрыть сложно. Но я попытался это сделать без нагромождения теоретического и специального материала в книге “Нейросетевая торговая система. MetaTrader 4 + MATLAB. Пошаговая разработка. Издание второе”.
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Другие статьи автора
- Практическое применение нейросетей в трейдинге (Часть 2). Компьютерное зрение
- Практическое применение нейросетей в трейдинге. Python (Часть I)
- Практическое применение нейросетей в трейдинге. Переходим к практике
Источник https://profithunt.ru/indikatory-forex/skachat-besplatno-indikator-predskazatel-na-osnove-samoobuchajushhejsya-nejronnoj-seti-ot-gpwr-dlya-metatrader-4-v-mql5-code-base-2009-06-16/
Источник https://www.mql5.com/ru/articles/7031