Блог им. DenisVo

Как легко и просто обыграть рынок. Momentum and Portfolio Optimization.

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

И так,
  • Возмем 500 бумаг которые на данный момент находятся в индексе snp500.
  • Каждый месяц будем отбирать 10 бумаг по принципу силы импульса за последний год. Имеется ввиду процентное изменение.
  • Вторая стратегия будем отбирать 10 бумаг, но импульс будем считать как разницу цены и скользящей стредней с периодом 252.
  • Ребалансировка портфеля через каждые 22 дня.
  • Только лонг.
Протестируем за 10 лет начиная с 2005, и получим вот такой прекрасный результат: 
Как легко и просто обыграть рынок. Momentum and Portfolio Optimization.


Общая доходность в 10 раз выше индекса, годовая в 5. Однако видим что и просадка у нас повыше. 

Но мы же все делаем на питоне, где полно всяких полезных пакетов. Воспользуемся библиотекой PyPortfolioOpt, и добавим попробуем эти же две стратегии с импользованием следующих методов оптимизации портфелей: CLA, HRP, CVaR, DVaR

И посмотрим на результат:
Как легко и просто обыграть рынок. Momentum and Portfolio Optimization.
Как легко и просто обыграть рынок. Momentum and Portfolio Optimization.


Тада!!! Мы видим что некоторые методы оптимизации сработали довольно хорошо, и теперь наша просадка ниже чем если бы мы инвестировали в индекс. 

Интересно что такого рода стратегии работали всегда и продолжают работать, а последнии два года так вообще взлет доходности.


Ну и по традиции видюшка...


ссылка на код.
github.com/CloseToAlgoTrading/CodeFromVideo/tree/master/Portfolio_Testing_Framework


 
★14
42 комментария
Наоборот сработает наверняка. Слабые бумаги удаляйте, отрасти шансов уже нет. За рост рынков ничего сказать не могу. 
avatar
MPlus, Ноборот вы и имеете ввиду выбирать бумаги которые показывают наихудший импульс? Сработает и даже лучше :). 
Тут правда есть момент, я выбрал бумаги которые сейчас котируются в индексе… т.е. как бы те у которых был делистинг мы уже исключили… но это не большая беда )
avatar
CloseToAlgoTrading, Не время сейчас для портфельный инвестиций, не удержите прибыль.
avatar
MPlus, ну это довольно спорное утверждение… На чем основано, если не секрет?
Портфельное инвестирование не отменяет шорты и любые другие виды активного управления. Да и всегда есть что то что растет, ну и так же никто же не расчитывает на один или два года… период выбран в 10 лет не случайно. Но в целом, по моментуму, мы почти всегда обыгрываем рынок. Убыток меньше чем по индексу уже выигрыш у рынка.

Важным моментом тут является волатильность и просадка портфеля… в данном тесте у лучшей стратегии просадка длится больше 2,5 лет, что с одной стороны довольно таки долгий период, с другой стороны это меньше чем по индексу. 

В любом случае это лишь пример простой стратегии, без каких либо усложнений.
avatar
CloseToAlgoTrading, Открыл здесь два виртуальные портфеля. Это 70 лучших доходных бумаг прошлого 21'года. Портфель Сектор+ это те кто шли выше индекса, Сектор- ниже индекса, но вполне прибыльные. Что имеем через полгода = всего 9 бумаг в плюсе, остальные «пусть полежат». И  по тем, что «лежат» иллюзий не должно быть никаких -40-80% усредняйтесь — не хочу.

Та же история по кварталам'22 — с активным управление каждый набор красавец, как только бумаги оставишь, портфель сползает в убыток. Пока деньги идут с рынков, зачем с этим спорить, на постоянных шортах капиталы не сохранить. А до первого, ближайшего  нашего днища еще довольно далеко, опускают инвесторов плавненько, чтобы не разбежались.
avatar
MPlus, Так суть же не в том что купи и держи, а в том что мы продаем все что нам больше не нужно и покупаем совершенно иное. Т.е. мы всегда ставим на тех кто растет, и надеемся на то что они и дальше будут расти… они и обгоняют индекс. Эта методика всегда работает в долгосрочной перспективе. 
avatar
ну конечно же! как мы все не догадались! наконец все будет хорошо!
по снп 500 явно ложные данные
avatar
wrmngr, хм… почему ложные то?
я конечно не исключаю ошибки в расчетах, но вроде как все там верно.
avatar
Ошибка в расчётах как минимум одна — для тестов вы берете текущий состав индекса, а он со временем изменяется. Таким образом вы отбросили бумаги, которые падали и выпали из индекса и тестируете только на тех, которые росли и попали в него.

Вместо индекса сравнивайте результат такого портфеля с портфелем всех акций (типа удерживать в равных долях все бумаги на которых тестируете и ребалансируйте такой портфель раз в год (для выравнения долей)). Думаю что результаты немного расстроят.
avatar
Дмитрий Т, Да я это уже отметил выше в комментариях. Мы исключили из нашей выборки не те бумаги которые падали, а те которые были исключены из индекса, это важный момент. Не думаю что за 10 лет весь индекс изменился, но это по любому играет немного нам на руку. 
Первые два результата это как раз и есть точно такой же портфель с раными долями распределения средств. Однако применяя некоторую оптимизацию, что изменяет не состав акций, а количество тех или иных бумаг в портфеле, помогает улучшить результат. 
Опять же, зачем проводить ребалансировку раз в год, уже ведь много где было описано, что ребалансировка раз в год так себе идея, и в целом более частая работает много лучше. 
avatar
CloseToAlgoTrading, да, не тестируем на бумагах, которые выпали из индекса. Но в большинстве случаев из индексов выпадают или бумаги которые упали, или если есть более интересные. И это сильно влияет на результат (сам через это проходил). Просто сравнивать результат таких тестов с индексом некорректно.
А ребалансировку я имел ввиду делать в «самодельном» индексе. И тогда уже можно будет хоть как-то сравнивать результат тестов с таким «самодельным» индексом.
avatar
CloseToAlgoTrading, тема поста «Как легко и просто обыграть рынок» немного некорректна. Ведь если взять текущий состав индекса, купить все эти бумаги в равных долях в начале 2005 года, то мы уже обыграем индекс. Но вот какой будет состав индекса через несколько лет никто не знает.
avatar
Дмитрий Т, Вот смотрите, тест с квантконнекта по истории с удалением и добавлением новых бумаг в индекс. 


Тут ребалансировка правда раз в месяц, вроде первого числа, а не через 22 дня… но сути дела не меняет, все ще с лихвой обыгрываем индекс. 

avatar
CloseToAlgoTrading, индекс обыгрываем, но уже не с таким отрывом, верно? Об этом я и говорил.

А в Квантконнекте учитываются ли дивиденды? Если учитываются новые/старые бумаги в индексе, то может и дивиденды тоже учитываются. В этом случае надо сравнивать с индексом полной доходности (с дивидендами).

P.S. По поводу того хорошая ли эта стратегия или нет я ничего не сказал.
avatar
Дмитрий Т, с яху аджастет прайс вроде же как учитывает все и дивиденды и сплиты, в квантконекте тоже, но тест выше (квантконект) я делал на обычной цене закрытия не аджастед. 
Как я писал в прошлом посте, идея таких тестирований не найти наилучшие параметры или же сверхточное приближение к рыночной торговли, а проверка идеи. Быстро набросать некоторые правила, запустить, посмотреть… а там 1000% или 500% это уже не сильно важно… особенно если все стратегии сравнивать на одних и тех же данных и базовых алгоритмах.
avatar

CloseToAlgoTrading, 

но это по любому играет немного нам на руку

Может быть немного играет на руку, а может быть все ставит с ног на голову. И то и другое — оценки взятые с потолка, они равноправны.
Однако применяя некоторую оптимизацию
Оптимизация всегда улучшает результат, вплоть до получения дистиллированного подгоночного мусора. Можете даже пооптимизировать 500 и 10 (если еще этого не сделали) и тоже получить улучшение, без всяких там CVaR/CDaR.
На истории рынок обыгрывать можно ещё круче и проще, раз эдак в сто. Просто покупаешь на минимумах и продаёшь на максимумах, и радуешься и немного жалеешь что график на следующий год только в конце следующего года дорисуется.
Если кто то говорит, что сложную проблему можно решить легко и просто, то это либо лжец, либо мошенник, либо политик
avatar
Так нельзя оптимизировать. Надо года 4 оставлять на бэктест без оптимизации и год на форвард без оптимизации, под остальные 5 лет оптимизируете и так сразу увидите потом что в реале оно не обгоняет индекс, а иначе только на практике убедитесь…
avatar
Laukar, А что именно вы имееете ввиду говоря что именно нельзя оптимизировать то?
avatar
CloseToAlgoTrading, если так оптимизировать то любая стратегия будет радовать фейковыми результатами, совершенно не повторяющимися на реале где нет оптимизации!
avatar
Laukar, поясните пожалуйста, что вы имеете ввиду, говоря «если так оптимизировать»?

В данном подходе используется метод оптимизации портфеля, в любой момент времени, нам нужно опредлить какое количество уже выбранных бумаг держать в портфеле, метод оптимизации ищет на истории наилучшее распределение и выдает его. Это совершенно не значит, что в будущем это распределение будет лучшим.
Пример, у нас есть 2 бумаги, и мы решаем просто поделить поровну наши средства 0.5 и 0.5. Тут никакая оптимизация не нужна. Однако, мы можем сделать предположени и сказать, а давайте будем распределять деньги по отношению насколько одна бумага обгонит другую, скажем если первая взлетела на 10%, а вторая на 5%, то мы по какой-нибудь формуле будем считать наше распределение и получим 0.75 и 0.25 соответственно. 

Так что не так с этой оптимизацией?
avatar
CloseToAlgoTrading, с этой оптимизацией не так что это тупо подгонка под историю. Надо оставлять несколько лет форвард теста — без оптимизации… По ним смотреть как оно работает без оптимизации, это будет ближе к реальным результатам и по этим годам можно делать выводы, а не по времени под которое велась оптимизация. Что тут непонятного?
avatar
Laukar, Давайте еще раз, вас наверное сбивает столку слово оптимизация, мы можем заметинь его на метод или модель распределения средств по активам (оно у меня там так и зоветеся allocation model). Тут нет никакой оптимизации в плане подгонки параметров под историю или что то такого где нужно было бы проводить такого рода тестирование. У вас есть метод который получает на вход исторические данные за некоторый период и выдает распределение денег по бумагам. Как вы себе представляете пропустить 4 года? 

avatar
Laukar, Что-то же ты оптимизировал.

Посмотрите, так сказать самую известную теорию

ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%82%D1%84%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B8%D1%86%D0%B0
avatar
Laukar, Я подогнал стратегию по количеству акций и срокам пересмотра и т.д.

Речь идет немного о другом. 
avatar
$🍋 — 🦸‍♂️, доброй ночи :). Вы имеете ввиду в целом или конекретно о про именно этот пост. 
Если говорить вообще о том, о чем пишу, то да, применяю на живых деньгах, но пока ничем сверхвыдающимся похвастаться не могу… но и стоит заметить я никому ничего не продаю, да и ничего не навязываю..
Если конкретно про данный пост, то нет, именно в таком виде, никогда не применял… но может стоит и попробовать :)
avatar
$🍋 — 🦸‍♂️, На данный момент у меня нет полностью автоматических систем… Да и я не заморачиваюсь в плане полного соответствия тестов и реального поведения рынков. Скажем так… если портфель не просел… уже хорошо :).
Раньше я это делал, но почему то в моем случае это всегда ведет к переусложнению как идеи так и реализации… что приводит к игнорированию рискменеджмента, который изначально был заложен в идеи.

Ну и конечно же спред (более актуально для внутредневных систем), т.е. исполнение заявки на малоликвидных инструментах или же на открытии рынка.


avatar
CloseToAlgoTrading, а на нашем рыночке тестипровали? Вроде как у нас варианты моментума работают не хуже, если не лучше.Интересно было бы узнать результаты тестов на ММВБ.Если конечно проводили.
ВОобще интересные вариации обыгрывания моментума)
avatar
matroskin, к сожалению нет, у меня нет доступа к ММВБ :).
avatar
CloseToAlgoTrading, хм… ну в свете последних событий, может и к счастью)))Спасибо за исследование!
avatar
matroskin, а так вы же сами можете попробовать, возьмите данные поменяйте на свои только. Код пока еще весь рабочий :))
avatar
CloseToAlgoTrading, я пока что с питоном на уровне того что змея такая есть)))
Шучу)Но пробел у меня тут серьезный, как раз в планах его устранить.Я по старинке лапками тестирую((
avatar
Модификацию foolish four тут вижу я. Стратегия считается невалидной на данный момент.

P.S. почему бы просто не покупать s&p500?
avatar
Evgeny Baranov, ээм… ну врядли это модификация какой либо стратегии, ибо это же базовая стратегия на моментуме, а их множество, ибо само понятие моментума очень гибкое. 

Так, видно же, что любой выбор акций опережает индекс. Вот и ответ, доходность много выше, при таком же риске или даже меньшем.
avatar
CloseToAlgoTrading, может опережаеть индекс в любом направлении, стоит упомянуть ) но это тоже не точно.
avatar
судя по экспоненте тест был с рефинансированием… надо тестить на постоянной сумме… тогда можно сравнивать с индексом… успехов
avatar

теги блога CloseToAlgoTrading

....все тэги



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