Блог им. AlexanderTomtosov

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

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

Это продолжение рассуждений о риске и доходности акций на Московской бирже: 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!» в мире алготрейдинга. В данном случае под риском подразумевается переход к падающему тренду в среднесрочном периоде. Очевидно, запаздывающий индикатор, но годится как бенчмарк для сравнения с более сложными стратегиями. Прогоняем цикл для каждой акции и покупаем при превышении долгосрочного ряда краткосрочной МА. Для отдельной акции помимо метрик получаем моменты сделок. На примере АФК:

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

Здесь и далее синяя линия отражает доходность тестируемой стратегии по акции или портфелю, а оранжевая — buy&hold акции или равновесного бенчмарка. Ситуация портфеля в сравнении с индексом из 60 бумаг:
Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

2)     Покупаем по тренду и продаем по волатильности

 

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

На удивление результаты ухудшились в сравнении с простым вариантом МА. Шарп 0.91, среднемесячная доходность 2.14%, альфа около 0 и незначима. Корреляция с индексом также высока 0.88. Если бы не чуть более сильный рост в 2015-2016гг, то результаты не отличались бы от бенчмарка. Интересно, что в среднем в портфеле было 36 бумаг, а на пике 53, т.е. почти вся выборка.

3)     Покупаем по тренду и продаем против обсуждений толпы

Для этого нужен ряд с посчитанным количеством сообщений для каждой акции из популярных Телеграм групп и чатов + некоторых других источников. Если канал-ветка не посвящены отдельной акции, то используем словари и другие методы, чтобы отделить сообщения. При значительном росте сообщений мы продаем/не покупаем бумагу. Результат:

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

Лучше предыдущего варианта, но хуже скользящих средних с поправкой на сложность. Доходность возросла одновременно с риском, что отразилось на Шарпе 0.91 и альфе 0.42%. Корреляция чуть отклеилась, но остается высокой 0.75. Торгуем в этот раз активно, почти 4 сделки в день:
Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

Но держим меньше бумаг в портфеле (19) и не всегда это голубые фишки.

 

4)     Покупаем по тренду и продаем по сложной методике их тональности и активности сообщений частных инвесторов

 

В этот раз мы идем дальше и обучаем нейросеть для разметки сообщений на разные группы тональности. От восхищения до проклятий в отношении акции/компании. И строим на этих данных индикатор, одновременно учитывающий и тональность сообщений, и активность постинга. Сложно назвать эффектом «толпы» позитивный сантимент из 3 сообщений. Или при рассмотрении большого количества сообщений обнаружить, что позитива и негатива там 50-50. Наверное, про этот подход стоит сделать отдельный пост. Результат многодневного чтения и разметки сообщений:

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

               В этот раз усилия дали результат: накопленная доходность почти х10, Шарп 1.4, максимальная просадка -18%, лучший месячный результат 30.69%, а средний 3.65%. Альфа 2.07 с t-stat >3. Разбивка по месяцам:

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Источник: Sentimetrica (2020)

 

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

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

Чем меньше риск, тем больше доходность. Fact and fiction о риске и доходности на Московской бирже Vol 2. Коллекция простых и сложных бэктестов: от скользящих средних до нейронки

Вывод: все метрики снижения риска улучшили результат. И опять мы получили U-образную кривую эффективности. Если жалко время на разметку и обучение НС, то простые способы дают хороший результат и займут не более 100 строк кода. Если использовать сложные метрики, то в них нужно идти до конца. Промежуточные варианты слабы, но в законченном варианте видим потенциал.

 

Спасибо всем за полезные комментарии и умные вопросы. В заключительной части сделаю бэктест метрик из предложенных в комментариях к 1 части и этому посту. Пилим бета-версию бесплатного сервиса по сантиментам здесь: https://www.sentimetrica.ru/portfel Больше исследований здесь: @sentimetrica t.me/sentimetrica Вопросы можно задать здесь, в чате или в личку @atomtosov.

 

 Работа по тестированию стратегий и формированию баз данных, построению набора факторов влияния на инвестиционную привлекательность реализуется в рамках проектов ЛАФР (www.fmlab.hse.ru), включая проект по сентименту на развивающихся рынках капитала ФЭН НИУ ВШЭ. Не является индивидуальной инвестиционной рекомендацией.

  • Добавить в Словарь 
    • Новый список слов для Русский -> Русский… 
    • Создать новый список слов...
  • Копировать
9.9К | ★47
26 комментариев
Спасибо, интересно. В 4-м варианте продаем при позитивных обсуждениях или негативных?
avatar
Laukar, Больше учитываются позитивные
здесь важный вопрос встает, а учитывались ли косты? 
avatar
Вячеслав Арбузов, Да, хотя учет костов для неликвидов может быть непредсказуем и не ограничивается брокерской комиссией + бид-аск спредом
прикольно но
1 выбор бумаг неудачен для реальной торговли… я бы закладывал хотяб 200мио оборота в день как минимум
2 если взглянуть на индекс то аптренд с 2014г, было всего 2 36% коррекции и ни одной на 50%... 
3 можно сделать стресс тест 2008г чтоб убедится в рабтоспособности методы
4 крайне мало сделок — нет нормальной статистики… т.е скорее всего результат случаен 
5 я бы не доверял самописному тестировщику
avatar

ves2010, Спасибо:

1) Можно оставить 50 самых ликвидных и поставить условие, чтобы было не менее 10-15 бумаг в любом периоде. Но в Сберах и Норникелях  форумные инвесторы по ощущениями не сильно влияют на ценообразование. А в бумагах вроде распадской и ниже — вполне. В других бэктестах ставил фильтр на среднедневной объем торгов не ниже 10мио за пред. месяц, можно проверить это стратегий 1-3;

2-4) Согласен, но данных по сантименту за тот период не найти, чтобы был нормальный охват % брокерских счетов. Новости и лента не совсем то будет;

5) Почему? Мне он видится наоборот прозрачным — можно поковырять в экселе, перепроверить по шагам. 

ves2010, я за -результат случаен тк вся информация в черточке под свечой, те в объеме.
avatar
а файлов  py или jupyter не будет?
avatar
похоже наоборот — оранж это бенчмарк.

«сделка – по цене открытия» — это плохо

ну и эффективность очень низкая для неликвидов, даже простейшие фильтры дают больше насколько я знаю

avatar
wrmngr, Спасибо, поправил момент с линиями. Вместо открытия предлагаете среднюю цену дня по объемам или другое?
Алекс Тотесобунин, хотя бы цены закрытия, но здесь надо внимательно: аукционы отрезать, брать цену закрытия основной сессии. Еще лучше среднюю цену последнего часа 
avatar
Алекс Тотесобунин, ну и наличие операций с такими бумагами как ARSA не одобрит ни один вменяемый инвесткомитет. Да и вменяемый частный спекулянт будет избегать. Так что, все это требует доработки, в текущем виде это всего лишь красивые картинки 
avatar
wrmngr, вполне возможно, что автору это нужно не для реальной торговли, а для диссертации. Тогда все основные возражения в комментариях становятся не актуальными.
avatar
SergeyJu, моя реальная торговля уже не включает в себя инвесткомитеты или суммы из поста ves2010 :) В диссертации могут быть допущения, но поиск аномалий без учета издержек точно зарубят. Например, в магистратуре пересчитывал модель с учетом комиссий и бид-аск.

Наверное, исследование может включать в себя ARSA подобный бумаги, если это заранее оговорено и не вся выборка будет состоять из 3 эшелона. По ощущениям, опубликоваться статью с данными нашей биржи в не российском журнале очень сложно и пока не похоже на простой путь.
Алекс Тотесобунин, значит, надо посчитать по двум биржам, условно, московской и миланской. 
Я не могу выбрать даже 20 более-менее ликвидных акций на нашей бирже, чтобы торговать вменяемый объем с вменяемым проскальзыванием. Собственно, из этого и надо исходить в реальности. Либо очень ограниченный объем (только для бытового использования) или портфели и медленные системы с набором позиций неделями.
avatar
wrmngr, поищу версию с отдельным тестом по группам капитализации, пока под рукой только общая выборка. Помню, что не очень хороший результат был по группе Сбер-Лукойл-ГМК, но там и параметры надо ослаблять (для выхода из позиции), т.к. сообщений всегда много. Для 2 эшелона и неликвидов результаты были схожи в плане превышения бенчмарка, шарпа и альфы. Доходности, конечно, отличались.

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

