Алгоритмы алгоритмической торговли

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

Чаще всего крупный родительский ордер (parent order) делится на более мелкие ордера (child orders) и эти мелкие ордера отправляются один за одним на рынок для исполнения. Алгоритмический движок (algo engine) следит за исполнением каждого мелкого ордера и в определенных случаях отменяет какой-то из них и выставляет новый child order с другими параметрами в соответствии с выбранным алгоритмом, который называют еще стратегией (strategy).

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

Time Weighted Average Price (TWAP, Clock, Slicer)

Самый простой алгоритм исполнения: ордер просто делится на равные части и каждая из частей высылается на рынок через определенный промежуток времени. Например, если объем родительского ордера (parent order) составляет 999.999 акций, и ордер делится на три части, то каждая из частей (child order) будет равна 333.333 акций, которые будут выставляться, скажем, в начале каждого часа торговой сессии: в 12:00, в 13:00 и в 14:00.

Алгоритм TWAP — первый алгоритм, появившийся на заре алгоритмической торговли. Первый, самый примитивный, наивный и самый интуитивно понятный. Главная проблема этого алгоритма в том, что при делении ордера любого объема на равные части, не учитываются никак объемы торгов в эти промежутки времени. Конечно, выставить на продажу три части по 333.333 акции лучше, чем вывалить на рынок за раз сразу весь объем в 999.999 акций. Но, если исторически объем торгов в этот период составляет 660.000 акций, один ордер на продажу 333.333 акций составит 50% объема торгов, и это конечно вызовет переизбыток предложения и сдвинет рыночную цену акции.

Еще один недостаток этого алгоритма — его предсказуемость. При анализе движения ордеров в биржевой книге ордеров можно вычислить робота, выставляющего ордера по TWAP, и попытаться «обыграть» (gaming) его, заставляя совершать сделки по невыгодной для него цене. Разработчики алгоритмических движков давно знают об этой проблеме и стараются вносить элемент случайности — например выставлять ордера не точно в определенное время, а, скажем, плюс-минус 10 секунд.

Percentage of Volume (POV)

Алгоритм POV исполняет ордер с учетом исторических объемов торгов в каждый промежуток времени торгового дня, т.е. он более продвинут, чем TWAP, и значит более «интеллектуален».

Например, известно что во время торгового дня исторически, скажем, за последние 20 торговых дней, объем торгов составляет 3 миллиона акций с 12:00 до 13:00, 4 миллиона акций с 13:00 до 14:00, 6 миллионов акций — с 14:00 до 15:00.

Соотношение 3:4:6 приводим к процентам. Берем общий знаменатель: 3 + 4 + 6 = 13 и делим 3/13 =  0.23…; 4/13 = 0.307…; 6/13 = 0.46. Получается, наш большой родительский ордер надо поделить на три части и 23% ордера продать в период с 12:00 до 13:00, 31% — с 13:00 до 14:00 и остальные 46% — с 14:00 до 15:00.

Volume-weighted Average Price (VWAP)

Алгоритм VWAP получает некое значение VWAP в качестве параметра. Значение VWAP берется из истории торгов, скажем, за предыдущие 20 торговых дней. Строится кривая изменения VWAP (VWAP curve), отражающая среднее изменение цены и объемов сделок в течение усредненного торгового дня. Алгоритм делит по этой кривой крупный ордер на неравные части и в зависимости от размера части выставляет цену.

Цель алгоритма — исполнить ордер не хуже, чем заданное значение VWAP, т.е. не хуже, чем средневзвешенная цена за указанный исторический период. По сути алгоритм оценивает качество работы трейдера (и алгоритма, если ордер исполнялся алгоритмически), но не оценивает исполнение ордера экономически. Так, ордер может исполниться в полном соответствии с VWAP curve, как это требовалось от алгоритма, но при этом принести убытки клиенту.

Arrival Price

