Обучение нейросети

 

Добрый день.

У меня есть 3 слойная нейросеть, 5 нейронов в каждом слое, на выходе 2 нейрона - структура 5-5-2; 

Обучаю по зигзагу и по индикатору RSI: когда по ZigZag вершина, даю нейросети на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 10 (SELL); Когда по ZigZag впадина, даю на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 01 (BUY).

Однако, сеть так никогда не обучится, так как данные в обучающей выборке для сигнала BUY и данные для сигнала SELL должны отличаться. Поэтому поставил условие, подавать 5 последних значений RSI в том случае, если все 5 больше 60 (для SELL) и меньше 40 (для BUY) (здесь без учета нормализации, в коде нормализация входных сигналов есть). Но в этом случае опять проблема: в случае флета все хорошо, но на тренде, если тренд вниз, в обучающей выборке остаются только сигналы на покупку, если тренд вверх, остаются сигналы только на продажу. То есть получается, даже на обучающем периоде советник сливает. 

Поэтому встал вопрос, на каких данных и каких образом обучать нейросеть? 

 
Nexxtor:

Добрый день.

У меня есть 3 слойная нейросеть, 5 нейронов в каждом слое, на выходе 2 нейрона - структура 5-5-2; 

Обучаю по зигзагу и по индикатору RSI: когда по ZigZag вершина, даю нейросети на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 10 (SELL); Когда по ZigZag впадина, даю на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 01 (BUY).

Однако, сеть так никогда не обучится, так как данные в обучающей выборке для сигнала BUY и данные для сигнала SELL должны отличаться. Поэтому поставил условие, подавать 5 последних значений RSI в том случае, если все 5 больше 60 (для SELL) и меньше 40 (для BUY). Но в этом случае опять проблема: в случае флета все хорошо, но на тренде, если тренд вниз, в обучающей выборке остаются только сигналы на покупку, если тренд вверх, остаются сигналы только на продажу. То есть получается, даже на обучающем периоде советник сливает.

Поэтому встал вопрос, на каких данных и каких образом обучать нейросеть? 

вам сюда))

https://www.mql5.com/ru/forum/86386

Машинное обучение: теория и практика (торговля и не только)
Машинное обучение: теория и практика (торговля и не только)
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
ivanivan_11:

вам сюда))

https://www.mql5.com/ru/forum/86386

Я конечно прочитаю эти 261 страниц, вдруг найду ответ на свой вопрос.

Но хотелось бы, чтоб помогли с решением здесь. 

 
Nexxtor:

Я конечно прочитаю эти 261 страниц, вдруг найду ответ на свой вопрос.

Но хотелось бы, чтоб помогли с решением здесь. 

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

 
Nexxtor:

Добрый день.

У меня есть 3 слойная нейросеть, 5 нейронов в каждом слое, на выходе 2 нейрона - структура 5-5-2; 

Обучаю по зигзагу и по индикатору RSI: когда по ZigZag вершина, даю нейросети на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 10 (SELL); Когда по ZigZag впадина, даю на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 01 (BUY).

Однако, сеть так никогда не обучится, так как данные в обучающей выборке для сигнала BUY и данные для сигнала SELL должны отличаться. Поэтому поставил условие, подавать 5 последних значений RSI в том случае, если все 5 больше 60 (для SELL) и меньше 40 (для BUY) (здесь без учета нормализации, в коде нормализация входных сигналов есть). Но в этом случае опять проблема: в случае флета все хорошо, но на тренде, если тренд вниз, в обучающей выборке остаются только сигналы на покупку, если тренд вверх, остаются сигналы только на продажу. То есть получается, даже на обучающем периоде советник сливает. 

Поэтому встал вопрос, на каких данных и каких образом обучать нейросеть? 

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

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

 
Aliaksandr Hryshyn:

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

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

Можно по подробнее?
 
Видимо имеется в виду разделение обучающих выборок, т.к. в разные сессии различная волатильность. Ну и новости тоже нужно отфильтровывать.
 
Nexxtor:

Добрый день.

У меня есть 3 слойная нейросеть, 5 нейронов в каждом слое, на выходе 2 нейрона - структура 5-5-2; 

Обучаю по зигзагу и по индикатору RSI: когда по ZigZag вершина, даю нейросети на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 10 (SELL); Когда по ZigZag впадина, даю на вход 5 последних значений индикатора RSI(14) и правильный сигнал на выходе 01 (BUY).

Однако, сеть так никогда не обучится, так как данные в обучающей выборке для сигнала BUY и данные для сигнала SELL должны отличаться. Поэтому поставил условие, подавать 5 последних значений RSI в том случае, если все 5 больше 60 (для SELL) и меньше 40 (для BUY) (здесь без учета нормализации, в коде нормализация входных сигналов есть). Но в этом случае опять проблема: в случае флета все хорошо, но на тренде, если тренд вниз, в обучающей выборке остаются только сигналы на покупку, если тренд вверх, остаются сигналы только на продажу. То есть получается, даже на обучающем периоде советник сливает. 

Поэтому встал вопрос, на каких данных и каких образом обучать нейросеть? 

Мне интересны нейросети, но пока не знаю, как к ним подступиться.

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

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

RSI - очень интересный индикатор, не раз убеждался, что рынок (Форекс) его чувствует - очевидно, что значимыми являются уровни 30/70/50 даже 30 и 70 более значимы так как от них как правило происходит отскок, а так же именно их пересекает чаще всего последнии свечи максимума/минимума тренда. Рынок реагирует на RSI - можно ожидать прогнозирование движения цены, но сомнительно что стоит обращать внимание на динамику пробития уровней RSI (если это не 30 или 70), а интересней обратить внимание на то как часто подряд были пробиты уровни 70 и 30 без возврата к противоположным и какое расстояние между этими уровнями в пунктах (при флэте расстояние сужается).

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

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

 
Nexxtor:
Можно по подробнее?

Это как один из возможных вариантов исследования.

Например:

1. Собираете некоторое множество входных данных(записи, в которых, возможно, по вашему мнению, есть некоторые устойчивые паттерны), каждая запись может состоять из нескольких значений индикаторов(не "перерисовывавшихся" на тех барах, которые идут в качестве входа) - это будет как входной вектор, в качестве выходного - некоторые характеристики изменения цены в "будущем" которые связаны с прибылью потенциальной сделки

2. Выполняете кластеризацию методом k-средних, используются только входные векторы, в итоге получаем записи, каждая из которых принадлежит определённому кластеру.

3. Далее надо проанализировать результат каждого кластера(выходные векторы), только брать не все записи, а те, в которых номер кластера отличается от предыдущей записи. Анализ распределений/прибыльности/... Выбрать лучшие кластеры, если они подходят.

4. На новых данных(по отношению к анализируемым) можно проверить устойчивость распределений необходимых кластеров.

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

Данных надо много(зависит от количества кластеров).

Хорошо помогает статистика в этом деле, подходов довольно много.... 

 
Aliaksandr Hryshyn:

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

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

Это где шума много? В 5-ти входах? В 5-ти входах нет информации. А кластеризацию по 5-ти входам предлагаете?
 
Aliaksandr Hryshyn:

Это как один из возможных вариантов исследования.

Например:

1. Собираете некоторое множество входных данных(записи, в которых, возможно, по вашему мнению, есть некоторые устойчивые паттерны), каждая запись может состоять из нескольких значений индикаторов(не "перерисовывавшихся" на тех барах, которые идут в качестве входа) - это будет как входной вектор, в качестве выходного - некоторые характеристики изменения цены в "будущем" которые связаны с прибылью потенциальной сделки

2. Выполняете кластеризацию методом k-средних, используются только входные векторы, в итоге получаем записи, каждая из которых принадлежит определённому кластеру.

3. Далее надо проанализировать результат каждого кластера(выходные векторы), только брать не все записи, а те, в которых номер кластера отличается от предыдущей записи. Анализ распределений/прибыльности/... Выбрать лучшие кластеры, если они подходят.

4. На новых данных(по отношению к анализируемым) можно проверить устойчивость распределений необходимых кластеров.

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

Данных надо много(зависит от количества кластеров).

Хорошо помогает статистика в этом деле, подходов довольно много.... 

А вы точно разбираетесь в том, о чем пишите?