Читал в работе Size Matters if You Control Your Junk (2018, Asness et al), что последний дециль по капитализации дает плохое соотношение риска и доходности. Но если отфильтровать группу по фактору Quality (без убыточных и совсем закредитованных), то ситуация сильно меняется.
Алекс Тотесобунин, такие низколиквиды реально торговать только локально на всплесках ликвидности  1-2 дня, да и то на очень низкие суммы. И стоп по позе — весь размер позы. Все остальное просто нереально. Держать такое в инвест портфеле бессмысленно по куче причин
avatar
Я для этих целей обычно отсекал последние 5 минут перед закрытием. И брал крайний ласт. По цене открытия (дневной) согласен — лучше не использовать в таком контексте. 
avatar
Интересно. Напрягает только одно — выборка, прямо скажем, далеко не худшего участка и, с другой стороны, большая часть доходности приходится на 2020.

Здесь явно требуются более качественные тесты.
t-stat>3 сомнителен. Я, правда, и не знаю что такое t-stat 
avatar
Kot_Begemot, Спасибо. По выборке ответил чуть выше: хотелось бы взять и 2008 и 1998, но нормальной истории по сообщениям раньше 2014 найти не удается. 

Прикрепляю лог график, кажется более значимым была девальвация 2014-2015 и ралли 2016г:

Можете предложить дополнительные тесты на проверку устойчивости? Пока приходит в голову только протестить отдельно на аптренде/падении/боковике/сильной и слабой воле + посмотреть результат без 1-3 лучших акций, которые дали наибольший профит

Алекс Тотесобунин, 

Прикрепляю лог график, кажется более значимым была девальвация 2014-2015 и ралли 2016г:

У меня на Марковице тоже так — 2014-2017 обгоняю рынок, 2018-2020 чуть отстаю. В целом, это скорее нормально для любых систем ставящих целью обогнать рынок, так как рынок обогнать можно только на сильных трендах, которых последние два года и не было.

Пока приходит в голову только протестить отдельно на аптренде/падении/боковике/сильной и слабой воле + посмотреть результат без 1-3 лучших акций, которые дали наибольший профит

Тесты в различных фазах нужны скорее как генерация идей, а не как тесты. То есть, если на боковике вы уходите в глубокий минус, то это повод ввести некоторый фильтр «пилы». Сам по себе тест конкретно на боковике или конкретно на тренде не имет никакого значения.

В целом же я ориентируюсь на z-test. Для вашей системы он будет примерно равен:

256*6=1536 дней
стандартное отклонение шарпа = 1/(1536)^0.5 = 0.025
годовое ст. отклонение шарпа = 0.025 * 16 = 0.4
Шарп в ст. отклонениях = 1.4/0.4 = 3.5 

То есть с вероятностью более 99.99% система является прибыльной. 
Если нужно проверить на преимущество к бенчмарку, то шарп бенчмарка нужно вычитать из шарпа системы и делать то же самое.

Вряд ли существует некоторая общая и при этом более качественная оценка. В данном случае здесь по бенчмарку вопросы — уж очень у него высокий Шарп (вероятно около 0.8-1).
avatar
Было бы интересно посмотреть на результат работы этих стратегий через год.

Что будет если простую и нейросетевую запустить в рынок?

Или хотя бы сохранить текущий сетап, а через год применить его на исторические данные в неизменном виде.
avatar
Отличная статья! Спасибо. Побольше бы таких на смартлабе!
avatar
 Вся инфа о желании рынка в форме свечи(фракталов из свечей) и ее(их) объеме.Мораль -учимся понимать логику свечей.
avatar
За проделанный труд и попытку — респект. А что за модель нейронки то используете?
avatar
В четвертом примере большая часть роста обусловлена кратковременным всплеском, что как-бы намекает на то что суммарный результат случаен и статистически недостоверен
Если всплеск убрать, то что будет?
Можно еще посмотреть от чего он произошел, сложился ряд событий, но это не заслуга стратегии
avatar

Читайте на SMART-LAB:
Фото
Операционные результаты Группы «Аэрофлот» за ноябрь 2025 года
✈️ Объем перевозок вырос на 2,8% по сравнению с ноябрем 2024 года и достиг 4,1 млн пассажиров.   ✈️ На внутренних линиях перевезено 3,0 млн...
Фото
Кобальт: от красителя до зеленой энергетики
🔍 Это металл с богатым прошлым и не менее впечатляющим настоящим . Более 3000 лет назад им окрашивали керамику, а сегодня он помогает покорять...
Изменения в программу облигаций: пост с пояснением сущфакта на e-disclosure
Друзья, на сайте раскрытия информации от Софтлайн вышел сущфакт о внесении изменений в программу облигаций...

теги блога Александр Томтосов

....все тэги



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