Всем привет.
Сей пост скорее поток мыслей, дабы их структурировать, пообсуждать, а возможно и идею интересную почерпнуть, :)
Все кто смотрел мои видюшки уже в курсе, что я тиху по малу пытаюсь прикрутить нейронные сети или мл к торговле, и построить прибыльную систему. Начал я конечно с самых азов и подхода в лоб, но как и предполагалось, ничего у не вышло. Так как весь подход построен на сетях которые обучаются с учителем, нам нужны размеченные данные. Всегда встает вопрос, как же нам получить эти метки. Чем на самом деле являются эти метки? Мне кажется слово триггер будет более правильным описанием того что происходит. Мы делаем некоторое предположение, что после некоторого события, цена пойдет в том или ином направлении, на некоторое минимально ожидаемое расстояние, с некоторой вероятностью. По большому счету мы и пытаемся узнать эту вероятность при помощи нейросетей.
Был проведен эксперемент со стратегией на двух скользящих средних. Пересечение средних — это наш триггер, если цена со 100% вероятностью дошла до минимально заданной цели то мы можем искользовать этот триггер. Далее можно посчитать всякого рода статистику, сколько прибыльных, сколько убыточных сделок. Тут никаких нейросети не нужны, посмотрели результат, увидили что ничерта не работает. :) Однако можно пойти другим путем, берем пересечение прямых, и смотрим куда после нашего триггера пошла цена, вверх или вниз, если видим некоторый перекос в результатах, скажем на истории у нас оказалось 60% прибыльных и 40% убыточных сделок, то тут есть уже над чем подумать. Встает вопрос как узнать будет ли сделка прибыльна или убыточна. Вот тут то и можно попытаться использовать нейронные сети, которые нам могут заменить сложные статистические модели. Мы же всегда работаем с предположениями и вероятностями, если мы скормили модели наши данные, и модель, не дай бог, обучилась и смогла в этих данных что то найти, то мы можем смело сказать, что у нас есть зависимость между нашими данными и результатом. Зависимость эта нам не известна, да и не нужно нам ее знать. Эдакий простой метод и не надо нам все эти заумные статистические, математические методы поиска нужного процесса.
Филосовские размышления привели меня к тому, что мне не дает покоя. Как же нам находит эти самые триггеры. Понятно, что у нас есть классические методы: пялимся на график, читаем книжки, шерстим форумы, конструируем индикаторы и тд. В общем то хотим мы найти некоторые зависимости между тем что мы видим сейчас и будущим в заданных нами рамках. Теперь собственно вопрос, который хотелось бы обсудить.
Как считаете, если на рынке случается некоторая аномалия, процесс во временном ряде изменятеся (как пример пересечение средних), будет ли это являтся хорошей точкой входа. Возможно стоит попытаться сперва решить задачу поиска аномалий во временном ряде цены, и эти точки брать как наши метки?
Правда мне не совсем понятно, как искать эти самые аномалии автоматически. Может кто уже заморачивался по такой теме? )
Для МО нужны свои методики обучения для каждого класса задач и это не проще, а сложней чем создавать индикаторные стратегии.
С тем что вы сказали я согласен, но именно первый шаг хотелось бы решить иначе. Если знать, что искать :) мне не нужны будут сети, простой алгоритм на ифах все решит.
Меня больше волнует другой вопрос, индикатор показывает некоторое изменение в процессе, так вот использовать сеть или мл алгоритм как индикатор. Получается создание совего индикатора но на базе сети.
У меня на СЛ пара простеньких топиков есть по МО. Возможно там есть какая-то доп инфа.
Если там ничего нет, то НС там ничего не найдет.( Как и раньше, сама стратегия остается за вами.
Кстати, а почему вы убеждены, что индикаторы будут работать лучше, чем нейронная сеть вместо индикатора? Любой технический индикатора же показывает только то, что уже произошло, он же на цене построен по четко заданной формуле.
Тем самым вы только усложните НС, и не более того.
Кстати, уж, — любой график показывает только то, что уже произошло, и не более того. А индикаторы нужны не для прогнозирования будущего, а для выделения из врем ряда нужной вам конкретной информации. Какой именно? — решать вам.
Что покажет вам индикатор, какую конкретно полезную информацию?
Обычные стат. параметры и информация.
Т.е. надо считать всю статистику и задавать некоторый критерий фильтрации этих параметров? на базе этого фильтра формируется результат о состоянии рынка или смены тенденции? правильно я мысль понимаю или?
1. Сначала место — потом сигнал
2. Пересечение средних — далеко не самый лучший их сигнал
Если не отбросите эти два пункта сразу, возможно получите что надо.
Эх, пишу видимо сумбурно, я вот про место и пишу, как это самое место находить?
Самый простой вариант определения места — это верх или низ тренда. Но это разворотный подход, он хуже трендового как по надежности, так и по «гарантированным» целям, и по возможностям тралить.
Места входа в тренд надежней и выгодней,
но их описывать НЕСОИЗМЕРИМО сложней.
За всё надо платить… Грааль не может быть легким.
Это отдельная сложная тема сопровождения открытой сделки, которая может улучшить характеристики робота.
Но правильный робот может и без этого зарабатывать.
Тут есть два основных варианта.
Первый описан в известной вам книге. Вы формулируете некий критерий выхода из позиции (в книжке тройной барьер, но могут быть и другие варианты), а система должна давать сигнал на вход. Тут все просто, сеть должна давать или просто сигнал войти или нет (задача классификации), или ожидаемую доходность от входа (задача регрессии). Вы легко сможете разметить данные для каждого момента времени, воспользовавшись критерием выхода, и на полученных примерах учить.
Второй вариант по сложней. Полноценный RL, в котором сеть дает сигналы и на вход, и на выход.
Вот первый вариант на самом деле формируется из двух критериев, вход и выход. С выходом то все понятно. А со входом возникают проблемы. Как я уже выше в коментариях отметил. В обще крутится в голове идея скормить просто ценовые ряды в сеть для поиска аномалий, посмотреть что выдаст, возможно можно будет кластеризировать и далее найти точки входа. Можно взять htm от нументы, но там вроде придется весь ряд запихивать, по дням сегментированный не получится.
Никто не придумывал фичи для RL в играх Атари, го и т.д. — им просто кормили состояние экрана, или доски и все. Никто не придумывает фичи при классификации картинок. Сети работают на сыром сигнале. В нашем случае это котировки и объемы, возможно данные о котировках и объемам других инструментов, эмбединги наименований инструментов или их качественных характеристик, если модель тренируется на нескольких инструментах.
Если вы идете в сторону рукопашных фичей, какой-то суровой пред обработки, то нужно смотреть в сторону классического ML, в первую очередь градиентного бустинга.
На мой взгляд, ваша основная проблема, что вы взяли примитивную сетку в пару слоев и надеетесь, что она вам решит достояно сложную задачу. Сети — это поиск архитектур. В случае решенных задач (классификация изображений, как пример), такой поиск занял много лет. Большинство работающих архитектур подразумевают десятки и сотни слоев, а не парочку, как у вас.
Бустинг я тоже не отбрасываю. Вы когда то писали, что у вас множество входных фич и на их базе вы вроде бы стрите регрессионную модель. Поправте меня если я ошибся. Если у вас регрессия, то вы соответственно выбираете открывать позицию или нет в зависимости от предсказания, тем самым проверяя каждый тик, бар. Так ведь? соответственно ваша модель вам выдает точки входа.
Т.е. модель, вроде бы как сама находит некоторый внутренний процесс, и говорит вам следующее значение, после чего вы фильтруете его по критерию подходит не подходит и отрываете сделку?
Т.е. ваша модель говорит вам об изменения в состоянии актива, так как доходность в будущем, по мнению модели, будет маленькая, а следовательно надо уменьшить долю актива в портфеле, провести ребалансировку.
Я почти об этом и размышляю тут :), мы ведь можем строить стратегию торговли основываясь на нескольких регрессионных моделей и их взаимосвязях.
Вернемся к машкам, что делают средние, усредняют значения цены. Что делает регрессионная модель, грубо говоря тоже усредняет все параметры, ну ок, она находит некоторую функцию как можно ближе описывающую ваш процесс. Получается тот же самый индикатор. И ваша же модель, для ребалансировки портфеля, тот же индикатор, просто построен по более сложной формуле, чем скользящая средняя.
Кстати, мысль хорошая, что бы использовать такую модель для поиска точек входа, а уже дальше ее фильтровать не по каким то четко заданным критериям, а с помощью другого алгоритма, модели.
У меня в голове слелующий подход крутится для внутредневных торгов:
1. поиск триггера -> поиск аномалий в ценовом движении или на базе стандартного индикатора или же использование регрессионной модели.
2. разметка данных для поиска направлений по этим триггерам
если вдруг тут все хорошо, и есть некоторая вероятность что у меня есть преимущество, то переходим к следующему шагу:
3. строим метки по окну, что бы можно было оценить ожидаемую доходность и убыток.
4. обучаем еще одну сеть.
5. профит :)
зы. мне не очень нравятся всякие эти стратегии на простых индикаторах и голом тех анализе, меня как то в сон от них клонит, учитывая что уже миллион раз все перепроверено другими. другое дело нейросетки… и интересно и полезно… можно и картинки и текст… и тд
У нас как то была идея использовать нейросети, которые бы отслеживали эмоциональное состояние самого трейдера и выдавали бы рекомендации, мол все ок, торгуй, а сейчас не торгуй. Входные сигналы — данные с bci интерфейса… но чет данных достаточно не набрали :) и загнил проект.
Первый более концептуальный — зачем нужно как-то особо выделять поиск аномалий. Почему сеть сама не может это делать. Такое впечатление, что у вас есть в загашнике какой-то инструмент лучше сети. Если так, может им и пользоваться и в сети не лезть.
Я честно сказать не очень понимаю, зачем это нужно. В сетях давно придумали Gated Units, которые позволяют реализовывать фильтрацию, Attention, чтобы агрегировать несколько разных сигналов. На мой взгляд, лучше продумать архитектуру, которая будет реализовывать ваши идеи поиска и агрегации и учить такую сеть end-to-end, а не разбивать все на кучу разрозненных этапов.
Второй момент более технический. Не очень понятен критерий аномальности, который позволит потом получать более дельный результат с помощью сетей?
Ну и третье, если на неком предварительном этапе вы найдете некие действительно аномалии, то видимо их будет крайне мало, а для обучения сети нужно много примеров.
Хмм… честно говоря я этот момент видимо в своих размышлениях упустил, спасибо что обратили на это внимание, надо будет это обмозговать. Это я видимо от того, что есть у меня убеждение, что даже самая простая архитектура на хороших данных что то да покажет, что то отличное от рандома :)
В тики и внутредневную тенденцию я полез по причини того, что там можно больше данных накопать, и так как нынче все процессы идут быстрее, то мне кажется, что вероятность предстказаний некоторого более близкого события делать проще, но с другой стороны там слишком много шума, что усложняет все.
Возвращаясь к дневным таймфреймам, там ведь тоже шума хватает, хоть и действуют более долгие и инертные тенденции.
Ну и да, действительно стоит попробовать дневные таймфреймы.
Ну так соберите в кучу мелкие «гарантии» и вот вам грааль! )))
Но есть непонятная хрень — сколько видел хороших роботов, почти все они работают на минутках или даже на тиках. Про HFT вообще молчу, тут длинные таймфреймы воспринимаются как анекдот. )
Ребята (и вам, и Денису говорю), вам надо подружиться с логикой.
Без этого в трейдинге и робовладении труба.
ответьте по более существенным пунктам моего комментария.
Их там ДВА, они в первых двух абзацах.
Отвечать будете уже не мне — себе ответьте, если сможете.
Другие уже давно делают деньги на ТА,
а вы смотрите на тех, кто никуя не умеет — это непродуктивно.
В конце концов ваши нейросети — тоже разновидность ТА. Нет?
Ну, раз «в сон клонит», спите дальше. Я думал вы интересней.
зы. да, люди разочаровывают :) что уж поделать.
1. Вытаскиваешь историю ЛЧИ
2. Находишь прибыльных ребят, которые торгуют плюс-минус на одном интервале
3. Используешь массив их сделок для разметки данных.
Сам я так не делал, но можешь попробовать, авось взлетит. Архив ЛЧИ за последние несколько лет могу дать.