Взяли в руки блокнотики?))
Грааль в ML для трейдинга состоит из нескольких компонентов. По сути грааль, это «правильные» ответы на вопросы:
Пожалуй, можно составить ТОП покороче:
IS – in sample (оно же обучающая выборка), OOS — out of sample (оно же тестовая выборка). Ну или ближе к обычным алго – IS – там, где оптимизируешь стратегию, OOS – данные, которые стратегия ещё не видела.
Какое соотношение выборок лучше. Просто сейчас накапливаю некоторые данные (которые иным способом не получить), а любопытство оно же такое, что нельзя просто так взять и подождать 3 месяца и только тогда начать с данными работать, поэтому начал работать с данными чуть когда их было ещё совсем мало, потом продолжил когда их было просто мало, продолжил когда стало чуть побольше и т.д., сейчас уже вполне достаточно.
Из-за того, что несколько раз к данным подступался при разных объёмах этих самых данных, несколько выпятился наружу вопрос достаточности данных в целом и в частности вопрос соотношения IS/OOS в целом.
Когда данных совсем мало – без разницы как делить – не хватит ни чтобы обучить (терминология у меня ML’ная, но, по сути, без разницы, ML или классические алгоритмы) ни чтобы оценить.
Активно использую в алго ML модели. При обучении моделей тоже есть свои фишки и с точки зрения защиты от оверфиттинга и в целом. Поэтому часто обучаю по несколько моделей в одном скрипте. Это и параметры разные и участки данных разные и т.д.
Когда скрипты уже отлажены ты просто их гоняешь, оцениваешь результаты, принимаешь решения. Часто при этом в голове всплывают неотвеченные вопросы, одни помечаешь себе, другие нет. Одними из таких вопросов были: это модель хреновая или OOS неудачный для модели, или в целом неудачный, а есть для него удачная модель, а для удачной модели есть неудачные участки данных тоже? В общем если убрать за скобки ML – классическая тема про переоптимизацию про то, что рынок может благоприятствовать стратегии (а скорее целому классу стратегий), а может нет. Но как с этим у моделей обстоит. В общем до этого момента только фантазировал на эту тему, закрыть вопрос через исследование было не сложно, но как-то руки не доходили, а теперь дошли.
Что делал: условно, взял много данных, единое признаковое пространство, по-всякому нарезал данные таким образом чтобы разные модели обучались на разных участках данных и было так же сопоставимое с кол-вом моделей кол-во OOS участков. Убедился, что OOS в конкретной паре модель-OOS не участвовал в обучении данной модели и погнал тестить разные модели на разных OOS кусках.
Текущее экспериментальное направление рисеча в алго – графические паттерны. Формализовал и алгоритмизировал выявление нескольких паттернов. Они в таком сыром виде работают, но не космос. Чтобы было космосее формализовал и алгоритмизировал выделение фичей (они же параметры, они же метрики, свойства – как хотите) паттерна. Ну т.е. паттерн-то он паттерн, но конкретные матчи (кейсы) они же все разные, а чем они разные? – Вот в частности значениями этих фичей. По сути, я ушел на следующий уровень абстракции (сам паттерн – первый уровень, его характеристики – второй). Ну и чтобы работать со свойствами паттерна было удобней традиционно поверх небольшим слоем размазал ML.
Текущие сложности в этом направлении:
— В моей формализации долго (относительно) ищутся паттерны на окне (зависит от размера окна), поэтому, в частности, насобирать большую выборку для ML долго, а на небольшой, например, много фичей паттерна сразу не оценишь на профпригодность. Для торговли скорости приемлемые если не слишком малые ТФ и не слишком много тикеров одновременно.
Конечно, речь о процессе). Результат подтянется если с процессом все ок. Сейчас о процессе.
Алго-трейдинг что дышло… Будет таким каким ты захочешь чтобы он был. Захотел поиграть в исследователя. Понятно, копаясь в каждой новой стратегии, ты исследуешь, но тут захотелось более по-взрослому и не в разрезе стратегий.
Недавно задавался вопросом, какой таргет для ML выбрать, много интересного написали в комментариях. Собрал тестовый стенд, формализовал таргеты, написал на питоне обработчик (вплоть до интерпретатора) результатов и погнал.
Взял 5 стратегий. Не буду вдаваться в детали своего подхода, для простоты… — взял 5 дата-сетов, или 5 признаковых описаний. Прикрутил некоторое кол-во разных таргетов, разнообразил некоторыми другими различиями (читай, факторами) и все это основательно прогнал. Результаты замерял на OOS.
Ожидание:
1. Будет выраженное влияние используемого таргета на результат стратегии.
2. Возможно, получится заметить какую-то закономерность по поводу зависимости качества модели от используемого таргета в зависимости от типа стратегии/признакового описания.
Расшифрую название:
Речь о том, что некоторые стратегии генерируют сигналы (купить открыть, продать закрыть, купить закрыть, продать открыть), но не все сигналы достаточно хороши и не все достаточно хороши для данного момента. А деньги получает сигнал, который достаточно хорош, который не достаточно хорош – так и остается просто сигналом, не превращается в ордер.
А теперь подробней про зачем это:
У меня сейчас попроще все реализовано, но всегда смотришь в будущее чтоб что-то улучшить. Конкурировать за деньги сигналы могут по-разному – могут совсем глобально – когда есть только сущность сигнала и деньги, и не важно что за стратегии и т.д., лучшие сигналы получают деньги, худшие сосут… лапу. Такой вид конкуренции чуть более революционен и имеет некоторые нюансы, поэтому пока останется за скобками (в частности риск вмешаться в диверсификацию, которая обеспечивается разнообразием стратегий). В данном посте речь о конкуренции за деньги в пределах одной стратегии.