Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 135

 
Andrey Dik:
В течении какого времени?

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

Ну, скажем, за пару суток работы машины (или за неделю). Какой-то обозримый срок, скажем так.

 
Alexey Burnakov:

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

Ну, скажем, за пару суток работы машины.  

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

За пару суток? - нет, думаю гораздо быстрее можно получить хороший результат, часов или даже минут. В статье поиск шел что то около нескольких секунд, но там было 100 баров. В Вашем случае будет подольше конечно. Экспериментально можете подобрать количество эпох так, что бы получить результат с заданной точностью уложившись в заданное время. 

 
Andrey Dik:

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

За пару суток? - нет, думаю гораздо быстрее можно получить хороший результат, часов или даже минут. В статье поиск шел что то около нескольких секунд, но там было 100 баров. В Вашем случае будет подольше конечно. Экспериментально можете подобрать количество эпох так, что бы получить результат с заданной точностью уложившись в заданное время. 

Так. Спасибо. Я буду пробовать. Хочу сгенерить входы для минутных баров на всей истории. И подставить в свой эксперимент. 

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

 
Alexey Burnakov:

Так. Спасибо. Я буду пробовать. Хочу сгенерить входы для минутных баров на всей истории. И подставить в свой эксперимент. 

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

И Вам спасибо. На выделенное жирным мало кто обращал внимание, почему то...

Хочу добавить. В статье идет оптимизация ИЗЗ с учетом среднего спреда для инструмента, но по прошествии времени я теперь склоняюсь, а можно сказать - уверен, к мысли, что оптимизацию нужно проводить без спреда, а тестовые торговые прогоны считать уже со спредом. 

 
Andrey Dik:

И Вам спасибо. На выделенное жирным мало кто обращал внимание, почему то...

Хочу добавить. В статье идет оптимизация ИЗЗ с учетом среднего спреда для инструмента, но по прошествии времени я теперь склоняюсь, а можно сказать - уверен, к мысли, что оптимизацию нужно проводить без спреда, а тестовые торговые прогоны считать уже со спредом. 

Для оптимизации "на каждом баре" спред конечно нужно учесть. Иначе будет тупо сделка на каждом баре в направлении следующей цены открытия. Спред далает задачу нелинейной и определяет оптимальную конфигурацию сделок.
 
Alexey Burnakov:

LSTM мы рассмотрим позже.

Пока что мы с коллегой пришли к R^2 0.2 на тесте. Несколько сверточных фильтров и несколько нейронов в полносвязном слое. По идее, там рекуррентность не нужна. Нужно правильное вычленение фичей. 

Пока по моей задаче результаты такие (все оценки R^2 на тестовом множестве):

 ARIMA: 0.14

MLP (fully connected NN): 0.12-0.15

GBM: 0.1

Convolutional Net (simple, not developed well): at least 0.2 

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

Если все-таки у кого-то есть время попробовать решить задачу (какой-нибудь рекуррентной сетью), то прошу поделиться результатом. 

 
Alexey Burnakov:

Пока по моей задаче результаты такие (все оценки R^2 на тестовом множестве):

 ARIMA: 0.14

MLP (fully connected NN): 0.12-0.15

GBM: 0.1

Convolutional Net (simple, not developed well): at least 0.2 

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

Если все-таки у кого-то есть время попробовать решить задачу (какой-нибудь рекуррентной сетью), то прошу поделиться результатом. 

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

 Самый лучший полученный результат R^2 на тесте - 0.23.

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


 

Может у людей, знакомых с НС не понаслышке будут мысли, как можно смоделировать такую сложную функцию (пример):

 

Наращивание кол-ва слоев, нейронов?  

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

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

Алексей 

 

Вы, главное, побольше входов давайте.

И обучения примеров. 

 
Vadim Shishkin:

Вы, главное, побольше входов давайте.

И обучения примеров. 

Этого достаточно.
 

Чем больше нейронов в скрытом слое - тем более сложную функцию можно описать нейронкой, вам нужно больше скрытых слоёв и нейронов в них.

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

Ещё, выход нейронки ограничен активационной функцией. Для популярных - сигмоида это (0;1), relu - [0;inf). Целевые значения нужно прошкалировать в другой интервал, ваши выходы в интервале (-7;7) просто недостижимы для многих пакетов.