uralpro
uralpro личный блог
16 апреля 2015, 10:22

Модернизация стратегии robot_uralpro. Lead-lag relationship

108

Трейдеры, которые приобрели мою программу robot_uralpro (см. пост на смарт-лабе), спрашивают, можно ли доработать алгоритм для применения его на современном рынке? Напомню, стратегия робота основана на взаимоотношении цен синтетического индекса, составляемого динамически из рыночных цен акций, входящих в индекс РТС, и фьючерса RI. Идея «одноногого» статистического арбитража, реализованного в роботе, будет работать и сейчас, только в том случае, если научиться правильно определять, какой актив опережает другой в смысле динамики их цен. Эта статья посвящена правильному выявлению такого взаимодействия, которое в англоязычных источниках называется «lead-lag relationship» -опережение-отставание между разными активами.

Те алготрейдеры, кто не приобретал robot_uralpro, тоже сочтут эту статью полезной, так как lead-lag relationship может использоваться в стратегиях парного трейдинга и им подобным. Например, определив такое взаимодействие, можно исключить из парного трейдинга один из активов ( с учетом того, конечно, что отношение торгуемых инструментов было описано четкой моделью) и значительно увеличить тем самым прибыльность стратегии.

Могу сразу отметить, что на современной бирже в большинстве случаев изменение цены фьючерса в направлении последующего движения рынка происходит раньше, чем изменение значения синтетического индекса. Объясняется это тем, что фьючерс торгуется активнее, его волатильность больше, порог входа  меньше. Однако это знание ничего не дает в плане построения алгоритма, потому что нам надо точно определить, когда эти случаи происходят, сколько времени длятся, и когда все-таки индекс начинает идти вперед. Обычно для этого предлагается использовать кросс-ковариацию приращений цен активов, получаемую путем расчета ковариации, когда выборка приращений цен одного из активов сдвинута во времени на некоторую величину, называемую лагом:

\gamma(k)=cov(\Delta p_t,\Delta q_{t-k}), \;\Delta p_t=p_t-p_{t-1}, \Delta q_t=q_t-q_{t-1}, где

γ(k)- кросс-ковариация для лага k;

\Delta p_t,\Delta q_t — текущие приращения цен первого и второго активов.

Если кросс-ковариация положительна при положительном k, то делается вывод, что актив q опережает актив p, если кросс-ковариация положительна при отрицательном k, то актив p опережает актив q.

Однако правильное вычисление кросс-ковариации возможно, если данные о приращении цены поступают через равные интервалы времени t и не содержат пропусков. Ни то, ни другое условие не выполняется для высокочастотных данных, которые требуются для HFT и просто intraday алгоритмов. Обычно эту проблему решают так — разбивают выборку на равные интервалы и если между ними не происходило изменение цены, то полагают приращение цены равным 0. Это приводит к сильной зависимости ковариации от частоты разбиения и в общем к неправильному ее вычислению в динамическом режиме. Кроме того, ковариация зависит и от величины приращения цен, что в случае большой разницы между ценами активов, также приводит к неверным результатам.

Более точный подход к определению lead-lag relationship предлагают авторы работы "Intraday Lead-Lag Relationships between the Futures-, Options and Stock Market". Для получения правильного значения кросс-ковариации берутся приращения цен, взятые между двумя наблюдениями, между которыми может быть более одного изменения цены. Рассмотрим всю процедуру вычисления более подробно.

Обозначим наблюдения цены pt индексом i, цены qt индексом j, и общее число наблюдений N и M соответственно. Разница между двумя разными уровнями цены может быть записана как сумма приращений ненаблюдаемого процесса изменения цены в интервале между наблюдениями:

p_{t_{i+1}}-p_{t_i}=\sum_{t=t_i+1}^{t_{i+1}}\Delta p_t

где ti означает временную метку i-го наблюдения. Кросс-произведение приращения цен между двумя активами запишем как:

y_{ij}=(p_{t_{i+1}}-p_{t_i})(q_{t_{j+1}}-q_{t_j})=\sum_{t=t_i+1}^{t_{i+1}}\Delta p_t\sum_{t=t_j+1}^{t_{j+1}}\Delta q_s

Математическое ожидание этого кросс-произведения есть линейная комбинация кросс-ковариаций:

E(y_{ij}|t_i,t_j,t_{i+1},t_{j+1})=E(\sum_{t=t_i+1}^{t_{i+1}}\Delta p_t\sum_{t=t_j+1}^{t_{j+1}}\Delta q_s)=\sum_{t=t_i+1}^{t_{i+1}}\sum_{t=t_j+1}^{t_{j+1}}\gamma(t-s)

и это выражение зависит от наблюдаемых моментов времени(t_i,t_j,t_{i+1},t_{j+1}). Далее обозначим xij(k) число раз, когда γ(k) появляется в выше приведенном выражении:

