Python в помощь тестированию структурных продуктов » Элитный трейдер
Элитный трейдер


Python в помощь тестированию структурных продуктов

6 августа 2019
Воодушевлённый статьёй с рекламой структурных продуктов на Хабре, адаптировал python-скрипт для их самостоятельного тестирования. Основная идея в том, что подобные продукты предлагают 100% защиту капитала. А учитывая 10 лет бычьего рынка, исторические показатели подобных продуктов одурманивают безрисковым раем.

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

Код выложен в GitHub в виде Jupyter-блокнота. Поехали!

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

Данные берём из бесплатного Alpha Advantages, где предварительно нужно получить ключ, поделившись email-адресом. Краткая инструкция в блокноте. Котировки российских бумаг вы можете взять на Финаме.

«Обаяние» структурного продукта
Общая суть — ваш капитал в сохранности, а доходность выше банковского депозита. Вот только пропущено несколько элементов уравнения:

По банковскому депозиту доход есть всегда, а здесь есть риск сыграть в ноль;
Вы получите прибыль, но на весомый кусок пирога претендует брокер;
Накладывается ограничение на использование вложенных денег;
Брокер практически не несёт никаких рисков, а участвует только в прибыли.
Стратегия
Рассмотрим самую простую стратегию:

Покупаем на 90% капитала краткосрочные казначейские облигации;
На остаток покупаем высокорискованный актив;
Ставим стоп на 10% от цены на старте периода.
В основе стратегии: казначейские облигации дают 1-3% годовых практически исключая просадку (если доходность есть). 10% от просадки актива, купленного на 10% капитала, как раз будут тем самым риском, который покроют облигации. В периоды бычьего рынка некоторые акции могут вырасти в несколько раз, что и подарит нам счастье.

Для ручного повторения данной стратегии необходимо выполнить следующие неподсильные действия:

Купить облигации или низкорисковый доходный инструмент. Например, в виде ETF.
Купить акции.
Поставить стоп-приказ.
Как тестируем
Кратко опишу некоторые решения с выдержками кода, которые позволили сделать тестирование достаточно гибким и удобным.

Расписание
Производить ребалансировку можно в следующие периоды: неделя, месяц, год. А также в любой день внутри периода: первый, N-ый, последний. За это отвечает класс Schedule():

Исходный код и ссылка на репозиторий на Quantrum.me.

Цикл по данным
StructuredProductMill().run()

Как я писал в одной из статей, мы можем обходить в цикле только даты ребалансировки и пропустить все остальные дни. Но тогда мы теряем статистику по изменению активов внутри периода, не увидим доходность и просадки за каждый день. В ущерб скорости скрипт обходит каждый день, что позволяет видеть рыночную стоимость открытых позиций и применить проверку стоп-приказа.

Ребалансировка
StructuredProductMill().rebalance()

Здесь активы, которые можно открывать, распределяются на доступный капитал. После сравнения расчёта с открытыми позициями производится исполнение сделок на нужное количество:

Исходный код и ссылка на репозиторий на Quantrum.me.

Сделки
StructuredProductMill().trade()

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

Запуск
Для запуска необходимо указать набор активов с долями и параметры теста. Мы же будем тестировать структурные продукты за календарный год:

Исходный код и ссылка на репозиторий на Quantrum.me.

Внизу блокнота есть графики с доходностью и просадками в даты ребаланса (в конце года), что подтверждает крайне низкие просадки капитала в моменты отчёта и постоянно растущую доходность. Хоть эта доходность и проигрывает широкому индексу американских компаний S&P 500.

Какие результаты
В тестах участвовали свободно торгующихся американские инструменты с 2011 года:

BIL — ETF на краткосрочные казначейские облигации с доходностью 2% годовых на момент написания статьи. Помним, что в период с 2009 до 2017 ставки были рядом с нулём. Альтернативой можно использовать MINT (фонд на краткосрочные инструменты с фиксированной доходностью).
AAPL — акции компании Apple.
MSFT — акции компании Microsoft.
TSLA — акции компании Tesla.
AAPL
Данная конструкция принесла за 8 лет доход в 24% (среднегодовая 2.6%) с просадкой между ребалансировками -6%. Но на стыке лет просадка около нуля. Стопа не коснулись, рынку со 180% дохода порядком проиграли.

Python в помощь тестированию структурных продуктов




MSFT
Данная конструкция принесла за 8 лет доход в 26% (среднегодовая 2.75%) с просадкой между ребалансировками -2%. На стыке лет просадка отсутствует.





TSLA
Данная конструкция принесла за 8 лет доход в 45% (среднегодовая 4.6%) с просадкой между ребалансировками аж -15%. Но всё это в 2013 году, когда Тесла выросла почти в 5 раз. На стыке лет просадка до -2%. Самый беспокойный, но и прибыльный пассажир.





Заключение
Вы можете воспользоваться данным блокнотом для поиска своих стратегий с минимальным риском или потестировать простые портфели.

В комментариях задавайте вопросы и напишите, что вам не понравилось в статье. А может есть совет, что улучшить?

(C) Источник
Не является индивидуальной инвестиционной рекомендацией
При копировании ссылка обязательна Нашли ошибку: выделить и нажать Ctrl+Enter