Блог им. DenisVo

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

Всем привет. 

Медленно продалжаем копать в строну нейронных сетей. В этом видео я расскажу о некоторых своих неудачах, которые встретились на моем пути :)



Основаная проблема конечно же в том, что мои данные являются мусором и при этом сильно несбалансированны. 
Так же выяснилось, что ROC кривая довольно плохо работает с несбалансированными данными.

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

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

По ссылке на github вы можете найти код из видео, я его немного структурировал, и если кому интерсно, можете с ним поиграться.
github.com/CloseToAlgoTrading/CodeFromVideo/tree/master/episode_12
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
761 | ★2
14 комментариев
Вы можете пояснить, почему Close имеет shape (None, 10, 1) — может какая-то ошибка?
Что за признак Nr?
avatar
Михаил, Nr это номер тика. В целом идея была изолировать каждый день и уйти от времени, сконструировав бары по обьему. в итоге вместо милисекунд я просто использовал как индекс бара первый индекс первого тика. 
Так как каждый день у нас начинается с 0, то можно видеть сколько тиков в каждом баре :).

что касается (None, 10, 1) то это для lstm, входной тенсор. У нас 1 фича, ее 10 временных шагов. None обозначает любое количество входных данных. Т.е. один вход у нас имет размерность 10,1 — по простому 10 строк 1 колонка.

зы. я дмаю в ноутбуке *step3* более понятно суть происходящего должна быть.
avatar
Denis, про shape понял. Про номер тика не понял зачем он нужен — какую содержательную информацию должен нести для предсказаний?
avatar
Михаил, В представленном примере скорее всего никакую, просто до кучи его туда впихнул. но на базе него можно определять другие параметры. типа скорость потока ордеров. Если у нас большие обьемы, то свечек будет больше в целом за весь день. Или же можно узнать в одном баре был один большой ордер или же несколько мелких, ну и тд. Я пока только копаю в эту сторону. Времени особо нет, еще и вирусы тут во круге... 
avatar
Denis, тут простой тест — сколько у вас на уникальный номер тика имеется обучающих примеров. Если меньше нескольких тысяч, то вряд ли вы чего-то выучите. Вторая проблема, что у вас признаки слишком разного масштаба из-за этого признака — обычно сети крайне плохо такое перевариавают. 
Ну и третье — у вас сеть слишком примитивная чтобы выучить какие-нибудь зависимости. Посмотрите на стандартные архитектуры для изображений и анализа звука — там десятки слоев, которые постепенно выуживают сигнал из исходных данных, а у вас несколько слоев при этом известно, что сигнала заведомо мало относительно шума. Тут возможно нужно еще больше слоев. 
Я лично взял за основу WaveNet и составил сеть с 87 слоями, которая дает приемлемый результат.
avatar
Михаил, С размерностью там все ок, они все приводятся к размерности от 0 до 1. Более того я их заскейлил по всему датасету сразу :)
По поводу, мало данных и примитивной сети это да, однако приметивная сеть вполне может находить некоторые зависимости. Ну да, архитектура сети вопрос отдельный и более серьезная и сложная вскорее всего будет работать лучше. Правда как вы наверняка знаете, у сложных архитектур много других проблем.

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

Я долгое время пытался всю обработку запихнуть в тенсорфлоу, но я наверное туповат %)) там что не метод надо с бубном работать.
avatar
В целом я тут обдумывал весь свой подход, и стал задумываться, а имеет ли смысл в общем делать классификацию. Получается что я делаю некоторое упрощение в значениях которые собираюсь предсказывать, т.е. не целый ценовой ряд, а просто класс, но почему это должно работать лучше, чем предстказывать весь будущий ценовой ряд :) я как то не придумал.
avatar
Denis, я делаю регрессию — предсказываю изменение цены в процентах на некое количество временных периодов в перед. 
avatar
Михаил, мне почему то казалось, и пока еще кажется, что упрощение меток и классификация, должна работать лучше регрессии. Стоит сказать что в некоторых других похожих задачах так и есть, но там явно прослеживались зависимости между фичами и лейблами. На рынке же, мне думается все же будет лучше сперва выделить некий класс событий в ручную, как эксперт, и уже в этом классе делать предсказаний. 
Т.е. Задачу надо бы упрощать.
avatar
Denis, на мой взгляд лучше искать больше данных, а не метки упрощать. Все равно когда вы делаете реальные ставки, то имеете дело с реальными доходностями, а не упрощёнными метками. Кроме того, мне кажется сделать рабочую модель на тиковых данных очень сложно. Там обычно работают стратегии типа парного арбитража, и мало кто занимается торговлей одним инструментом в попытках предсказать его движение. В акциях и так отношение сигнал шум не очень, а на коротком периоде на это еще валются гигантские транзакционные издержки. 
avatar
Михаил, А как вы важность фич искали? я как то читал, если не ошибаюсь, вы что то random forest использовали для проверки… или это не вы были? )
avatar
Denis, у меня сейчас основная модель прогнозирования на основе GBM (Catboost) — там важность признаков из коробки есть, но признаки нужно самому сочинять. За основу взял список рыночных аномалий из академических статей. Выбор оптимальных параметров и признаков с помощью Байсовской оптимизации (hyperopt).
Сейчас пишу предсказания на основе сетей на основе просто котировок и дивидендов без ручных признаков — есть рабочий прототип, но пока не использую. Пишу тесты, а потом буду писать генетический алгоритм поиска оптимальных параметров. Не знаю сколько времени займет.
Собираюсь стравить GBM и сети в генетическом отборе.
avatar
Михаил, ага, да boost алгоритмы часто быстрее обучаются и лучше результат чем сети дают, если не особо по структуре заморачиваться. 
Хмм, интересно, по поводу генетических алгоритмов для поиска параметров, не будет и это своего рода подгонка?
avatar
Denis, выбор алгоритма подгонка, выбор параметров алгоритма подгонка, выбор используемых признаков подгонка, обучение алгоритма это тоже подгонка. Тут просто нужно разумно подойти к процессу. В трейдинге постоянно появляются новые данные. Если в делать тестирование и генетический отбор на новых данных, то имхо тут ничего страшного нет. Страшно, когда учишь тестируешь на одних данных.
avatar

Читайте на SMART-LAB:
Фото
ДОМ.РФ может увеличить прибыль за девять месяцев на 39%: прогноз Т-Инвестиций
30 октября $DOMRF опубликует результаты по международным стандартам финансовой отчетности (МСФО) за третий квартал 2026 года. Главный...
Фото
💡 Если ставка не спешит вниз
Ключевая ставка остаётся на уровне 14% с июля. По прогнозу аналитиков ВТБ Мои Инвестиции, к концу 2027 года она может снизиться до 12,25%....
Фото
⚡ Фонды FinEx: от заморозки к ликвидности. Как продать актив в БКС
В 2022 г. паи фондов FinEx для многих инвесторов превратились в замороженный актив без ясных перспектив. Торги этими ETF были остановлены, сами...
Фото
Банковский сектор сентябрь 2026 г. - рекордная прибыль, но рост все менее равномерный
Банки отчитались за сентябрь. Что интересного мы узнали?  За 12 месяцев прибыль сектора составляет уже 4,5 трлн руб. при прогнозе ЦБ 3,9–4,4...

теги блога CloseToAlgoTrading

....все тэги



UPDONW
Новый дизайн