bascomo
bascomo личный блог
02 ноября 2023, 15:12

Отбор систем для торговли - final call

Когда я в первый раз получил сотни и тысячи стратегий, которые работали на IS/OOS, главным вопросом для меня стал следующий:
  • как из них изо всех отобрать те, которые с высокой вероятностью будут работать и дальше?
В первый раз я решил этот вопрос вручную, фильтрами отбирая из большого списка алгоритмы, которые, как мне казалось, будут работать.
Фильтры были по самым разнообразным метрикам, и метрики эти людям, которые сидят за стандартными терминалами, могут быть совсем не очевидны. Часть из них я придумал сам, и ничего сложного в моих нет, простая математика.

Вообще говоря, я пришёл к тому, что метрика торгового алгоритма (или, если хотите, стратегии), должна быть максимально объективной. Иными словами, она не должна зависеть от периода, от числа сделок и того, насколько часто алгоритм совершает сделки, и от типа самого инструмента, доли комиссии в сделке и даже рынка. Многие из метрик, которые принято использовать в классике, не отвечают этим требованиям и не позволяют правильно сравнивать между собой различные торговые системы.

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

Похоже, этот пост — вишенка на торте, которым уже можно и заканчивать всю писанину тут :)
К написанию книги я уже готов, отдохну в отпуске и, вероятно, начну, хотя теперь меня эта идея уже не привлекает, потому что написать её я хотел для структурирования своих знаний. А в данный период времени это для меня уже неактуально.

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

Когда я отбирал алгоритмы руками — это было тяжело и долго. Даже пришлось писать макросы, которые генерировали тысячи графиков эквити в MS Excel, чтобы, просто листая, просматривать их глазами и отбирать таким вот ручным способом. Но этот подход не отвечал цели, которую я перед собой поставил.

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

А потому, когда руками отбираешь торговые системы с использованием фильтров, нужно совершить множество итераций, меняя друг за дружкой, снова и опять, значения фильтров, чтобы получить что-то, что выглядит приблизительно похоже на то, что тебе нужно. И тяжко это, тяжко; а главное — не гарантирует, что ты нашёл лучшую комбинацию фильтров, которая отдаёт тебе все самые вкусные системы.

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

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

Результатами работы второй является широкая таблица, которая содержит информацию об инструменте, периоде проверки и алгоритме, а так же всех его метриках, которые я придумал.

Среди таких метрик, например, такие:
  • Приведённая к году доходность алгоритма как коэффициент
  • Превышение максимальной длины серии непрерывных прибыльных сделок над убыточными
  • Превышение суммарной прибыли по прибыльным сделкам над убытком по убыточным
  • Доля максимальной просадки в прибыли торговой системы
  • Доля времени, в течение которого торговая система была «в рынке»
  • Корреляция эквити торговой системы с ценой инструмента по датам выхода (писал об этом пост ранее)
  • Доля сделок, на которых достигались локальные экстремумы equity по отношению к суммарному числу сделок
  • Математическое ожидание
Это далеко не все метрики, и выражены они не в процентах, а рассчитаны, как коэффициент. Например, годовая доходность 150% представлена как 1.5. Это необходимо для работы механизма, о котором пойдёт речь ниже. Конкретно этот список метрик я привёл тут, потому что именно они используются дальше.

Как должно быть ясно из изложенного выше, я имею dataset, в котором дискретно рассчитаны эти метрики для каждого инструмента по периодам.
Таким образом, для одного торгового инструмента у меня есть 12 записей за последние 12 месяцев, где каждая запись метриками описывает результаты торговли алгоритмом на данном инструменте в конкретном периоде.

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

Ну а дальше всё просто.
Я написал нейронную сеть, которой скормил все те данные, о которых шла речь выше, и обучил её.

Предварительный отбор, цель которого состояла в балансировке входных данных, был простым.
Я отбирал торговые системы, которые показали доходность, по числу месяцев, в которых они показали доходность, снижая это число от 12 до нуля, и остановился на том значении, на котором число прибыльных и убыточных систем приблизительно совпало.
В результате этих манипуляций в выборке оказалось 2,275,613 алгоритмов.

Далее, я создал два вектора, в одном из которых были те метрики, которые перечислены выше, а во втором признак — 1 или 0, который говорит от том, что для вот этого набора метрик в месяце N следующий месяц N+1 будет прибыльным или убыточным.

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

Потом эти метрики я скормил вот такой простой последовательной нейронной сети. Сеть очень простая и маленькая, и она решает задачу бинарной классификации.

Отбор систем для торговли - final call

Данные IS и OOS были разделены следующим образом: 70% торговых систем были IS, и 30% — OOS.

Отбор систем для торговли - final call

Далее, выбрал небольшой размер батча и обучил сеть на 85 эпохах. Длительность обучения на каждой эпохе составила 2 сек.

Отбор систем для торговли - final call

А вот и результаты, и они говорят о том, что почти 9 из 10 предсказаний верные.
Другими словами, если выбирать для торговли алгоритмы, рекомендуемые сетью, то 9 из 10 из них будут прибыльными.
Если быть точным, то озвученная вероятность составляет 89,69%, что для нейросетей — хороший результат, а в некоторых случаях и отличный.

Слева — точность, внизу — число эпох.

Отбор систем для торговли - final call

Да вы и сами можете поразмышлять: если на горизонте месяца 9 из 10 выбранных вами стратегий будут прибыльны, и так каждый месяц — то как это укладывается в вашу нынешнюю схему торговли?

Напоследок, хочу сказать, что я отношусь к трейдингу реалистично, и 100% тут невозможны — невозможно всегда совершать только прибыльные сделки, невозможно никогда не получать убытков или просадок, вопрос в их размере в моменте, а главное — тенденция. Если 100% достичь нельзя — это не значит, что к ним не стоит стремиться, не так ли?

Эту сеть я написал, что называется, на коленке, а главное — за вчера и сегодня. Всего два дня. И её, очевидно, можно ещё тюнить и оптимизировать, как и менять набор скармливаемых ей метрик, менять параметры обучения, слои и их размер, число эпох и прочее.
Но, вот так, с ходу, такой результат меня очень впечатляет.

Мои благодарности тем, кто потестирует подход и даст обратную связь.

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

Но, конечно, не только лишь каждый сможет повторить, но почему бы не попробовать?)

Успехов и хорошего дня!
21 Комментарий
  • Ho_Chu
    02 ноября 2023, 15:19
    где то, что надо потестировать?
  • svgr
    02 ноября 2023, 16:28
    Вроде 'final cut' у них альбом назывался.
  • Zoran
    02 ноября 2023, 18:41
    Запишите меня, сам я увы не могу — нет права голоса :)
  • Replikant_mih
    02 ноября 2023, 19:41

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

     

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

     

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

     

    А твоя архитектура позволяет вычислить типовые трейдерские метрики по OOS стратегиям? Ну т.е. ты взял OOS стратегии и сделал по ним предикт, спредиктил прибыльные. Взял все такие спредикченные как прибыльные и по ним посчитал трейдерские метрики. Ну простым усреднением наверно можно, типа одна стратегия дала на OOS 1.5 PF, вторая 2, трейтья 2,5, в среднем 2. Но по хорошему тут надо на уровень трейдов уходить, все трейды в кучу и по ним общую метрику считать. В примере с 3-мя стратегиями общий PF может быть и 1.75 и 2,45 и т.д.

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

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