Блог им. Replikant_mih

Какие бывают интересные таргеты для ML моделей применительно к трейдингу, товарищи?

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


О чем речь: если натягивать ML на рынок можно задачу для ML модели/моделей сводить к разным формам. Форма в данном случае — это условно ответы на вопросы — что есть единичный объект данных (например, одна свеча), что есть признаковое описание, что есть цель.


Самые очевидный в лоб target — цена, приращение цены, направление приращения цены, т.е. регрессия, регрессия, бинарная классификация. Уверен, что можно придумать, много других интересных шаблонов, где не свеча объект не приращение таргет и т.д. Немного пофантазировал, но чутка сложно — видимо, усиленной умственной деятельностью в этом направлении уже загнал мозг в колею, выбраться — небанальная задача.

Дай, думаю, погуглю что-нить. Половина статей — прогнозируют цену — это по-моему вообще ни в какие ворота, любой трейдер скажет, что это бред. Рисуют график OOS, где фактическая цена прет вверх, а предикт цены вообще своей жизнью живет и чем дальше горизонт тем он больше своей жизнью живет. 

Ну и дальше приращения или направления в качестве таргетов — никто из ТОПа выдачи гугла не ушел. Очень грустно.

Может кто-то блесканет какой-нить интересной мыслью на этот счет?

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


UPD.: Большое спасибо всем комментаторам! Реально много интересных идей в комментариях, реально многие для меня за пределами моей «коробки», есть над чем поразмыслить. Все-таки правильные вопросы и интересные комментаторы могут давать хороший синергетический эффект :).

★7
73 комментария
Не очень понял, вы на одну свечу прогнозируете вперед?

Можно прогнозировать на несколько. 

Можно делать классификацию, как у Де Прадо — тройной барьер. За время t от текущего момента пробьет ли цена +дельта от текущей цены, -гамма от текущей цены или не пробьет пол и потолок. Мне кажется достаточно удобно, если вы со стоплосами и тейкпрофитами работаете. 

Я прогнозирую плотность распределения.
avatar

Михаил, Хотел вас, кстати, тегнуть в комментариях как одного из немногих кто подтвержденно юзает ML в торговле, но че-то не нашел сходу ник).

Не, у меня таргет — приращение ли, направление ли — это через n свечей, ну там штук 20. С одной свечой как-то не очень вроде работало, видимо шумовая составляющая там большая, а вот если увеличить, то работает.

Спасибо! Пошёл гуглить «соус» и «топоры»)) — ладно, шучу, в смысле действительно спасибо, пошел гуглить Де Прадо, барьеры и т.д.

 

А с плотностью распределения что за тема?! — Сможете чуть расшифровать?

avatar
Replikant_mih, Де Прадо  — глава The Triple-Barrier Method на странице 45. Вроде есть перевод на русский издательства Питер, но не знаю как там с качеством
avatar
Михаил, Да, Triple-Barrier Method выглядит любопытно и небанально. Надо покопать.
avatar
Replikant_mih, про плотность — прогнозируете распределение вероятности. Это не очень работает с обычным ML, но легко делается с помощью сетей. 

Обычно выбирают или какое-то простое распределение, вроде нормального.
Или чего-то простое с толстыми хвостами, вроде Стьюдента. 
Можно разбить приросты цен на бины, ну например с шагом в 1% несколько шагов вниз и вверх и свести к классификации в какой бин попадет цена с какой вероятностью. 
Еще вариант приблизить произвольную плотность, с помощью смеси нормальных распределений. 
Почитать и посмотреть реализацию можно тут:
arxiv.org/abs/1906.05264
ts.gluon.ai/tutorials/index.html
avatar
Михаил, Понял, спасибо! Это уже выглядит посложнее). Да, я так и понял, что тут без нейросетей не обошлось. У меня раньше нейросети проходили под грифом «экспериментальные наработки», поэтому далеко с ними не заходил, щас у меня для боевой торговли любую модель на питоне можно использовать (при условии что предобработки на питоне никакой нет), так что можно и в нейросети попробовать поглубже зарыться — там да, вспоминаю, можно и сложносоставные таргеты и по несколько и т.д.
avatar

Михаил, Раз пошла такая пьянка, а что в качестве объектов используете?

 

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

avatar
Replikant_mih, я ушел от классического ML, где чего-то нужно выдумывать, в сети, где можно/нужно пихать просто котировки. 

