Replikant_mih
Replikant_mih личный блог
25 октября 2021, 20:14

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

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


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


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

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

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

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

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


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

73 Комментария
  • Михаил
    25 октября 2021, 20:33
    Не очень понял, вы на одну свечу прогнозируете вперед?

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

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

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

        Обычно выбирают или какое-то простое распределение, вроде нормального.
        Или чего-то простое с толстыми хвостами, вроде Стьюдента. 
        Можно разбить приросты цен на бины, ну например с шагом в 1% несколько шагов вниз и вверх и свести к классификации в какой бин попадет цена с какой вероятностью. 
        Еще вариант приблизить произвольную плотность, с помощью смеси нормальных распределений. 
        Почитать и посмотреть реализацию можно тут:
        arxiv.org/abs/1906.05264
        ts.gluon.ai/tutorials/index.html
          • Михаил
            25 октября 2021, 21:09
            Replikant_mih, я ушел от классического ML, где чего-то нужно выдумывать, в сети, где можно/нужно пихать просто котировки. 

            Я пихаю прям ряды котировок HLOCV, плюс разные общерыночные данные — ряды некоторых индексов, курсов, описание бумаг (тип, тикер). У меня торговля достаточно долгосрочная — еще пихаю дивиденды. Характеристики момента времени — позиция данных в истории и в году.
              • EY
                26 октября 2021, 19:37
                Replikant_mih, можете пожалуйста привести пример «трейдерских фичей»?
                  • EY
                    27 октября 2021, 11:13
                    Replikant_mih, вообще-то и таргет это ноу-хау, тем не менее, вы спрашиваете. Я использовал доходность/просадку на несколько баров вперёд.
                      • EY
                        27 октября 2021, 14:41
                        Replikant_mih, возникает вопрос что делать, если просадка нулевая…
  • Bearminator
    25 октября 2021, 20:40

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

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

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

      • Kot_Begemot
        25 октября 2021, 21:48
        Replikant_mih, функционал качества, целевая функция.
          • Kot_Begemot
            25 октября 2021, 22:01
            Replikant_mih, а, тогда… да я уже и сам забыл, не важно ... 
  • Kot_Begemot
    25 октября 2021, 21:46
    Плотность вероятности и можно без ML.
    Вообще все начинается с того, чтобы построить бенчмарк.

      • Kot_Begemot
        25 октября 2021, 22:00
        Replikant_mih, через 10 или через 100… это уже ближе к задаче оптимизации и проверки робастности, для начала нужно просто разметить данные, а любая разметка уже «бенчмарк» — типа тут стою таким лотом сюда, тут — другим и туда. Вот и все. 

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

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

  • Константин Лебедев
    25 октября 2021, 23:18
    Я тарнетрм ставил true/false на перелом тренда, гонял бжктесты трендовый стратегий они просты и неплохо работают, но имеют много ложных сигналов и ML позволяет значительно улучшить эту стратегию. Сейчас ещё добавляю прогноз на следующий квартал, что бы ML вилела глобальный тренд.
  • alexmiramax
    25 октября 2021, 23:49
    построй тенденцию и возьми POC каждой ноги
  • Пафос Респектыч
    25 октября 2021, 23:59
    Что тебя интересует, то и ставь таргетом ) при этом очевидно, что получить полезную модель с хоть какой-нибудь предсказательной способностью проще для более простых таргетов. То есть бинарный классификатор вверх-вниз у тебя получится скорее чем какая-то регрессия, если вообще хоть что-то получится.
      • Пафос Респектыч
        26 октября 2021, 00:57

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

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

          • Пафос Респектыч
            26 октября 2021, 01:24
            Replikant_mih, фичей может быть всё, что ты знаешь как потом торговать. Начни с «продавать» или «покупать», бинарная фича )
  • Пафос Респектыч
    26 октября 2021, 01:03
    Ты вот этих вот ребят видел? https://numer.ai/
    На их датасете и материалах можно хорошо потренироваться в плане теории, там и коммьюнити есть, но там вроде по-английски всё.
      • Пафос Респектыч
        26 октября 2021, 01:09
        Replikant_mih, ну если ты точно не понимаешь что ты делаешь, то это не прикладной аспект а детское дрочево )
          • Пафос Респектыч
            26 октября 2021, 01:21
            Replikant_mih, мы сам написал что не понимаешь что есть критерий простоты таргета и как оценить предсказательную способность модели. Очень вероятно, что ты совершенно не понимаешь что ты делаешь, просто переливаешь из пустого в порожнее, но думаешь что понимаешь конечно ))
              • Пафос Респектыч
                26 октября 2021, 01:30
                Replikant_mih, ну как же не имеет, с практической точки зрения, если ты не освоил что-то более простое, то смысла браться за что-то более сложное нет, точно не получится. Даже в бинарных классификаторах, чтобы они заработали на рынке, там столько ньюансов, что нужно разбираться очень внимательно. Всё ж нестационарное такое, это вам не лица распознавать )
                  • Пафос Респектыч
                    26 октября 2021, 12:00
                    Replikant_mih, если бы как ты говоришь он у тебя нормально работал, то ты бы радостно прикручивал роботов на всё новые рынки, а не искал «варианты поинтереснее» )
  • SergeyJu
    26 октября 2021, 10:39
    1. Я чаще всего использую минутные данные в виде дата-время, закрытие, смещение.
    Смещение отвечает за учет дивидендов и склейку фьючерсов. 
    Гораздо реже стандартные свечи-дневки, но тоже со смещением.
    2. Целевая функция для меня — отношение доходности к риску. Мне удобно брать среднегодовую доху и относить её к среднеквадратичной оценке  дроудауна. Обе меры, как видите, интегральные. 
    3. Решаю не задачу классификации, а задачу оптимизации. Причем полуручными методами. Возни больше, зато видно, что тут творится. Черные ящики не люблю. Тем более, что задача оптимизации не только найти «оптимальное» решение, а вообще понять, где находится область допустимых решений и от чего она зависит.   
    • Михаил
      26 октября 2021, 13:31
      SergeyJu, а что такое «среднеквадратичная оценка дроудауна»?
      • SergeyJu
        26 октября 2021, 16:43
        Михаил, ДД есть разница между ранее достигнутым максимумом и текущим значением оценки портфеля. Если возвести в квадрат, просуммировать по времени, разделить на число слагаемых и извлечь корень, то самое и выйдет. 
        Есть примерно такая штука под названием индекс язвы. 
        en.wikipedia.org/wiki/Ulcer_index

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

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

    • SergeyJu
      26 октября 2021, 13:06
      Replikant_mih, оптимизировать можно как угодно, хоть монтекарлой.
      Предположим Вы каким-то способом получили триарную классификацию, типа покупать, продавать, ничего не делать. Оно автоматически порождает торговую систему. Ну и считайте себе доху и риск, как угодно. 
      А вот триарная классификация должна быть функцией чего-то, что мы перебираем, например, двух порогов. 
      Получили с помощью своей сети вероятности вверх вниз, ну и ставьте  пороги. 
        • SergeyJu
          26 октября 2021, 16:45
          Replikant_mih, а что не подгонка? 
          Можно проще. Не обязательно брать классификатор, возьмите парочку известных индикаторов. Ничего не изменится.
  • svgr
    26 октября 2021, 11:00
    Описывал раньше другими словами то, что делал в 2018 без ML. Сейчас изучаю инструментарий, после построения модели те результаты улучшатся несомненно.
    Делалось традиционное. Классификация. Изменение цены за день. Три класса: изменение выше порога, ниже минус порога и между ними.
    В качестве признаков брались несколько параметров по ценам, по времени, по объёмам внутри предыдущих двух дней.
    Статистика получилась значимой. Существуют интервалы параметров, при попадании в которые, вероятности крайних классов были 0,6-0,65.
      • svgr
        26 октября 2021, 13:23
        Replikant_mih, параметров (признаков) внутри дня было несколько десятков. Хитрые в том числе. Например, форма графика за 6 тактов — свечи за два дня по 4 часа (6 штук). Параметры выбирались по идее сильного влияния на изменение ближайшей будущей цены. Ретроспективно.
        Гиперпараметры не при чём. Всё делалось вручную, без взаимовлияний параметров.
        У каждого параметра находился (существовал) интервал, в котором будущее изменение цены было в классе 1, второй интервал — в классе 3, остальные куски прямой давали класс 2.
        Случалось в %30 пар дней, что от 2 до 5 таких параметров одновременно указывали на класс 1 для третьего дня. Показания остальных параметров, указывавших на класс 2, игнорировались. То есть суть — выкинуть середину и сигналы, на неё указывающие.
          • svgr
            26 октября 2021, 15:17
            Replikant_mih, на суть это влияет? Чувствую, она не понимается.
            Тут руками исследованы 30 признаков независимо от остальных.
            При создании сети добавятся взаимные связи между признаками и отыщутся нетривиальные комбинации состояний признаков, приводящие к желаемому результату, которые вручную искать очень трудозатратно.
              • svgr
                26 октября 2021, 16:11
                Replikant_mih, схема для одного параметра (признака):
                На третий день выросла цена более чем на один процент. Отмечаем на оси признака значение его за первый-второй день, к тому приведшее.
                Смотрим такие значения за длительную более-менее историю. Отмечаем интервал значений признака, в котором содержится 80% таких отметок. При хорошей идее признака и кучность хорошая. Называем его интервал «лонг». Аналогично для изменения цены третьего дня на минус 1% и более получаем интервал «шорт». Интервалы не пересекаются. Остальные части прямой значений признака не рассматриваем.
                Когда за какие-то два дня встречаем значение признака в одном из интервалов, записываем балл для прогноза третьего дня в плюс или в минус.
                Набираем ещё осмысленных признаков, кажущихся не сильно зависящими от первого. По ним так же получаем или не получаем баллы для прогноза. Можно до 60% дней сделать имеющими какие-то баллы. Остальные будут нулевыми.
                Вот когда в прогнозе имеем, например, 4 за лонг, 1 за шорт, то и растёт на третий день в 0,6 случаев. Правда часто менее 1%. Что и так неплохо.
  • Roman Ivanov
    26 октября 2021, 22:21
    Вполне общий подход, это зафиксировать стратегию выхода и для каждой точки графика просчитать какая будет прибыль в сделке, если купить/продать в этой точке и ждать выхода. Эту величину и предсказывать.
    • Пафос Респектыч
      26 октября 2021, 23:39
      ivanovr, например в конце недели, или перед датой экспирации кста
      • Roman Ivanov
        27 октября 2021, 20:46
        Replikant_mih, 

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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн