Блог им. AdrenaLeen

Торговая стратегия для коинтегрированных пар: результаты бэктестов за 2017 год на Мосбирже

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

Торговая стратегия

Допустим, у нас есть коинтегрированная пара акций, X и Y, а также цены этих акций за некий период времени 0,...,T. Для примера возьмём пару акций с тикерами (MSNG,MRSB). Для неё у нас есть данные о ценах за 252 торговых дня.

Первую половину наблюдений мы будем использовать, чтобы определить параметры торговой стратегии. Затем, основываясь на найденных параметрах, мы возьмём вторую половину наблюдений и проведём бэктесты, то есть протестируем, принесёт ли нам такая стратегия деньги.

Для дальнейших рассуждений нам понадобится спред двух акций. В нашем примере с парой (MSNG,MRSB) мы уже находили спред в блог-посте про коинтеграцию, так что здесь я просто продублирую картинку.
Торговая стратегия для коинтегрированных пар: результаты бэктестов за 2017 год на Мосбирже
Все мы хотим покупать дёшево и продавать дорого. Если разность уходит ниже нуля, акция Y (MSNG) дешевле, чем акция X (MRSB). И, наоборот, если разность поднимается выше нуля, акция Y дороже, чем акция X (ну или X дешевле по сравнению с Y).

По сути, торговая стратегия состоит в том, чтобы купить акцию Y и продать акцию X в соотношении 1:β, если разность находится несколько ниже нуля (ниже линии G на рисунке ниже). Когда же разность возвращается обратно к нулю, нам нужно закрыть позицию, продав Y и купив X в том же соотношении. В этом случае мы получаем прибыль размера G.
Торговая стратегия для коинтегрированных пар: результаты бэктестов за 2017 год на Мосбирже
Здесь важно понимать, что у нас должна быть возможность продавать акции, которыми мы не владеем, то есть осуществлять короткую продажу (шорт). Также необходимо отметить, что не все брокеры включают возможность короткой продажи в стандартный пакет услуг, так что, возможно, вам придётся дополнительно обратиться к нему для расширения своих инвестиционных возможностей.

В общем, мы составляем портфель, который содержит одну длинную позицию (лонг) и одну короткую позицию (шорт), если разность пересекает некоторую линию G или уходит за неё в противоположную от нуля сторону. И мы закрываем все позиции, когда разность возвращается обратно к нулю.

Следующий вопрос, который возникает, — это «как найти значение G»?

Как найти значение G?

Вся матчасть представлена в статье на хабре. Здесь я лишь приведу реализацию в матлабе. Нам понадобится первая половина наблюдений, которую мы будем рассматривать как «историю».

T = length(testPrices);
half = round(T/2);
Для начала найдём среднее отношение Y и X для первой половины наблюдений:

sumRatio = 0;
for i = 1 : half
    sumRatio = sumRatio + testPrices(i,1) / testPrices(i,2);
end
r = sumRatio / half;
Для пары акций с тикерами (MSNG,MRSB) расчётное значение r=4,8548. Затем вычислим максимум абсолютного значения разности для первой половины наблюдений:

clear absspread
for i = 1 : half
    absspread(i,1) = abs(testPrices(i,1) - r * testPrices(i,2));
end
m = max(absspread);
Для пары акций с тикерами (MSNG,MRSB) расчётное значение m=0,3975. Теперь мы можем определить значение G путём перебора: возьмём некоторый процент от m и попробуем поторговать на «истории» при различных значениях этого процента, а затем выберем то значение, которое даст наибольшую прибыль. Это и будет искомое значение для линии G.

Для данной пары получилось, что G=0,159 (при 40% от m) даёт наибольшую прибыль.

Тестирование стратегии

После определения G торговая стратегия применяется ко второй половине наблюдений. При G=0,159 прибыль извлекается 4 раза. Другими словами, разность 4 раза перемещается от 0 до G и обратно. Обратите внимание, что реализация такой стратегии включает 8 сделок, так как для того, чтобы встать в позицию и выйти из неё, требуется совершить две сделки.

На рисунке ниже показаны все 8 моментов торговли.
Торговая стратегия для коинтегрированных пар: результаты бэктестов за 2017 год на Мосбирже
Прибыль, полученная здесь, составляет не менее 4G=0,636. Здесь используются цены закрытия вместо данных внутри дня, поэтому мы не «торгуем» в точках −G, 0 и G. Для данной пары доходность за 126 торговых дней составила 21,78% без учёта комиссий, объёма и пр. То есть это примерно 44,25% годовых по очень грубым прикидкам.

Всего на Московской бирже было протестировано 8287 пар. Там, если не считать нулевой прибыли, приблизительная годовая доходность при данной стратегии колебалась от 3% до 1226%.

Тестирование альтернативной стратегии

Вместо того, чтобы закрывать позицию, когда разность приближается к нулю, можно перевернуть позицию, когда разность достигает G на противоположной стороне от нуля. Предположим, что мы продали 1Y и купили 4,7796X, так как разность была больше G.

Теперь можно дождаться того момента, когда разность достигнет −G, купить 2Y и продать 2⋅4,7796X. В результате мы останемся с портфелем из длинной позиции размера 1Y и короткий позиции размера 4,7796X.

Такая стратегия в случае с рассматриваемой парой приводит к одной начальной сделке и трём сделкам, которые переворачивают позицию. Эти сделки представлены на рисунке.
Торговая стратегия для коинтегрированных пар: результаты бэктестов за 2017 год на Мосбирже
Обратите внимание, что прибыль от перевертывания позиции равна 2G=0,318, поэтому общая прибыль в данном случае составляет не менее 3⋅2G=0,954. Доходность за 126 торговых дней составила 27,36% без учёта комиссий, объёма и пр. То есть это примерно 55,59% годовых по очень грубым прикидкам.

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

Всего на Московской бирже было протестировано 8287 пар. Там, если не считать нулевой прибыли, приблизительная годовая доходность при данной стратегии колебалась от 5,67% до 1739,71%.
★7
22 комментария
Помогите понять вот это:
Всего на Московской бирже было протестировано 8287 пар. Там, если не считать нулевой прибыли, приблизительная годовая доходность при данной стратегии колебалась от 5,67% до 1739,71%. 
Вы перебрали все пары. Результат худшей пары это 5,67%, а лучшей 1739,71%?
avatar
Sergey Pavlov, да, не считая нулевой прибыли.
Ксения Кузнецова, это, конечно, неприличный вопрос, но как такое возможно, что нет ни одной убыточной пары?:)
avatar
Sergey Pavlov, я думаю, это можно объяснить тем, что в части пар есть открытые позиции. Возможно, когда они закроются, появятся убытки.
Ксения Кузнецова, в таком случае по окончанию теста нужно принудительно закрывать все открытые позиции. В противном случае результаты всегда будут завышены для стратегий типа mean-reversion.
avatar
Sergey Pavlov, хорошо. Спасибо, внесу это в бэктестер.
Вы коинтергацию оценивали за первые полгода или за год. Если за год, то это явная переподгонка.
avatar
Михаил, оценивала и за год, и за первые полгода. Коэффициент коинтеграции колебался не сильно. Ну а так да, вы правы, если считать за год, получается не вполне адекватная картина.

По-хорошему, коэффициент коинтеграции нужно считать сначала за первые полгода, а потом пересчитывать его после каждого «торгового дня» для имитации реальной торговли. У меня в планах реализовать это.
Очень красиво в своей простоте.
MRSB?  сегодня у нее прошло 13 (тринадцать) сделок с общим оборотом 133 тыс.руб. Такой шлак надо убирать из теста в самом начале исследования
avatar
wrmngr, и спрэд, чтобы зайти и выйти на 50 тысяч рублей 3%.....

Кстати, вопрос к исследователю. Какие получились средние сделки и по каким ценам они рассчитываются? Цены открытия?

И еще… бумагу MRSB в шорт вряд ли кто даст…
avatar
Sergey Pavlov, что значит «средние сделки»? Берутся цены закрытия.
wrmngr, да, у меня в планах прикрутить фильтр по объёму.
нормальная стратегия, рабочая вполне, вот только не на мосбирже) если вы введете в тестирование вероятность получить позицию по лучшей цене то в итоге будет хороший убыток учитывая что в большинстве инструментов спред в стакане больше годовой доходности по нему)) ну и действительно возьмите для правдоподобности хотя бы список маржинальных бумаг от финама чтоли
avatar
Spooke67, хорошо, спасибо за рекомендацию.
Ксения Кузнецова, интересно узнать что получилось в итоге у Вас, и какой результат реальной торговли если конечно вы решились после всех исследований торговать на реальных счетах? и еще тогда остался не заданным вопрос — как вы  приводите цены бумаг к аджастности т.е. дивиденды и прочие корп события о которых мы можем знать заранее и которые точно влияют на цены, учитывали ли вы это или нет?
avatar
Не увидел издержек по шортам и транзакционных издержек.  
avatar
SergeyJu, да, я в блог-посте сделала оговорку, что результаты не включают издержки. Реализация учёта издержек в планах.
Как обычно для такого рода статей, ничего не сказано о самой важной составляющей — стратегии выхода, если спред уходит в неожиданно большой минус.
Не учтена присадка в принципе, а ведь работать надо будет с плечом
Также не оценена степень подгонки на контрольной выборке. Выбирая одну стратегию из тысяч, вы делаете довольно мощную оптимизацию т.е. фактически обучаетесь на контрольной выборке.
avatar
ivanovr, помимо описанной в статье стратегии выхода, когда спред приближается к нулю, я дописала стратегию выхода, когда перестаёт наблюдаться свойство коинтеграции.

То есть сейчас на второй половине «ежедневно» проверяется наличие коинтеграции, и, если коинтеграция перестаёт наблюдаться, позиция закрывается.



Ксения Кузнецова, под стратегией выхода я имел в виду случай, когда спред неожиданно расширяется не в вашу пользу. Выход при нулевом спреде — это прибыльная позиция, а я про убытки.
avatar
ivanovr, ну я выше написала, что делать в случае, если спред уходит вниз, и пример привела. Там позиция закрывается в убыток.

теги блога Ксения Кузнецова

....все тэги



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