x_{ij}(k)=\max(0,\min(t_{i+1},t_{j+1}+k)-\max(t_i,t_j+k))

Важной особенностью xij является то, что эти значения зависят только от моментов времени наблюдаемых изменений цены(t_i,t_j,t_{i+1},t_{j+1})и не зависят от цены активов. Таким образом, мы можем записать E(yij) как линейную комбинацию ковариаций γ(k), k=−K...K:

E(y_{ij}|x_{ij})=\sum_{k=-K}^K x_{ij}(k)\gamma(k)

Вышеприведенное выражение может рассматриваться как выражение регрессии с неизвестными кросс-ковариациями γ(k) в виде параметров и коэффициентами xij в виде объясняющих переменных. В векторной записи:

y_{ij}=x_{ij}^{`}\gamma+e_{ij}

Таким образом, кросс-ковариации могут быть вычислены методом наименьших квадратов по наблюдениям yij и рассчитанным значениям xij.

В рассмотренном методе могут быть использованы любые интервалы между наблюдаемыми ценами, в зависимости от требуемой вами частоты сделок. Также достаточно ограничиться интервалами, где|t_{i-1}-t_j|\geq K,|t_i-t_{j+1}|\geq K, где К — максимальный требуемый лаг.

В заглавии поста приведен график кросс корелляции между приращениями цены индекса AEX амстердамской биржи и фьючерса на этот индекс. Минимальный шаг лага k взят равным пяти минутам. Максимальное значение K=6, то есть приращения цен измеряются внутри пересекающегося интервала длительностью 30 мин. Из этого графика видно, что на интервалах от 0 до 15 минут фьючерс опережает индекс с максимальным значением корреляции в районе 5 мин.

Кстати, очень перспективно выявления lead-lag relationship между фьючерсом и его опционами. Кто сможет правильно произвести все вычисления, получит очень интересный алгоритм статистического арбитража.

Также дам рекомендацию тем, кто улучшает алгоритм robot_uralpro. Не стремитесь к очень высокой частоте сделок, увеличьте немного интервалы расчетов, там уйдут многие микроструктурные особенности, которые и не учитывались в 2010 году этой стратегией, но имеют сильное влияние сейчас. Это значительно облегчит вашу работу. Но помните, что слишком большой интервал между сделками тоже приведет к уменьшению статистической достоверности. По моим испытаниям этого алгоритма в тестировании на современных данных выходило около 500 сделок в день при объеме 5 контрактов RI, ориентируйтесь на это значение.

Другие алгоритмы, применяемые в алгоритмической торговле и биржевых роботах смотрите в моем блоге и на сайте.

32 Комментария
  • >Трейдеры, которые приобрели мою программу robot_uralpro
    ----
    Такие есть?? :)
  • а по делу, странно что Голдманы не купили алгоритм. Я бы на вашем месте им предложил. Они его подсовершенствуют под большие объемы, уверен.
  • Сергеев Петр
    16 апреля 2015, 11:09
    Мне кажется, у Вас в формулах есть «помарка»

    Разность Pt(i+1) — Pt(i) а не Pt(i-1) — Pt(i)
      • Сергеев Петр
        16 апреля 2015, 12:11
        uralpro, только я опять не понимаю, соседние наблюдения мы берем через фиксированный интервал времени или как разницу между соседними тиками? Посмотрите, тоже ли это самое что и SCX вот здесь: www.datatime.eu/public/gbot/MetricsForAlgorithmicTrading.htm?
          • Сергеев Петр
            16 апреля 2015, 13:20
            uralpro, то есть разницу между двумя соседними «разными» ценами мы рассматриваем как сумму разниц между соседними тиками? а Xij обозначает число произведений разниц между соседними тиками? И дальше уже определяем ковариацию из регрессии? С этими обозначениями мозг сломаешь пока допрешь!
  • SergeyJu
    16 апреля 2015, 12:04
    Если у меня есть два ряда с частым, но асинхронными и иррегулярными точками получения данных, почему нельзя с помощью какого-нибудь простого алгоритма интерполяции получить два синхронных потока с равномерным во времени взятием отсчетов?
    Это же проще и, почти наверное, не хуже, а то и лучше.
      • Marco
        16 апреля 2015, 12:48
        uralpro, а зачем с асинхронными данными работать, если можно цены синхронно считать по серединам стаканов?
        • SergeyJu
          16 апреля 2015, 12:48
          Marco, кстати, да.
          • SergeyJu
            16 апреля 2015, 15:01
            uralpro, любое квантование во времени чревато или пропусками, если оно медленнее процесса, или повторением (нулевым приращением), если быстрее. От этого не уйти в принципе. Вопрос, как всегда, в уровне и статистических свойствах шума, которое порождается тем или иным алгоритмом квантования.
      • SergeyJu
        16 апреля 2015, 12:48
        uralpro, Вы пропустили ключевое слово ИНТЕРПОЛЯЦИЯ
          • SergeyJu
            16 апреля 2015, 14:56
            uralpro, так ведь и описываемая Вами методика по сути интерполяция, только выраженная неявно.
              • SergeyJu
                16 апреля 2015, 19:37
                uralpro, да, я писал именно об интерполяции входных данных. Это технически (и вычислительно) гораздо более простой (прямой) подход, чем интерполяция, замаскированная хитрыми статистиками и оптимизациями.
                В каком диапазоне задержек Вы оцениваете, кто кого опережает,
                минуты, как у автора, или секунды или миллисекунды?
  • vlad1024
    16 апреля 2015, 13:30
    Спасибо, про интересные вещи пишите, поймал себя на мысле почитав ваш блог, что занимался тем же самым лет 5 назад, и натыкался примерно на то же самое, но все равно есть местами что-то новое. Хотя сейчас все это как-то прошло, со временем математика «потеряла свою магию», в основном видешь одни и теже шаблоны, одни и те же ошибки, одни и те же «бреши» моделей.
      • vlad1024
        16 апреля 2015, 14:19
        uralpro, вам какой ответ больше нужен, философский или практический?

        Практический, меньше математики больше «инженерного» подхода, почти всегда когда виден лес формул, есть чисто «инженерный» способ, который делает тоже самое или почти тоже самое и при этом интуитивно понятен. «Всё следует упрощать до тех пор, пока это возможно, но не более того.»

        Философский, рынки стремятся к эффективности то что кто-то зарабытывает на рынке, это не их «победа», а чья-то недоработка. Соответственно, есть две ветки развития «оптимизация скорости» и «оптимизация интелекта». «Оптимизация интеллекта» означает, что нужно уметь делать эффективный ресёч. Мастерство как и в любом деле имеет несколько градаций, которые и определяют некоторый возможный путь:
        1. «Подражательство», взял книжку, статью, прочитал что там написанно, воспроизвел, не разобравшись откуда это все взялось, как автор к этому пришел, какие предпосылки и идеи заложил в основу.
        2. «Рождение понимания», способность «гнуть» модели, понимание предпосылок которых в них заложены, понимание как изменение тех или иных предпосылок влияет на модель, способность «пересобрать» модель изменяя предпосылки или добавляя новые.
        3. «Мастер», когда и формул чаще всего писать не надо, достаточно предпосылок и идей, все остальное и так становится понятно.

        Каждая серьезная «брешь» в модели, это с одной стороны возможность манипулировать некоторой «популяций ботов» построенных по этой модели, с другой это возможность ее улучшить и оторваться от преследователей-«подражателей».
          • vlad1024
            16 апреля 2015, 14:46
            uralpro, Да это понятно, что без понимания никуда. Просто те модели, что есть в открытом доступе, можно максимум использовать как начальную точку для пути(хотя и это уже очень неплохо, по крайней мере не пересечение двух мувингов), идеи которые в них заложены относительны просты, и надо пройти длинный путь прежде чем довести их до состояния «зарабатывать деньги» на «эффективном» рынке, некоторые из них окончатльно ушли в состояние «битва за скорость». Хочется какого-то креатива, а не просто двух идей, на которые навернули тонну мат-аппарата, временами абсолютно бессмысленного, в этом мне кажется основная опасность попасть в ловушку «магии математики». В общем движение в сторону креатива на уровне идей, это тоже один из выходов из тупика «эффективного рынка».
  • Макс
    16 апреля 2015, 17:59
    Если в оригинале робот торговал одной ногой — Ri, то в в данной статье вы предлагаете методику по которой можно в рамках той конструкции подобрать что-то из голубых фьючей для торговли?
    Просто я последнее время ковыряю в этом направлении, но пока вижу что инструменты стянуты весьма плотно. Осознавая глубину подхода (математическую сторону) хотя бы на примере ваших публикаций, я пока прихожу к неутешительным выводам что заработать там очень непросто, по крайней мере такими прямолинейными безрисковыми стратегиями. При интенсиности сделок 500 в день и целевой доходности 100-150% (что очень мало) — комисси, вероятно, занимают ключевую роль. Вероятно настолько ключевую, что отсутствие брокерских комиссий является обязательным условием.
      • Макс
        17 апреля 2015, 03:04
        uralpro, спасибо за пояснения. Да я примерно о том и говорю — что брокерской комисии нет (безлимит) у тех кто совершает тысячами, только биржевая. Более того — у тех кто является маркетмейкером — интересно, биржа ведь не берет комисии за сделки по другим стратегиям в котируемых инструментах?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн