Трейдеры, которые приобрели мою программу robot_uralpro, спрашивают, можно ли доработать алгоритм для применения его на современном рынке? Напомню, стратегия робота основана на взаимоотношении цен синтетического индекса, составляемого динамически из рыночных цен акций, входящих в индекс РТС, и фьючерса RI. Идея "одноногого" статистического арбитража, реализованного в роботе, будет работать и сейчас, только в том случае, если научиться правильно определять, какой актив опережает другой в смысле динамики их цен. Эта статья посвящена правильному выявлению такого взаимодействия, которое в англоязычных источниках называется "lead-lag relationship" -опережение-отставание между разными активами.
Те алготрейдеры, кто не приобретал robot_uralpro, тоже сочтут эту статью полезной, так как lead-lag relationship может использоваться в стратегиях парного трейдинга и им подобным. Например, определив такое взаимодействие, можно исключить из парного трейдинга один из активов ( с учетом того, конечно, что отношение торгуемых инструментов было описано четкой моделью) и значительно увеличить тем самым прибыльность стратегии.
Могу сразу отметить, что на современной бирже в большинстве случаев изменение цены фьючерса в направлении последующего движения рынка происходит раньше, чем изменение значения синтетического индекса. Объясняется это тем, что фьючерс торгуется активнее, его волатильность больше, порог входа меньше. Однако это знание ничего не дает в плане построения алгоритма, потому что нам надо точно определить, когда эти случаи происходят, сколько времени длятся, и когда все-таки индекс начинает идти вперед. Обычно для этого предлагается использовать кросс-ковариацию приращений цен активов, получаемую путем расчета ковариации, когда выборка приращений цен одного из активов сдвинута во времени на некоторую величину , называемую лагом:
, где
- кросс-ковариация для лага k;
- текущие приращения цен первого и второго активов.
Если кросс-ковариация положительна при положительном k, то делается вывод, что актив q опережает актив p, если кросс-ковариация положительна при отрицательном k, то актив p опережает актив q.
Однако правильное вычисление кросс-ковариации возможно, если данные о приращении цены поступают через равные интервалы времени t и не содержат пропусков . Ни то, ни другое условие не выполняется для высокочастотных данных, которые требуются для HFT и просто intraday алгоритмов. Обычно эту проблему решают так - разбивают выборку на равные интервалы и если между ними не происходило изменение цены, то полагают приращение цены равным 0. Это приводит к сильной зависимости ковариации от частоты разбиения и в общем к неправильному ее вычислению в динамическом режиме. Кроме того, ковариация зависит и от величины приращения цен, что в случае большой разницы между ценами активов, также приводит к неверным результатам.
Более точный подход к определению lead-lag relationship предлагают авторы работы "Intraday Lead-Lag Relationships between the Futures-, Options and Stock Market". Для получения правильного значения кросс-ковариации берутся приращения цен, взятые между двумя наблюдениями , между которыми может быть более одного изменения цены. Рассмотрим всю процедуру вычисления более подробно.
Обозначим наблюдения цены индексом i, цены индексом j, и общее число наблюдений N и M соответственно. Разница между двумя разными уровнями цены может быть записана как сумма приращений ненаблюдаемого процесса изменения цены в интервале между наблюдениями:
где означает временную метку i-го наблюдения. Кросс-произведение приращения цен между двумя активами запишем как:
Математическое ожидание этого кросс-произведения есть линейная комбинация кросс-ковариаций:
и это выражение зависит от наблюдаемых моментов времени . Далее обозначим число раз, когда появляется в выше приведенном выражении:
.
Важной особенностью является то, что эти значения зависят только от моментов времени наблюдаемых изменений цены и не зависят от цены активов. Таким образом,мы можем записать как линейную комбинацию ковариаций :
Вышеприведенное выражение может рассматриваться как выражение регрессии с неизвестными кросс-ковариациями в виде параметров и коэффициентами в виде объясняющих переменных. В векторной записи:
.
Таким образом, кросс-ковариации могут быть вычислены методом наименьших квадратов по наблюдениям и рассчитанным значениям .
В рассмотренном методе могут быть использованы любые интервалы между наблюдаемыми ценами, в зависимости от требуемой вами частоты сделок. Также достаточно ограничиться интервалами, где , где К - максимальный требуемый лаг.
В заглавии поста приведен график кросс корелляции между приращениями цены индекса AEX амстердамской биржи и фьючерса на этот индекс. Минимальный шаг лага k взят равным пяти минутам. Максимальное значение K=6, то есть приращения цен измеряются внутри пересекающегося интервала длительностью 30 мин. Из этого графика видно, что на интервалах от 0 до 15 минут фьючерс опережает индекс с максимальным значением корреляции в районе 5 мин.
Кстати, очень перспективно выявления lead-lag relationship между фьючерсом и его опционами. Кто сможет правильно произвести все вычисления, получит очень интересный алгоритм статистического арбитража.
Также дам рекомендацию тем, кто улучшает алгоритм robot_uralpro. Не стремитесь к очень высокой частоте сделок, увеличьте немного интервалы расчетов, там уйдут многие микроструктурные особенности, которые и не учитывались в 2010 году этой стратегией, но имеют сильное влияние сейчас. Это значительно облегчит вашу работу. Но помните, что слишком большой интервал между сделками тоже приведет к уменьшению статистической достоверности. По моим испытаниям этого алгоритма в тестировании на современных данных выходило около 500 сделок в день при объеме 5 контрактов RI, ориентируйтесь на это значение.
Поясните причину выбора расчета кросс-ковариации именно к приращениям цены, а не к самим ценам. Сам всегда считал лаги без приращений и до сих пор не могу понять повсеместное использование ценовых приращений.
Насчет зависимости расчетов от квантования рядов. Возможно, стоит посмотреть в сторону независимых от квантования алгоритмов сравнения. Когда первый цВР остается неизменным. А второму цВР в качестве на выходе дается вектор "масштабов времени".
Ну выбор сделали авторы статьи. Я тоже согласен с эти выбором в рамках стратегии робота - алгоритм реагирует именно на приращения, поэтому логичней искать ковариацию приращений, так как нужно оценить опережающий импульс одного из активов.
Помню ваши статьи еще на Русском трейдере, по-моему. Очень были интересными, я даже что-то в роботах использовал. Не хотите на этом сайте что-то разместить из нового? Было бы здорово.
Растут две бумаги, одна растёт быстрее другой, в таком случае в кросковариации будет кумулятивно накапливаться ошибка расчёта.
разница нивелирует влияние трендов, которые приводят к ошибкам в расчёте кросковариации.
Читал эту статью год назад, но так и не разобрался. Сейчас вторая попытка )))
Если я правильно понял, то Xij считается исходя из длины интервала между наблюдениями.
Например, первое наблюдение в 0 секунд, второе 10 секунд, лаг 2.
Тогда Xij = max(0, min(10, 10+2) - max(0, 0+2)) = 8;
Получается, что у нас этот коэффициент постоянный? Или я ошибаюсь и неправильно понимаю смысл этого коэффициента?
Или эти периоды должны быть разными?
Очень интересно написано, спасибо. Тем не менее не понял основную идею: В статье указано, что в большинстве случаев изменение цены фьючерса опережает изменение индекса. Однако в конце ("500 сделок в день при объеме 5 контрактов RI" ) следует что торгуется все таки фьюч. На основании какой идеи расчитывается точка входа?
Это зависит от выбранного инструмента. На некоторых базовый актив опережает фьючерс, на некоторых наоборот. Иногда бывает, что в какие-то периоды фьючерс идет вперед, а в другие периоды - базовый актив. Для этого и нужно динамически определять, кто лидирует в настоящий момент