Блог им. AleksandrBaryshnikov

Как я использую ML в оценке статистических метрик Equity

Идея

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

Подход

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

Приблизительно так выглядит основной кусок кода. Всё, что до него — загрузка и подготовка данных, а после него — визуализация. Как видно из кода, используется KMeans и разбивает выборку на 5 классов.
Как я использую ML в оценке статистических метрик Equity

Результат

И вот что из этого получилось. Хорошо видно, что комбинация отдельных метрик чётко выделяет кластеры, а некоторые метрики больше мусорные и особо ничего не дают. Ещё видно, что некоторые метрики нелинейные — они сдвигают все классы в одну сторону, оставляя доминирующим на большей части своего интервала бесполезный класс. Из этого следует два вывода:
  • Отдельные метрики подходят только для того, чтобы границей отсечь заведомо неподходящие алгоритмы. Например, посмотрите на RSquare. То, что меньше 0,8, можно смело выкидывать, а лучше брать то, что больше 0,95.
  • Лучше пользоваться пересечением метрик, так как это лучше, чем метрики по отдельности, выделяет качественные алгоритмы.
  • И в целом, можно использовать ML для разбиения торговых алгоритмов на классы и торговать лучшими, не проводя часы за анализом графиков или таблиц с метриками. По крайней мере, если алгоритмов много, то это хороший способ сузить область поиска.

Как я использую ML в оценке статистических метрик Equity

Можно использовать и другие алгоритмы кластеризации, например
Как я использую ML в оценке статистических метрик Equity

И они дают схожие результаты:

Как я использую ML в оценке статистических метрик Equity

Ещё одна рабочая идея состоит в том, чтобы смотреть нормальное распределение значений той или иной метрики. Это помогает понять, куда она смещена, есть лив  ней доминанта и как лучше её использовать. Или же она вообще случайно разбросана.
Как я использую ML в оценке статистических метрик Equity

И ещё одна картинка.

Как я использую ML в оценке статистических метрик Equity
Глубоких выводов тут я не делаю, так как цель поста — показать, какой есть инструмент, как он работает и как его можно использовать.
★1
12 комментариев
Голова чет не варит :), не совсем понятно как используете данные результаты? 

avatar
CloseToAlgoTrading, для отбора наиболее перспективных торговых алгоритмов. Представьте ситуацию, что есть миллион торговых алгоритмов и нужно отобрать лучшие. В этой коннотации должно быть понятнее.
avatar
bascomo, 
Так а какой кластер в итоге получаем более перспективным?
Вы задаете количество кластеров, получаете скажем 5 кластеров, а как потом выбрать лучшую систему?
Не пробовали скажем dbscan, на посмотреть что он покажет… так то если задавать количество кластеров, то системы не попадающие никуда будут так же отнесены же к какому либо кластеру в итоге.

avatar
CloseToAlgoTrading, а на этот вопрос нет однозначного ответа. У меня два варианта: глазами смотрим, какой лучше (больше прибыль/меньше просадка) или проторговываем каждый кластер на истории и смотрим, какой лучше. Но в этих двух случаях разные выборки получатся, понятное дело.

Нет, dbscan не пробовал.
avatar
Чтобы применить алгоритм классификации к-средних необходимо и достаточно задать расстояния между элементами, которые мы хотим разбить на кластеры, и число кластеров.
Элемент = стратегия, наверное. 
Что именно является расстоянием? 
avatar
SergeyJu, это многомерное пространство и координаты каждой точки определяют, в данном случае, 6 параметров. Расстояние между этими точками, полагаю.
avatar
bascomo, эти 6 параметров секрет? 
Вы их как-то нормализуете, или все отдаете на откуп стандартной программе? 
Лично меня интересует вклад каждой системы в портфель. Оптимизирую портфель по отношению доходности к риску.
avatar
SergeyJu, В посте приведён код. Параметры указаны в первой строчке. Это метрики.
avatar
Талантливо, но бесполезно. Цель нужна, а не просто изобретение.
— Скажите, пожалуйста, куда мне отсюда идти?
— А куда ты хочешь попасть? — ответил Кот.
— Мне все равно — сказала Алиса.
— Тогда все равно, куда и идти, — заметил Кот.
— только бы попасть куда-нибудь, — пояснила Алиса.
— Куда-нибудь ты обязательно попадешь, — сказал Кот. — Нужно только достаточно долго идти.—  Алиса в стране чудес (Льюис Кэрролл)
Василий Федорович, «Дзен-навигация»: выберите того, кто по вашему знает куда идёт и следуйте за ним. И вы попадете не туда куда хотите, а туда, куда вам нужно.
avatar
Sprite, я бы выбрал, да где их взять, ну хотя бы одного.
Sprite, я бы выбрал, покажите из кого выбирать?

теги блога bascomo

....все тэги



UPDONW
Новый дизайн