Алгоритм Arrival Price пытается исполнить ордер по цене, которая была лучшей на момент начала работы алгоритма. Скажем, алгоритм начинает исполнять приказ на продажу 1.000.000 акций в 11:00 торгового дня. В этот момент времени цена покупки (ask, offer, sell price) акций компании ABC, составляет 100 у.е. Значит алгоритм будет пытаться выставлять акции ABC на продажу по этой цене и не ниже. Скажем, покупатели что-то почуяли и решили сбить цену, отменив свои ордера на покупку за 100, и выставив ордера с другой ценой, скажем, 98. Если алгоритм видит, что цена опускается ниже, он перестает выставлять child orders и ждет, когда цена покупки снова вернется к 100 у.е. В каких именно объемах и в какие моменты времени Arrival price выставляет ордера, несущественно. Его главный ориентир — цена, его главная задача — продать не ниже этой цены (или купить не выше этой цены).

Implementation Shortfall (IS)

Алгоритм аналогичный Arrival price называется Implementation Shortfall. Когда владелец портфолио формирует ордера на продажу и покупку он оценивает результат операции по ценам, которые видит в данный конкретный момент (decision price). Но в реальности ордера могут исполниться по другой цене (execution price) (большей или меньшей от ожидаемой). Эта разница называется implementation shortfall. И в идеале, конечно, владельцу портфолио хотелось бы, чтобы эта разница была по-меньше. Алгоритм, который пытается свести эту разницу к минимуму потому и называется Implementation Shortfall.

Market-On-Close (MOC)

Последняя цена торгового дня (close price) является ориентиром, по которому обычно каждый день делаются пересчёт (mark-to-market) позиций (например, для margin call) и портфелей акций институциональных инвесторов. При закрытии рынка в последние его минуты всегда вырастает объем торгов, так как крупные инвесторы пытаются купить-продать акции именно по цене закрытия.

Различные параметры алгоритмов

При исполнении ордера с помощью алгоритмического движка помимо выбора собственно стратегии (алгоритма) исполнения, обычно задают еще некоторые параметры, которые в какой-то степени влияют на то как именно будет исполняться выбранный алгоритм.

Время начала, время конца (strat time, end time)

Определяет, когда именно алгоритм должен отправить свой первый child-ордер на рынок, и когда он должен закончить исполнение ордера. По умолчанию исполнение начинается с началом торговой сессии и заканчивается в момент ее окончания.

Скорость (Speed, Velocity)

Параметр Speed задает скорость, с которой алгоритмический движок должен исполнить ордер. Например,  если в параметрах времени задан только параметр начала исполнения, а параметр окончания — не задан.

Агрессивность (Aggressive/Passive)

Параметр определяет, как именно алгоритм должен выставлять child-ордера: только пассивные лимитные или вы разрешаете ему выставлять лимитные с переходом спреда (bid/ask spread). Скажем, вы выставили параметр пассивный. Тогда, алгоритм будет ставить ордера в пассивной части книги лимитных ордеров и ждать, когда противоположная сторона вступит с этим ордером во взаимодействие. Если же вы разрешили агрессивное поведение, то алгоритм сам будет вступать во взаимодействие с ордерами противоположной стороны, если они соответствуют всем критериям алгоритма.

Что делать, когда весь ордер не успевает исполниться?

Одни алгоритмы гарантируют исполнение ордера, другие — не гарантируют, если параметры исполнения, выбранные клиентом, мешают исполнить ордер за отведенное время. Этот параметр определяет поведение алгоритма в том случае, если срок исполнения родительского ордера (parent order) истекает, а ордер еще не до конца исполнен и скорей всего не будет исполнен в ближайшее время. Например, была выбрана слишком низкая цена для покупки, рынок ушел на повышение цены и скорей всего оставшаяся часть ордера не будет исполнена по выбранной цене. В таком случае вы можете задать алгоритму, например,

  • прекратить исполнение и оставить все как есть или
  • начать действовать более агрессивно с лимитными ордерами или
  • остаток ордера исполнить по рыночной цене.

Прочие параметры

Разные брокеры примешивают свои параметры к стандартным алгоритмам, пытаясь таким образом переманить клиентов от конкурентов, обещая клиентам более качественное исполнение их ордеров благодаря этому «секретному соусу».

Выводы

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

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s