Я пихаю прям ряды котировок HLOCV, плюс разные общерыночные данные — ряды некоторых индексов, курсов, описание бумаг (тип, тикер). У меня торговля достаточно долгосрочная — еще пихаю дивиденды. Характеристики момента времени — позиция данных в истории и в году.
avatar
Михаил, Ага, понял. Я ML на Daily+ использую (из-за инфраструктурных ограничений). Т.е. у меня тоже вплоть до «инвестирования» — не ограничиваю себя — что работает — то и торгую).

У меня как раз фишка — признаковое описание. Трейдерские фичи, условно говоря. По сути это обычные классические стратегии с ML логикой поверх, выжимающей доп соки из них и добавляющие некоторые другие интересные возможности.
avatar
Replikant_mih, можете пожалуйста привести пример «трейдерских фичей»?
avatar

EY, ну, тут начинается зона ноу-хау)), вещей, которые не принято раскрывать).

Не трейдерские фичи — это в основном сырые данные — если загнать просто цены или просто приращения, или смещенные приращения — нейросеть продвинутая что-то вероятно найдет, бустинг — нет. А если осмысленные фичи — бустинг найдет.

 

Не палящий граалей пример трейдерской фичи — ну бинарная таймсерия где 1 когда Close текущей свечи > sma, а Close предыдущей — меньше, во всех остальных случаях — 0.

avatar
Replikant_mih, вообще-то и таргет это ноу-хау, тем не менее, вы спрашиваете. Я использовал доходность/просадку на несколько баров вперёд.
avatar

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

Я использовал доходность/просадку на несколько баров вперёд.

 

Хм, типа на каждой свече берем для этой свечи некоторое окно вперед и по нему считаем доходность просадку?.. — Очень расширяющая сознание идея для меня на самом деле. Даже не именно доходность/просадка, а брать таргетом некоторую характеристику-характеристики на окне вперед. Большое спасибо!

avatar
Replikant_mih, возникает вопрос что делать, если просадка нулевая…
avatar
EY, Ну там же на нижних значениях разница имеет значение, на верхних что 20, что 100, что 1000, что без просадки, можно обрезать по какому-то числу, чтоб нормировано всё было. Ну типа если значение больше 10 или просадки нет — это всё 10.
avatar

«Ничего не понял, но очень интересно!» 

Возможно, не в тему.

Если риск в одной сделке 2% от суммы счета и по статистике одна удачная сделка из 10, то надо минимум 20% цель ставить. Очень грубо, но у меня примерно так работает. 

avatar
Максим Иванов, Ну да, вроде немного не про ту цель). Я не помню какой там в русском ML для этого термин используется, в нерусском — target, а «цель» — мой вольный перевод).
avatar
Replikant_mih, функционал качества, целевая функция.
avatar
Kot_Begemot, Ну таргет это True значения, функция — это функция), чуть другое, вроде.
avatar
Replikant_mih, а, тогда… да я уже и сам забыл, не важно ... 
avatar
Плотность вероятности и можно без ML.
Вообще все начинается с того, чтобы построить бенчмарк.

avatar
Kot_Begemot, А можно чуть расшифровать, сложно размотать из такой общей информации. Плотность вероятности чего? — Того что вырастет через 10 свечей? Или чего? И как это без ML в качестве таргета использовать? А бенчмарк — тут что к чему?
avatar
Replikant_mih, через 10 или через 100… это уже ближе к задаче оптимизации и проверки робастности, для начала нужно просто разметить данные, а любая разметка уже «бенчмарк» — типа тут стою таким лотом сюда, тут — другим и туда. Вот и все. 

Дальше к этой разметке вы и подгоняете решение сети. Можно учить и на стат. параметрах распределений, типа завтра будет распределение F(a,b,c,d,e) — смысл от этого сильно не изменится.

Посмотрите этот пост, он про «идеальную» разметку - 
smart-lab.ru/blog/726260.php

avatar
Kot_Begemot, Ага, спасибо, поизучаю, пока из колее не понятно, что там чего), буду смотреть.
avatar
Я тарнетрм ставил true/false на перелом тренда, гонял бжктесты трендовый стратегий они просты и неплохо работают, но имеют много ложных сигналов и ML позволяет значительно улучшить эту стратегию. Сейчас ещё добавляю прогноз на следующий квартал, что бы ML вилела глобальный тренд.

Константин Лебедев, Кажется, что-то интересное, но не все понимаю (а может даже — мало чего понимаю).

 

True/False на перелом тренда — типа строим пики-впадины, смотрим чтоб был падающий тренд, допустим и прогнозируем что в ближайшие n свечей будет перелом?

Сейчас ещё добавляю прогноз на следующий квартал, что бы ML вилела глобальный тренд.


Это типа отдельная модель прогнозирует с большим горизонтом и потом это, условно, как фильтр для входов с меньшим горизонтом использовать?

avatar
построй тенденцию и возьми POC каждой ноги
avatar
alexmiramax, Такс, пока не понятно. РОС — это кто? - Rate of Change — ROC? — Или что-то другое. Тенденция это что? И как построить? — Ну для начала хотя бы понять, что это).
avatar
Что тебя интересует, то и ставь таргетом ) при этом очевидно, что получить полезную модель с хоть какой-нибудь предсказательной способностью проще для более простых таргетов. То есть бинарный классификатор вверх-вниз у тебя получится скорее чем какая-то регрессия, если вообще хоть что-то получится.
Пафос Респектыч, 
Что тебя интересует, то и ставь таргетом

 

Логично, чё уж. Я в целом по этому сценарию и работаю обычно).

 

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

 

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

avatar

Replikant_mih, ну критерий простоты таргета — это количество информации в нём, самый минимум который есть — один бит, нолик или единичка. Соответственно все таргеты — нолики или единички, модель выдаёт вероятность единички для какого-то вектора фич.

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

Пафос Респектыч, Ну вот, не на глаз, я поэтому и хочу понять, какие ещё бывают фичи, чтобы все их или какие-то из них оценить на предмет как работают, как работают в тех или иных контекстах и т.д.
avatar
Replikant_mih, фичей может быть всё, что ты знаешь как потом торговать. Начни с «продавать» или «покупать», бинарная фича )
Ты вот этих вот ребят видел? https://numer.ai/
На их датасете и материалах можно хорошо потренироваться в плане теории, там и коммьюнити есть, но там вроде по-английски всё.
Пафос Респектыч, Ы, крутая идея у сервиса. Спсб. Я вот не хотел особо в теории углубляться опять — много я теоретизировал, щас стараюс далеко от прикладного аспекта не отдаляться.
avatar
Replikant_mih, ну если ты точно не понимаешь что ты делаешь, то это не прикладной аспект а детское дрочево )
Пафос Респектыч, Че это я точно не понимаю, что делаю?)) Я все понимаю, просто решил, что можно что-то улучшить, расширяю горизонты.
avatar
Replikant_mih, мы сам написал что не понимаешь что есть критерий простоты таргета и как оценить предсказательную способность модели. Очень вероятно, что ты совершенно не понимаешь что ты делаешь, просто переливаешь из пустого в порожнее, но думаешь что понимаешь конечно ))
Пафос Респектыч, Так это ж ты ввел понятие простоты таргета)), с практической точки зрения оно не имеет никакого смысла. А оценить предсказательную способность не умею — я сказал про «не глаз» — имея в виду, что я не люблю разбрасываться такими оценками типа простой сложный на глаз так же как, например, не умею на глаз оценивать качество модели до тестов, что логично.
avatar
Replikant_mih, ну как же не имеет, с практической точки зрения, если ты не освоил что-то более простое, то смысла браться за что-то более сложное нет, точно не получится. Даже в бинарных классификаторах, чтобы они заработали на рынке, там столько ньюансов, что нужно разбираться очень внимательно. Всё ж нестационарное такое, это вам не лица распознавать )
Пафос Респектыч, да бинарный классификатор у меня нормально работает, ищу поинтересней варианты.
avatar
Replikant_mih, если бы как ты говоришь он у тебя нормально работал, то ты бы радостно прикручивал роботов на всё новые рынки, а не искал «варианты поинтереснее» )
Пафос Респектыч, Не вижу противоречий. У меня есть некоторое количество стратегий-моделей, если я найду более мощный подход, я смогу улучшить даже не одну, а каждую из них. 
avatar
1. Я чаще всего использую минутные данные в виде дата-время, закрытие, смещение.
Смещение отвечает за учет дивидендов и склейку фьючерсов. 
Гораздо реже стандартные свечи-дневки, но тоже со смещением.
2. Целевая функция для меня — отношение доходности к риску. Мне удобно брать среднегодовую доху и относить её к среднеквадратичной оценке  дроудауна. Обе меры, как видите, интегральные. 
3. Решаю не задачу классификации, а задачу оптимизации. Причем полуручными методами. Возни больше, зато видно, что тут творится. Черные ящики не люблю. Тем более, что задача оптимизации не только найти «оптимальное» решение, а вообще понять, где находится область допустимых решений и от чего она зависит.   
avatar
SergeyJu, а что такое «среднеквадратичная оценка дроудауна»?
avatar
Михаил, ДД есть разница между ранее достигнутым максимумом и текущим значением оценки портфеля. Если возвести в квадрат, просуммировать по времени, разделить на число слагаемых и извлечь корень, то самое и выйдет. 
Есть примерно такая штука под названием индекс язвы. 
en.wikipedia.org/wiki/Ulcer_index

avatar
SergeyJu, а зачем смещение рассматривать отдельно? Можно в день склейки посчитать средневзвешенную разницу цен старого/нового фьюча и добавить к ценам назад в прошлое. Получится непрерывный ряд, на котором можно игнорировать экспирации, без большого урона для точности.
avatar
Кирилл Гудков, так Вы обязательно исказите или цены или относительные приращения цен. И ничего н выиграете в расчетах. 
avatar
SergeyJu, цены мне сами по себе не интересны, интересен equity прогона алгоритма по этим ценам. Такое преобразование цен позволяет убрать из алгоритма явную обработку экспираций. Ну и самое полезное: можно иметь валидные скользящие любого периода уже на следующий день после роллирования. В бэктестах, ну и в роботе, если ему подсовывать «исправленную» историю (привет Оруэллу :)

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

avatar

Спасибо.

1. Понял. Я так понимаю, это нейросети? — Бустинговые модели в таком признаковом описании мало чего найдут скорее всего.

2. Все-таки я немного плаваю — или забыл или не знал). Как я могу этим управлять? Вот если я привожу к бинарной классификации вверх/вниз, то модель, обучаясь, затачивается на winrate (если переходить к трейдерским метрикам). Если я сделаю регрессию для приращений — то будет затачиваться на максимизацию среднего трейда. Т.е. в данном случае я не могу явно целевую метрику передать, а она как бы косвенно проходит. А как явным образом оптимизировать такие штуки как «отношение доходности к риску» и т.д.?


3. А можно какой-то на пальцах пример такой задачи? Типа такой таргет, такая модель, такие объекты в выборке. Можно «замазать детали» — просто не понимаю, о чем речь, вернее, чуть понимаю о чем речь и полностью не понимаю, как такое на практике реализуется)).

avatar
Replikant_mih, оптимизировать можно как угодно, хоть монтекарлой.
Предположим Вы каким-то способом получили триарную классификацию, типа покупать, продавать, ничего не делать. Оно автоматически порождает торговую систему. Ну и считайте себе доху и риск, как угодно. 
А вот триарная классификация должна быть функцией чего-то, что мы перебираем, например, двух порогов. 
Получили с помощью своей сети вероятности вверх вниз, ну и ставьте  пороги. 
avatar
SergeyJu, А, типа обучаем модель на классификации, а дальше по обученной модели, условно через разные варианты интерпретации предикта, например, через пороги, находим оптимальный для нас вариант по нужной метрике?

Кстати, тут подгонкой попахивает сразу)). 
avatar
Replikant_mih, а что не подгонка? 
Можно проще. Не обязательно брать классификатор, возьмите парочку известных индикаторов. Ничего не изменится.
avatar
SergeyJu, Ну так-то да, ML не грааль, в том числе в вопросе защиты от переподгонки. Ну просто варианты «выбрать лучшее что-то» — это почти всегда подгонка. Надо умнее). Но идею в целом понял, спасибо.
avatar
Описывал раньше другими словами то, что делал в 2018 без ML. Сейчас изучаю инструментарий, после построения модели те результаты улучшатся несомненно.
Делалось традиционное. Классификация. Изменение цены за день. Три класса: изменение выше порога, ниже минус порога и между ними.
В качестве признаков брались несколько параметров по ценам, по времени, по объёмам внутри предыдущих двух дней.
Статистика получилась значимой. Существуют интервалы параметров, при попадании в которые, вероятности крайних классов были 0,6-0,65.
avatar

svgr, да, тоже пробовал раньше разбивать на 3 — рыба, мясо, ни рыба ни мясо). Вроде особо от этого смысла не увидел, можно снова попробовать.

 

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

 

>> «Существуют интервалы параметров, при попадании в которые, вероятности крайних классов были 0,6-0,65.»

Имеются в виду какие параметры? — Гиперпараметры модели?

avatar
Replikant_mih, параметров (признаков) внутри дня было несколько десятков. Хитрые в том числе. Например, форма графика за 6 тактов — свечи за два дня по 4 часа (6 штук). Параметры выбирались по идее сильного влияния на изменение ближайшей будущей цены. Ретроспективно.
Гиперпараметры не при чём. Всё делалось вручную, без взаимовлияний параметров.
У каждого параметра находился (существовал) интервал, в котором будущее изменение цены было в классе 1, второй интервал — в классе 3, остальные куски прямой давали класс 2.
Случалось в %30 пар дней, что от 2 до 5 таких параметров одновременно указывали на класс 1 для третьего дня. Показания остальных параметров, указывавших на класс 2, игнорировались. То есть суть — выкинуть середину и сигналы, на неё указывающие.
avatar
svgr, А, это описание не ML варианта?
avatar
Replikant_mih, на суть это влияет? Чувствую, она не понимается.
Тут руками исследованы 30 признаков независимо от остальных.
При создании сети добавятся взаимные связи между признаками и отыщутся нетривиальные комбинации состояний признаков, приводящие к желаемому результату, которые вручную искать очень трудозатратно.
avatar
svgr, Понял. Про суть — ну я пытаюсь понять, о чем речь, я пытаюсь въехать предполагая, что речь о ML, а у меня не сходится ничего)). Так-то как от не ML перейти к ML понятно. Кстати это не банальное понимание — для многих ML в трейдинге это какой-то отдельный мир, а не ML — отдельный, хотя если человек понимает обе сферы, тот тут все должно быть вполне очевидно — те всё то же, только в профиль).
avatar
svgr, Это, кстати, очень близко к тому, что я делал до добавления ML слоя и, к слову, так делает по-моему мало кто. Обычно алго-трейдеры как огня боятся параметров (потому что не умеют их готовить).
avatar
Replikant_mih, схема для одного параметра (признака):
На третий день выросла цена более чем на один процент. Отмечаем на оси признака значение его за первый-второй день, к тому приведшее.
Смотрим такие значения за длительную более-менее историю. Отмечаем интервал значений признака, в котором содержится 80% таких отметок. При хорошей идее признака и кучность хорошая. Называем его интервал «лонг». Аналогично для изменения цены третьего дня на минус 1% и более получаем интервал «шорт». Интервалы не пересекаются. Остальные части прямой значений признака не рассматриваем.
Когда за какие-то два дня встречаем значение признака в одном из интервалов, записываем балл для прогноза третьего дня в плюс или в минус.
Набираем ещё осмысленных признаков, кажущихся не сильно зависящими от первого. По ним так же получаем или не получаем баллы для прогноза. Можно до 60% дней сделать имеющими какие-то баллы. Остальные будут нулевыми.
Вот когда в прогнозе имеем, например, 4 за лонг, 1 за шорт, то и растёт на третий день в 0,6 случаев. Правда часто менее 1%. Что и так неплохо.
avatar
svgr, Идею понял, спасибо. С одной стороны я делал что-то похожее, но совсем с другой стороны заходил).
avatar
UN_Alex, У нас разграничение жесткое по доступам, модели не имеют доступов к сенситивной информации, только я).
avatar
Вполне общий подход, это зафиксировать стратегию выхода и для каждой точки графика просчитать какая будет прибыль в сделке, если купить/продать в этой точке и ждать выхода. Эту величину и предсказывать.
avatar
ivanovr, например в конце недели, или перед датой экспирации кста
ivanovr, Уже прям неудобно — каждого комментатора прошу расшифровать, что он имеет в виду). Можете пож. развернуть как-то или на примере показать?
avatar
Replikant_mih, 

Развертываю. Первый раз бесплатно.
Выбираем стратегию выхода. Например это SL + выход по таймауту. Тогда для каждой точки исходного графика можно заранее вычислить какова будет прибыль от сделки если на этой точке купить/продать. Вот эту величину и предсказываем.
Когда получили обученную модель, то очевидна стратегия, что если предсказывается хорошая прибыль от покупки, то покупаем и наоборот. Порог «хорошести» подбираем.

avatar
ivanovr, А все, допетрил, спасибо!
avatar
ivanovr, Я кстати так и делаю, просто по описанию не понял, что это оно и есть. И я сам умозрительно решил, что чем сложнее логика выхода, тем зашумленней таргет будет для модели, поэтому пришел к частному случаю от этой логики — закрываться через n свечей. Но сейчас решил дать шанс и более сложным логикам выхода из позиции.
avatar

теги блога Replikant_mih

....все тэги



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