Есть у меня подозрения, что ничего мне тут не напишете), но вдруг где-нибудь в комментариях засияет лампочка интересной идеи.
О чем речь: если натягивать ML на рынок можно задачу для ML модели/моделей сводить к разным формам. Форма в данном случае — это условно ответы на вопросы — что есть единичный объект данных (например, одна свеча), что есть признаковое описание, что есть цель.
Самые очевидный в лоб target — цена, приращение цены, направление приращения цены, т.е. регрессия, регрессия, бинарная классификация. Уверен, что можно придумать, много других интересных шаблонов, где не свеча объект не приращение таргет и т.д. Немного пофантазировал, но чутка сложно — видимо, усиленной умственной деятельностью в этом направлении уже загнал мозг в колею, выбраться — небанальная задача.
Дай, думаю, погуглю что-нить. Половина статей — прогнозируют цену — это по-моему вообще ни в какие ворота, любой трейдер скажет, что это бред. Рисуют график OOS, где фактическая цена прет вверх, а предикт цены вообще своей жизнью живет и чем дальше горизонт тем он больше своей жизнью живет.
Ну и дальше приращения или направления в качестве таргетов — никто из ТОПа выдачи гугла не ушел. Очень грустно.
Может кто-то блесканет какой-нить интересной мыслью на этот счет?
Сам я сейчас танцую от свечей, таргет лучше заходит бинарная классификация направления, регрессия по приращениям работает весьма странно (возможно, я не умею её готовить). В общем добро пожаловать в комментарии — буду рад любой обратной связи, не обязательно разводить костер, можно чутка угольков подкинуть — сам раздую.
UPD.: Большое спасибо всем комментаторам! Реально много интересных идей в комментариях, реально многие для меня за пределами моей «коробки», есть над чем поразмыслить. Все-таки правильные вопросы и интересные комментаторы могут давать хороший синергетический эффект :).
Можно прогнозировать на несколько.
Можно делать классификацию, как у Де Прадо — тройной барьер. За время t от текущего момента пробьет ли цена +дельта от текущей цены, -гамма от текущей цены или не пробьет пол и потолок. Мне кажется достаточно удобно, если вы со стоплосами и тейкпрофитами работаете.
Я прогнозирую плотность распределения.
Михаил, Хотел вас, кстати, тегнуть в комментариях как одного из немногих кто подтвержденно юзает ML в торговле, но че-то не нашел сходу ник).
Не, у меня таргет — приращение ли, направление ли — это через n свечей, ну там штук 20. С одной свечой как-то не очень вроде работало, видимо шумовая составляющая там большая, а вот если увеличить, то работает.
Спасибо! Пошёл гуглить «соус» и «топоры»)) — ладно, шучу, в смысле действительно спасибо, пошел гуглить Де Прадо, барьеры и т.д.
А с плотностью распределения что за тема?! — Сможете чуть расшифровать?
Обычно выбирают или какое-то простое распределение, вроде нормального.
Или чего-то простое с толстыми хвостами, вроде Стьюдента.
Можно разбить приросты цен на бины, ну например с шагом в 1% несколько шагов вниз и вверх и свести к классификации в какой бин попадет цена с какой вероятностью.
Еще вариант приблизить произвольную плотность, с помощью смеси нормальных распределений.
Почитать и посмотреть реализацию можно тут:
arxiv.org/abs/1906.05264
ts.gluon.ai/tutorials/index.html
Михаил, Раз пошла такая пьянка, а что в качестве объектов используете?
Свечи? Какие-то характеристики со свечи + смещенные? Хотя тут, конечно условно, можно использовать для источника информации какие-то абстракции над свечами, ну те же фундаментальные данные и потом натягивать характеристики на свечи.
Я пихаю прям ряды котировок HLOCV, плюс разные общерыночные данные — ряды некоторых индексов, курсов, описание бумаг (тип, тикер). У меня торговля достаточно долгосрочная — еще пихаю дивиденды. Характеристики момента времени — позиция данных в истории и в году.
У меня как раз фишка — признаковое описание. Трейдерские фичи, условно говоря. По сути это обычные классические стратегии с ML логикой поверх, выжимающей доп соки из них и добавляющие некоторые другие интересные возможности.
EY, ну, тут начинается зона ноу-хау)), вещей, которые не принято раскрывать).
Не трейдерские фичи — это в основном сырые данные — если загнать просто цены или просто приращения, или смещенные приращения — нейросеть продвинутая что-то вероятно найдет, бустинг — нет. А если осмысленные фичи — бустинг найдет.
Не палящий граалей пример трейдерской фичи — ну бинарная таймсерия где 1 когда Close текущей свечи > sma, а Close предыдущей — меньше, во всех остальных случаях — 0.
EY, Ну типа того, ну я ж и не под дулом пистолета заставляю. Тоже немного свой опыт попутно раскрываю, без нюансов. Комментаторы тоже делятся, понятно, что разжевывать никто не торопится, детали детальные выкладывать — тоже и т.д. Всё разумно.
Хм, типа на каждой свече берем для этой свечи некоторое окно вперед и по нему считаем доходность просадку?.. — Очень расширяющая сознание идея для меня на самом деле. Даже не именно доходность/просадка, а брать таргетом некоторую характеристику-характеристики на окне вперед. Большое спасибо!
«Ничего не понял, но очень интересно!»
Возможно, не в тему.
Если риск в одной сделке 2% от суммы счета и по статистике одна удачная сделка из 10, то надо минимум 20% цель ставить. Очень грубо, но у меня примерно так работает.
Вообще все начинается с того, чтобы построить бенчмарк.
Дальше к этой разметке вы и подгоняете решение сети. Можно учить и на стат. параметрах распределений, типа завтра будет распределение F(a,b,c,d,e) — смысл от этого сильно не изменится.
Посмотрите этот пост, он про «идеальную» разметку -
smart-lab.ru/blog/726260.php
Константин Лебедев, Кажется, что-то интересное, но не все понимаю (а может даже — мало чего понимаю).
True/False на перелом тренда — типа строим пики-впадины, смотрим чтоб был падающий тренд, допустим и прогнозируем что в ближайшие n свечей будет перелом?
Это типа отдельная модель прогнозирует с большим горизонтом и потом это, условно, как фильтр для входов с меньшим горизонтом использовать?
Логично, чё уж. Я в целом по этому сценарию и работаю обычно).
Я вот даже не могу определить что есть критерий простоты таргета), не говоря уже об оценке на глаз предсказательной способности. Эксперимент наш друг, вот и хотел какие-то новые таргеты сгенерить чтоб поэкспериментировать.
Replikant_mih, ну критерий простоты таргета — это количество информации в нём, самый минимум который есть — один бит, нолик или единичка. Соответственно все таргеты — нолики или единички, модель выдаёт вероятность единички для какого-то вектора фич.
Предсказательную способность надо оценивать не на глаз, а количественно: считаешь ошибку (это тоже случайная величина с известным более-менее распределением), смотришь насколько твоя модель хорошо или плохо предсказывает то что ей показывают, чего она ещё не видела. Ну это же всё как бы самые основы.
На их датасете и материалах можно хорошо потренироваться в плане теории, там и коммьюнити есть, но там вроде по-английски всё.
Смещение отвечает за учет дивидендов и склейку фьючерсов.
Гораздо реже стандартные свечи-дневки, но тоже со смещением.
2. Целевая функция для меня — отношение доходности к риску. Мне удобно брать среднегодовую доху и относить её к среднеквадратичной оценке дроудауна. Обе меры, как видите, интегральные.
3. Решаю не задачу классификации, а задачу оптимизации. Причем полуручными методами. Возни больше, зато видно, что тут творится. Черные ящики не люблю. Тем более, что задача оптимизации не только найти «оптимальное» решение, а вообще понять, где находится область допустимых решений и от чего она зависит.
Есть примерно такая штука под названием индекс язвы.
en.wikipedia.org/wiki/Ulcer_index
Ну а приращения будут соответствовать случаю роллирования одним днем, что довольно близко к реальным торгам.
Спасибо.
1. Понял. Я так понимаю, это нейросети? — Бустинговые модели в таком признаковом описании мало чего найдут скорее всего.
2. Все-таки я немного плаваю — или забыл или не знал). Как я могу этим управлять? Вот если я привожу к бинарной классификации вверх/вниз, то модель, обучаясь, затачивается на winrate (если переходить к трейдерским метрикам). Если я сделаю регрессию для приращений — то будет затачиваться на максимизацию среднего трейда. Т.е. в данном случае я не могу явно целевую метрику передать, а она как бы косвенно проходит. А как явным образом оптимизировать такие штуки как «отношение доходности к риску» и т.д.?
3. А можно какой-то на пальцах пример такой задачи? Типа такой таргет, такая модель, такие объекты в выборке. Можно «замазать детали» — просто не понимаю, о чем речь, вернее, чуть понимаю о чем речь и полностью не понимаю, как такое на практике реализуется)).
Предположим Вы каким-то способом получили триарную классификацию, типа покупать, продавать, ничего не делать. Оно автоматически порождает торговую систему. Ну и считайте себе доху и риск, как угодно.
А вот триарная классификация должна быть функцией чего-то, что мы перебираем, например, двух порогов.
Получили с помощью своей сети вероятности вверх вниз, ну и ставьте пороги.
Кстати, тут подгонкой попахивает сразу)).
Можно проще. Не обязательно брать классификатор, возьмите парочку известных индикаторов. Ничего не изменится.
Делалось традиционное. Классификация. Изменение цены за день. Три класса: изменение выше порога, ниже минус порога и между ними.
В качестве признаков брались несколько параметров по ценам, по времени, по объёмам внутри предыдущих двух дней.
Статистика получилась значимой. Существуют интервалы параметров, при попадании в которые, вероятности крайних классов были 0,6-0,65.
svgr, да, тоже пробовал раньше разбивать на 3 — рыба, мясо, ни рыба ни мясо). Вроде особо от этого смысла не увидел, можно снова попробовать.
По признакам — получается, данные брались из внутридня, но сворачивались в дни — т.е. характеристики дней, в т.ч. смещенные.
>> «Существуют интервалы параметров, при попадании в которые, вероятности крайних классов были 0,6-0,65.»
Имеются в виду какие параметры? — Гиперпараметры модели?
Гиперпараметры не при чём. Всё делалось вручную, без взаимовлияний параметров.
У каждого параметра находился (существовал) интервал, в котором будущее изменение цены было в классе 1, второй интервал — в классе 3, остальные куски прямой давали класс 2.
Случалось в %30 пар дней, что от 2 до 5 таких параметров одновременно указывали на класс 1 для третьего дня. Показания остальных параметров, указывавших на класс 2, игнорировались. То есть суть — выкинуть середину и сигналы, на неё указывающие.
Тут руками исследованы 30 признаков независимо от остальных.
При создании сети добавятся взаимные связи между признаками и отыщутся нетривиальные комбинации состояний признаков, приводящие к желаемому результату, которые вручную искать очень трудозатратно.
На третий день выросла цена более чем на один процент. Отмечаем на оси признака значение его за первый-второй день, к тому приведшее.
Смотрим такие значения за длительную более-менее историю. Отмечаем интервал значений признака, в котором содержится 80% таких отметок. При хорошей идее признака и кучность хорошая. Называем его интервал «лонг». Аналогично для изменения цены третьего дня на минус 1% и более получаем интервал «шорт». Интервалы не пересекаются. Остальные части прямой значений признака не рассматриваем.
Когда за какие-то два дня встречаем значение признака в одном из интервалов, записываем балл для прогноза третьего дня в плюс или в минус.
Набираем ещё осмысленных признаков, кажущихся не сильно зависящими от первого. По ним так же получаем или не получаем баллы для прогноза. Можно до 60% дней сделать имеющими какие-то баллы. Остальные будут нулевыми.
Вот когда в прогнозе имеем, например, 4 за лонг, 1 за шорт, то и растёт на третий день в 0,6 случаев. Правда часто менее 1%. Что и так неплохо.
Развертываю. Первый раз бесплатно.
Выбираем стратегию выхода. Например это SL + выход по таймауту. Тогда для каждой точки исходного графика можно заранее вычислить какова будет прибыль от сделки если на этой точке купить/продать. Вот эту величину и предсказываем.
Когда получили обученную модель, то очевидна стратегия, что если предсказывается хорошая прибыль от покупки, то покупаем и наоборот. Порог «хорошести» подбираем.