Когда я в первый раз получил сотни и тысячи стратегий, которые работали на 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% достичь нельзя — это не значит, что к ним не стоит стремиться, не так ли?
Эту сеть я написал, что называется, на коленке, а главное — за вчера и сегодня. Всего два дня. И её, очевидно, можно ещё тюнить и оптимизировать, как и менять набор скармливаемых ей метрик, менять параметры обучения, слои и их размер, число эпох и прочее.
Но, вот так, с ходу, такой результат меня очень впечатляет.
Мои благодарности тем, кто потестирует подход и даст обратную связь.
Выводы:
Очевидно, что существует сильная корреляция между результатами (метриками эффективности) торговой системы в текущем периоде и её успешностью в следующем периоде, что можно и нужно использовать для принятия решений о включении или исключении торговой системы из торгового портфеля.
Но, конечно, не только лишь каждый сможет повторить, но почему бы не попробовать?)
Успехов и хорошего дня!
last call.
Хорошо иметь хороший бекграунд (я про себя) — я всё понял, о чем здесь. Хотя нет, не хороший, потому что я понимаю далеко не всех, скорее подходящий бэкграунд.
Идеи интересные, ML прикручен уместно — пример того, что ML в трейдинге это не только про прогнозирование приращения или вообще цвета свечи, а много разных интересных точек приложения.
Как по моему опыту применения ML в трейдинге — графики выглядят подозрительно оптимистичными, я в таких случаях начинаю искать усиленно возможные ошибки и т.д. Но может я просто не до конца физический смысл описанного прочувствовал.
А твоя архитектура позволяет вычислить типовые трейдерские метрики по OOS стратегиям? Ну т.е. ты взял OOS стратегии и сделал по ним предикт, спредиктил прибыльные. Взял все такие спредикченные как прибыльные и по ним посчитал трейдерские метрики. Ну простым усреднением наверно можно, типа одна стратегия дала на OOS 1.5 PF, вторая 2, трейтья 2,5, в среднем 2. Но по хорошему тут надо на уровень трейдов уходить, все трейды в кучу и по ним общую метрику считать. В примере с 3-мя стратегиями общий PF может быть и 1.75 и 2,45 и т.д.
Смешать трейды разных систем — это будет адская каша.
Я нахожу то, что работает на обучении и тут же это проверяю на проверочной.
Если этот тест прошёл, то обсчитываю такой алгоритм по разным инструментам и периодам. Понятно, что в каких-то периодах получается минус. Вот с таким результатом
дальше и работаю.
Есть такие алгоритмы, которые в каждом периоде прибыльные, но их десятки на инструмент, совсем немного в сравнении с числом, участвующим в расчётах.
Если один и тот же алгоритм показывает профит на разных инструментах в разные периоды — это то, с чем можно работать.
Вуаля.
bascomo, Ну я не до конца понимаю механизм, что у тебя там происходит.
Если полностью нарандомить миллиард массивов из 24 значений, где значение — дробь от 0 до 1. Считаем 0.5+ профитным чем-то, 0.5- убыточным чем-то. Считаем что первые 12 значений массива это IS, вторые 12 этого же массива — это OOS.
Дальше делаем магию).
Отбираем все массивы где 6+ из первых 12 значений профитные. Что с профитностью по вторым половинам массивов? — Рандом.
Отбираем все массивы где среди 12 первых ячеек все 12 профитные. Что с профитностью вторых половин массивов? — Рандом.
Отбираем все массивы где среди 12 первых ячеек все 12 профитные, дальше среди этого подмассива отбираем те, где следующие все 6 ячеек профитные. Что по этим отобранным с профитностью оставшимихся 6-ти ячеек? — Рандом.
Сам по себе такой подход не позволяет отбирать правильные стратегии. Вернее так, если внутри рандом, подход не позволяет на выходе получить не рандом. Конечно, рынки не рандом, на выходе будет какой-то эдж, но он съестся большой долей подгонки, заложенной в подход.
А вот тема с ML моделью описанная может внести правильный вектор.
Если корреляция эквити двух систем на одном и том же инструменте и одном и том же периоде совпадает — значит, они однотипные. Отсюда ясно, как находить разнотипные.