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

Это продолжение рассуждений о риске и доходности акций на Московской бирже: https://smart-lab.ru/blog/625771.php Основные выводы из первой части:
1) Увеличение риска (стандартного отклонения) приводит к снижению будущей доходности акций, а не наоборот;
2) Стратегия, выстроенная только на основе исторической волатильности, несамостоятельна и проигрывает индексу.
В этот раз возьмем за основу трендовую стратегию в самом простом виде – на пересечении 1-месячной и 3-х месячной скользящей средней. И будем снижать риск разными способами с целью поднять доходность, Шарп, сократить время боковиков и корреляцию с бенчмарком. Об эффективности трендовых стратегий в России можно почитать здесь https://smart-lab.ru/blog/611263.php на глобальных ETF здесь https://smart-lab.ru/blog/617639.php
О выборке и методах тестирования
В этот раз у нас 60 акций с 2014 по 2020гг. 20 голубых фишек из ММВБ 10 + ликвидные металлурги и Яндекс, 20 компаний средней капитализации вроде производителей удобрений и угольщиков + 20 неликвидных бумаг из разных секторов. Период из-за сложно доступности не биржевых данных уменьшился. Зато мы совершаем сделки почти ежедневно и балансируем портфель по ситуации, а не фиксировано раз в месяц как раньше. В портфеле может находится от 0 до 60 акций одновременно, комиссии за сделки взяты среднерыночные, дивиденды не учтены. Наблюдение по цене закрытия, сделка – по цене открытия. Веса в портфеле равные.
1) Покупаем по тренду и продаем по тренду
«Hello world!» в мире алготрейдинга. В данном случае под риском подразумевается переход к падающему тренду в среднесрочном периоде. Очевидно, запаздывающий индикатор, но годится как бенчмарк для сравнения с более сложными стратегиями. Прогоняем цикл для каждой акции и покупаем при превышении долгосрочного ряда краткосрочной МА. Для отдельной акции помимо метрик получаем моменты сделок. На примере АФК:
Источник: Sentimetrica (2020)
Здесь и далее синяя линия отражает доходность тестируемой стратегии по акции или портфелю, а оранжевая — buy&hold акции или равновесного бенчмарка. Ситуация портфеля в сравнении с индексом из 60 бумаг:

Источник: Sentimetrica (2020)
Шарп 1.1, среднемесячная доходность 2.78% и значимая месячная альфа 0.97%. Совсем неплохо для минимальных усилий. Из минусов: почти полная корреляция с индексом 0.82, которая еще более заметная если смотреть на скользящую 21-дневную волатильность доходности (0.91):

Источник: Sentimetrica (2020)
В среднем стратегия достигает нового максимума за 9 дней и максимально за 225 дней. Самые популярные бумаги по суммарным дням нахождения в портфеле:

2) Покупаем по тренду и продаем по волатильности
Правило покупки остается неизменным, но продаем теперь при превышении трейлинг волатильности своего долгосрочного аналога. Сигнал на продажу является старшим, т.е. если у нас в портфеле есть бумаги и одновременно выходит покупка и продажа – мы продаем. Если в такой же ситуации бумаги нет – не покупаем. Результат:

Источник: Sentimetrica (2020)
На удивление результаты ухудшились в сравнении с простым вариантом МА. Шарп 0.91, среднемесячная доходность 2.14%, альфа около 0 и незначима. Корреляция с индексом также высока 0.88. Если бы не чуть более сильный рост в 2015-2016гг, то результаты не отличались бы от бенчмарка. Интересно, что в среднем в портфеле было 36 бумаг, а на пике 53, т.е. почти вся выборка.
3) Покупаем по тренду и продаем против обсуждений толпы
Для этого нужен ряд с посчитанным количеством сообщений для каждой акции из популярных Телеграм групп и чатов + некоторых других источников. Если канал-ветка не посвящены отдельной акции, то используем словари и другие методы, чтобы отделить сообщения. При значительном росте сообщений мы продаем/не покупаем бумагу. Результат:

Источник: Sentimetrica (2020)
Лучше предыдущего варианта, но хуже скользящих средних с поправкой на сложность. Доходность возросла одновременно с риском, что отразилось на Шарпе 0.91 и альфе 0.42%. Корреляция чуть отклеилась, но остается высокой 0.75. Торгуем в этот раз активно, почти 4 сделки в день:

Источник: Sentimetrica (2020)
Но держим меньше бумаг в портфеле (19) и не всегда это голубые фишки.
4) Покупаем по тренду и продаем по сложной методике их тональности и активности сообщений частных инвесторов
В этот раз мы идем дальше и обучаем нейросеть для разметки сообщений на разные группы тональности. От восхищения до проклятий в отношении акции/компании. И строим на этих данных индикатор, одновременно учитывающий и тональность сообщений, и активность постинга. Сложно назвать эффектом «толпы» позитивный сантимент из 3 сообщений. Или при рассмотрении большого количества сообщений обнаружить, что позитива и негатива там 50-50. Наверное, про этот подход стоит сделать отдельный пост. Результат многодневного чтения и разметки сообщений:
Источник: Sentimetrica (2020)
В этот раз усилия дали результат: накопленная доходность почти х10, Шарп 1.4, максимальная просадка -18%, лучший месячный результат 30.69%, а средний 3.65%. Альфа 2.07 с t-stat >3. Разбивка по месяцам:

Источник: Sentimetrica (2020)
Волатильность высокая, но почти не коррелирует с бенчмарком 0.27. И это радует:

Источник: Sentimetrica (2020)
Из минусов можно отметить малое количество бумаг в портфеле, в среднем – 5. Но это лечится увеличением исходной выборки. Лидеры по количеству сделок в портфеле. Список не на 100% пересекается с бумагами по удержанию и отражает более спекулятивные бумаги:

Более существенный минус – это высокое количество дней, за которое мы не достигаем нового максимума по накопленной доходности. В среднем – это 13 дней, а максимально 329. Не нашел расчета такой метрики в базовых пакетах, но задача имеет простое решение:

Вывод: все метрики снижения риска улучшили результат. И опять мы получили U-образную кривую эффективности. Если жалко время на разметку и обучение НС, то простые способы дают хороший результат и займут не более 100 строк кода. Если использовать сложные метрики, то в них нужно идти до конца. Промежуточные варианты слабы, но в законченном варианте видим потенциал.
Спасибо всем за полезные комментарии и умные вопросы. В заключительной части сделаю бэктест метрик из предложенных в комментариях к 1 части и этому посту. Пилим бета-версию бесплатного сервиса по сантиментам здесь: https://www.sentimetrica.ru/portfel Больше исследований здесь: @sentimetrica t.me/sentimetrica Вопросы можно задать здесь, в чате или в личку @atomtosov.
Работа по тестированию стратегий и формированию баз данных, построению набора факторов влияния на инвестиционную привлекательность реализуется в рамках проектов ЛАФР (www.fmlab.hse.ru), включая проект по сентименту на развивающихся рынках капитала ФЭН НИУ ВШЭ. Не является индивидуальной инвестиционной рекомендацией.
1 выбор бумаг неудачен для реальной торговли… я бы закладывал хотяб 200мио оборота в день как минимум
2 если взглянуть на индекс то аптренд с 2014г, было всего 2 36% коррекции и ни одной на 50%...
3 можно сделать стресс тест 2008г чтоб убедится в рабтоспособности методы
4 крайне мало сделок — нет нормальной статистики… т.е скорее всего результат случаен
5 я бы не доверял самописному тестировщику