Обсуждение статьи "Статистический арбитраж на коинтегрированных акциях (Часть 2): Советник, тестирование и оптимизация"

 

Опубликована статья Статистический арбитраж на коинтегрированных акциях (Часть 2): Советник, тестирование и оптимизация:

В данной статье представлен пример реализации советника для торговли корзиной из четырёх акций компаний, котирующихся на Nasdaq. Сначала акции были отфильтрованы на основе тестов на корреляцию Пирсона. Затем для отфильтрованной группы была проведена проверка на коинтеграцию с помощью тестов Йохансена. Наконец, стационарность коинтегрированного спреда проверялась с помощью тестов ADF и KPSS. Здесь мы рассмотрим некоторые замечания по поводу этого процесса, а также результаты бэктестов после небольшой оптимизации.

Пьяница, собака и случайная прогулка*

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

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

Статистический арбитраж на коинтегрированных акциях (Часть 2): Советник, бэк-тесты и оптимизация


Автор: Jocimar Lopes

 

К чему все эти сложности?

dollarExposures[i] = MathAbs(weights_arr[i]) * price * baseLotSize;
...
double ratio = dollarExposures[i] / totalDollarExposure;
double targetDollarExposure = ratio * totalDollarExposure;
...
double lots = targetDollarExposure / price;

Это дает:

lots -> ratio * totalDollarExposure / price -> dollarExposures[i] / totalDollarExposure * totalDollarExposure / price -> dollarExposures[i] / price -> MathAbs(weights_arr[i]) * baseLotSize

Также ваши расчеты не совместимы с символами, котируемыми в валюте, отличной от валюты счета.