Когда я в первый раз получил сотни и тысячи стратегий, которые работали на IS/OOS, главным вопросом для меня стал следующий:
- как из них изо всех отобрать те, которые с высокой вероятностью будут работать и дальше?
В первый раз я решил этот вопрос вручную, фильтрами отбирая из большого списка алгоритмы, которые, как мне казалось, будут работать.
Фильтры были по самым разнообразным метрикам, и метрики эти людям, которые сидят за стандартными терминалами, могут быть совсем не очевидны. Часть из них я придумал сам, и ничего сложного в моих нет, простая математика.
Вообще говоря, я пришёл к тому, что метрика торгового алгоритма (или, если хотите, стратегии), должна быть максимально объективной. Иными словами, она не должна зависеть от периода, от числа сделок и того, насколько часто алгоритм совершает сделки, и от типа самого инструмента, доли комиссии в сделке и даже рынка. Многие из метрик, которые принято использовать в классике, не отвечают этим требованиям и не позволяют правильно сравнивать между собой различные торговые системы.
При этом, не могу сказать, что все из них — плохие, просто нужно сесть и подумать, как очистить ту или иную метрику от субъективности измеряемой ей торговой системы.
Похоже, этот пост — вишенка на торте, которым уже можно и заканчивать всю писанину тут :)
К написанию книги я уже готов, отдохну в отпуске и, вероятно, начну, хотя теперь меня эта идея уже не привлекает, потому что написать её я хотел для структурирования своих знаний. А в данный период времени это для меня уже неактуально.
Надо сказать, что голову я ломал долго и ставил много экспериментов, чтобы из всего тучного набора, что нагенерировала моя жуткая шайтан-машина, выбирать самые стабильные, надёжные и перспективные.
Когда я отбирал алгоритмы руками — это было тяжело и долго. Даже пришлось писать макросы, которые генерировали тысячи графиков эквити в MS Excel, чтобы, просто листая, просматривать их глазами и отбирать таким вот ручным способом. Но этот подход не отвечал цели, которую я перед собой поставил.
Поскольку отбор из огромного числа фильтрами давал мне хорошие результаты — я сделал вывод, что методике отбора торговых систем по их метрикам зарыт клад, но, поскольку, метрик много, неясно, где копать. Суть в том, что не одна метрика определяет стабильность торговой системы, но их коллекция, причем, их значения должны быть определённым образом взаимосвязаны, каждое значение должно находиться в своём коридоре-интервале, рамки которого взаимозависят от значений других метрик.
А потому, когда руками отбираешь торговые системы с использованием фильтров, нужно совершить множество итераций, меняя друг за дружкой, снова и опять, значения фильтров, чтобы получить что-то, что выглядит приблизительно похоже на то, что тебе нужно. И тяжко это, тяжко; а главное — не гарантирует, что ты нашёл лучшую комбинацию фильтров, которая отдаёт тебе все самые вкусные системы.
Я уже давно думал, как же сюда мне припаять искусственный интеллект. Я в нём совсем не гуру, так, могу создавать простые сетки. Но и задача не сказать, чтобы академическая — нужно найти взаимосвязь между метриками торговой системы и вероятностью того, что в будущем она будет прибыльна.
Две основных моих рабочих лошадки трудятся день и ночь, одна из которых находит алгоритмы на каком-то периоде какого-то инструмента, а другая проверяет эту торговую систему на других периодах и других инструментах.
Результатами работы второй является широкая таблица, которая содержит информацию об инструменте, периоде проверки и алгоритме, а так же всех его метриках, которые я придумал.
Среди таких метрик, например, такие:
- Приведённая к году доходность алгоритма как коэффициент
- Превышение максимальной длины серии непрерывных прибыльных сделок над убыточными
- Превышение суммарной прибыли по прибыльным сделкам над убытком по убыточным
- Доля максимальной просадки в прибыли торговой системы
- Доля времени, в течение которого торговая система была «в рынке»
- Корреляция эквити торговой системы с ценой инструмента по датам выхода (писал об этом пост ранее)
- Доля сделок, на которых достигались локальные экстремумы equity по отношению к суммарному числу сделок
- Математическое ожидание
Это далеко не все метрики, и выражены они не в процентах, а рассчитаны, как коэффициент. Например, годовая доходность 150% представлена как 1.5. Это необходимо для работы механизма, о котором пойдёт речь ниже. Конкретно этот список метрик я привёл тут, потому что именно они используются дальше.
Как должно быть ясно из изложенного выше, я имею dataset, в котором дискретно рассчитаны эти метрики для каждого инструмента по периодам.
Таким образом, для одного торгового инструмента у меня есть 12 записей за последние 12 месяцев, где каждая запись метриками описывает результаты торговли алгоритмом на данном инструменте в конкретном периоде.
Поэтому я знаю, что некий алгоритм по конкретному инструменту был прибыльным, например, в мае, июне, июле, октябре, а в другие месяцы был убыточным. И из этого я могу рассказать механизму, который описан далее, будет ли конкретная торговая система прибыльной или убыточной в следующем периоде. Для простоты я закодировал этот признак значениями 1 и 0 соответственно.
Ну а дальше всё просто.
Я написал нейронную сеть, которой скормил все те данные, о которых шла речь выше, и обучил её.
Предварительный отбор, цель которого состояла в балансировке входных данных, был простым.
Я отбирал торговые системы, которые показали доходность, по числу месяцев, в которых они показали доходность, снижая это число от 12 до нуля, и остановился на том значении, на котором число прибыльных и убыточных систем приблизительно совпало.
В результате этих манипуляций в выборке оказалось 2,275,613 алгоритмов.
Далее, я создал два вектора, в одном из которых были те метрики, которые перечислены выше, а во втором признак — 1 или 0, который говорит от том, что для вот этого набора метрик в месяце N следующий месяц N+1 будет прибыльным или убыточным.
Как видите, тут прогнозируется не цена, а эффективность и устойчивость той или иной комбинации метрик конкретной торговой системы. Прямого отношения к предсказыванию сигналов входов или выходов и торговле вообще она не имеет.
Потом эти метрики я скормил вот такой простой последовательной нейронной сети. Сеть очень простая и маленькая, и она решает задачу бинарной классификации.
Данные IS и OOS были разделены следующим образом: 70% торговых систем были IS, и 30% — OOS.
Далее, выбрал небольшой размер батча и обучил сеть на 85 эпохах. Длительность обучения на каждой эпохе составила 2 сек.
А вот и результаты, и они говорят о том, что почти 9 из 10 предсказаний верные.
Другими словами, если выбирать для торговли алгоритмы, рекомендуемые сетью, то 9 из 10 из них будут прибыльными.
Если быть точным, то озвученная вероятность составляет 89,69%, что для нейросетей — хороший результат, а в некоторых случаях и отличный.
Слева — точность, внизу — число эпох.
Да вы и сами можете поразмышлять: если на горизонте месяца 9 из 10 выбранных вами стратегий будут прибыльны, и так каждый месяц — то как это укладывается в вашу нынешнюю схему торговли?
Напоследок, хочу сказать, что я отношусь к трейдингу реалистично, и 100% тут невозможны — невозможно всегда совершать только прибыльные сделки, невозможно никогда не получать убытков или просадок, вопрос в их размере в моменте, а главное — тенденция. Если 100% достичь нельзя — это не значит, что к ним не стоит стремиться, не так ли?
Эту сеть я написал, что называется, на коленке, а главное — за вчера и сегодня. Всего два дня. И её, очевидно, можно ещё тюнить и оптимизировать, как и менять набор скармливаемых ей метрик, менять параметры обучения, слои и их размер, число эпох и прочее.
Но, вот так, с ходу, такой результат меня очень впечатляет.
Мои благодарности тем, кто потестирует подход и даст обратную связь.
Выводы:
Очевидно, что существует сильная корреляция между результатами (метриками эффективности) торговой системы в текущем периоде и её успешностью в следующем периоде, что можно и нужно использовать для принятия решений о включении или исключении торговой системы из торгового портфеля.
Но, конечно, не только лишь каждый сможет повторить, но почему бы не попробовать?)
Успехов и хорошего дня!
Хорошо иметь хороший бекграунд (я про себя) — я всё понял, о чем здесь. Хотя нет, не хороший, потому что я понимаю далеко не всех, скорее подходящий бэкграунд.
Идеи интересные, ML прикручен уместно — пример того, что ML в трейдинге это не только про прогнозирование приращения или вообще цвета свечи, а много разных интересных точек приложения.
Как по моему опыту применения ML в трейдинге — графики выглядят подозрительно оптимистичными, я в таких случаях начинаю искать усиленно возможные ошибки и т.д. Но может я просто не до конца физический смысл описанного прочувствовал.
А твоя архитектура позволяет вычислить типовые трейдерские метрики по OOS стратегиям? Ну т.е. ты взял OOS стратегии и сделал по ним предикт, спредиктил прибыльные. Взял все такие спредикченные как прибыльные и по ним посчитал трейдерские метрики. Ну простым усреднением наверно можно, типа одна стратегия дала на OOS 1.5 PF, вторая 2, трейтья 2,5, в среднем 2. Но по хорошему тут надо на уровень трейдов уходить, все трейды в кучу и по ним общую метрику считать. В примере с 3-мя стратегиями общий PF может быть и 1.75 и 2,45 и т.д.