Инвестирование: оптимальное исполнение

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

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

Управляющие активами несут ответственность за средства и создают богатство, инвестируя их в нужные сектора экономики. Как правило, они владеют значительными суммами активов, некоторые из их сделок могут быть настолько большими, что они могут составлять большую часть среднего дневного объема (ADV) в данный день. Поэтому они не могут входить в такие сделки на покупку или продажу, не предвидя потенциального неблагоприятного движения цены на рынке

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

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

  • вверх для сделки на покупку
  • вниз для сделки на продажу.

Научная литература очень богата по этому вопросу и тщательно исследовала лучшие способы управления исполнением с как можно меньшим движением цены. Некоторые лидеры мнений установили ключевые результаты по этой теме: Альмгрен и Крис [1], Бушо [2] и Гатерал [3], вероятно, являются одними из первых.

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

Для этого я сделаю

  • обсудить головоломку исполнения, которой должен управлять брокер; При заключении сделки брокер должен мудро выбирать между ликвидностью и рыночным риском;
  • ввести время восстановления стакана как шаг дискретизации τ для исполнения торгов; время реконструкции книги заказов было введено Бушо [2] и будет полезно в математических описаниях;
  • Придерживайтесь практического подхода к математике: идея не загипнотизирует вас какими-то причудливыми алгебрическими или численными вычислительными трюками; Я хочу предоставить вам простое описание оптимальной торговли, и я считаю, что математика является лучшим инструментом для описания потоков, независимо от их природы (денежные потоки, потоки материи, потоки энергии и т. Д.).
    До тех пор, пока он остается простым.

Возможно, вам придется взять ручку и пройти по шагам. Но, ИМХО, оно того стоит…

行くぞ!

Головоломка с оптимальным исполнением

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

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

Отметок может быть сколь угодно много, но появились и стандартные.

Далее мы рассмотрим торговый период от t = 0 до t = T, цену актива p(t) в момент t и совокупный объем торгов на рынке V(t) с момента начала торговли его производным v(t).

  • Средневзвешенная цена по объему — ориентиром является средняя цена за торговый период, взвешенная по объему торгов за тот же период.
    Рассматривая цену, полученную за фактический объем торгов, брокер обеспечивает некоторый паритет с рыночной активностью.
    То, что делает рынок, — это то, что управляющие активами получают в качестве цены исполнения.

    Одно предостережение: для действительно крупных сделок этот ориентир не обязательно благоприятствует управляющим активами, поскольку на рынке может доминировать их собственная торговля. Таким образом, брокер может получить цену исполнения, очень близкую к VWAP, но управляющий активами потенциально потеряет часть своего богатства из-за возможного воздействия.
    Математически VWAP определяется выражением
  • Средневзвешенная цена по времени (TWAP) — ориентиром является средняя цена за торговый период.
    Этот эталон полезен в течение очень длительных периодов времени (когда торговля длится несколько дней или даже недель). По мере того, как время увеличивается, важность объемов при расчете VWAP уменьшается, и, в конечном итоге, имеет значение только подверженность рыночным движениям, вызванным волатильностью. Таким образом, VWAP становится TWAP. Несмотря на то, что этот эталон появляется в результате масштабирования VWAP, рыночная практика сделала его приемлемым эталоном для более коротких периодов времени. В конце концов, это очень быстрый способ отфильтровать волатильность от цены исполнения.

В базе данных разумных сделок VWAP и TWAP (см. Gatheral) было доказано, что форма абсолютного отклонения от начальной цены на протяжении всей сделки следует траектории, приведенной ниже.

Выше абсолютного отклонения от начальной цены (источник: Bouchaud [3]).

Эмпирически было обнаружено, что кривая I(Q) следует закону квадратного корня, такому, что

Закон квадратного корня о максимальном дефиците реализации (или пике кривой)

Это означает, что для разумных выполнений, сравниваемых с VWAP и TWAP, ожидается, что цена будет двигаться, несмотря ни на что. Амплитуда этого движения зависит только от ликвидности актива (волатильность σ и ADV). Поэтому управляющий активами всегда платит цену за исполнение, даже в хорошо выполненных сделках.

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

  • Дефицит реализации — начальная цена за торговый период является ориентиром.
    Как объяснялось выше, VWAP и TWAP могут нанести ущерб Управляющему активами. Сравнивая начальную цену, брокер обязан предложить наилучшую возможную производительность для управляющего активами. Используя начальную цену в качестве ориентира, брокер подвержен как влиянию, так и риску.

Время восстановления книги заказов

В Bouchaud [2] книги ордеров (OB) характеризуются их средней ценой, глубиной на bid и на ask, спредом и временем их реконструкции.

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

Я также должен упомянуть тик и лот (размер цены и размер объема), хотя это добавило бы ненужной сложности в мою презентацию. Просто имейте в виду, что он тоже есть!

Время восстановления является динамической характеристикой ликвидности. Он количественно оценивает время, необходимое для возвращения OB в стабильное состояние (определяемое спредом, равным его равновесному значению). Скажем, например, как показано на рисунке выше, что происходит событие, и три уровня OB исчерпываются на стороне спроса. Теперь у него новый спред, новая средняя цена и новые глубины. Но это не локальное равновесие, и в зависимости от рыночной конъюнктуры участники рынка могут выставлять новые ордера на аск, а также на бид (как показано на эскизе) или только на аск или только на бид. В конце концов, OB возвращается к примерно тому же спреду, но потенциально с новой глубиной и средней ценой.

Это время, необходимое для того, чтобы спред вернулся к своему равновесному значению, является временем реконструкции, и мы назовем его τ.

Контрольные показатели с дискретизацией по времени

Возвращаясь к нашим более ранним определениям VWAP и TWAP, теперь мы можем дискретизировать время реконструкции τ, так что T = Nτ .

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

Приведенные выше формулы становятся следующим образом:

Теперь в этой дискретной форме проще всего записать тесты как

с весами

Математика! ?️

На мой взгляд, математика не может быть правильно выведена без точного описания потоков. Для того, чтобы ожить, необходимо правильное понимание геометрии, необходимой для того, чтобы ожить (в некотором смысле…).

Здесь потоки будут потоками заказов и денежных средств по геометрии ОВ.

Общая формула торговых издержек

А ниже показано, как я их вижу.

Давайте потратим некоторое время на описание эскиза рисунка выше. На каждом торговом интервале длительностью τ, равном времени восстановления OB, ликвидность потребляется брокером вдоль глубины OB на стороне спроса (с этого момента мы будем предполагать сделку на покупку). Ликвидность может потребляться пассивно на стороне предложения, однако, чтобы иметь наиболее полную оценку затрат, лучше предоставить брокеру наиболее консервативный сценарий: агрессивную сделку.

На каждом торговом интервале n потребляется количество qn, представленное синими стрелками, вдоль распределения глубины fn(δ), представленного кривыми на рисунке. δ глубина от лучшего спроса.

Математически это сводится к рассмотрению того, что стоимость приобретения позиции получается из

Из-за общей стабильности OB в течение коротких промежутков времени справедливо предположить, что fn(δ) является константой времени n и, следовательно, равен f(δ) на всех торговых интервалах. Также с тех пор

Торговые издержки упрощаются до

и с изменением переменной χ = F(δ) мы получаем

Общая формула эффективности торговли

Эффективность торговли — это разница между торговыми издержками, гарантированными клиенту, и реализованными затратами. Используя формулы для общего эталона, мы получаем, что эффективность торговли равна

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

Предполагая, что спред постоянен на каждом торговом интервале (я мог бы упомянуть об этом факте ранее…), приведенная выше формула становится

Этот последний результат интересен.

(i) — В консервативной структуре существует несжимаемая отрицательная производительность из-за спреда.

(ii) — Если кто-то хочет полностью устранить рыночный риск, можно наивно установить торговую цель на каждом торговом интервале qn = ωnQ. В контексте бенчмарка IS это совершенно нелепо, поскольку можно было бы оказать максимальное влияние, торгуя всем с самого начала.
Для TWAP и VWAP это более разумно и снижает затраты до

Хотя эта формула довольно точна для TWAP, поскольку ωn является константой, равной 1/N, для VWAP эта производительность не является точной, поскольку ωn является случайным, и все, что можно сделать до торгового интервала n, — это предоставить оценку, которая будет более или менее точной.

Дело о TWAP

Для TWAP торговые показатели составляют

и, таким образом, оптимальный горизонт может быть получен как

и полученный из

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

Который устанавливает цену сделки на уровне минимум

В течение срока, установленного управляющим активами, цена в бипах составляет просто

Дело о VWAP

Общая формула минимальной цены в б.. VWAP:

и выполняется асимптотически (когда стремится к бесконечности), если оценка ωn несмещена. В случае biais (что означает, что брокер систематически отклоняется на фиксированную стоимость) минимальная цена должна быть

если цена следует за случайным блужданием.

Для получения оптимального горизонта выполнения необходимо вычислить профиль объема (ωn). Однако идея та же, и в конечном итоге минимум приведенного ниже уравнения должен быть найден для N.

Предполагая, что была вычислена соответствующая оценка ωn.

Случай ИГ

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

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

Торговая эффективность для бенчмарка IS составляет

И, как упоминалось ранее, рыночная составляющая не может быть удалена эвристикой, где ωn = 1 для n = 0 и 0 в противном случае: влияние будет максимальным на книгу заказов.

mn является случайным и более рандомным, как объясняют упомянутые мною авторы ([1]-[3]), на цену влияет сама сделка, а это означает, что динамика цен вполне может быть описана чем-то вроде

где G(n,p) — функция отклика — см. [2] или [3].

Из-за этой случайной природы следует учитывать риск!

Подводя итог

Ну-ну… Похоже, я немного погорячился. ?

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

  • Оптимальное исполнение может быть получено с помощью эвристики для снижения рыночного риска. Это то, что брокеры делали на протяжении десятилетий, используя VWAP и / или TWAP при участии в крупных сделках для крупных инвесторов и управляющих активами.
  • Но эти эвристики могут оказаться в невыгодном положении для последних, когда сделка представляет собой последовательную долю ADV. В таких случаях следует рассмотреть подходы, в большей степени схожие с актуарными. И, как уже упоминалось в последнем абзаце об ИГ, соображения о расхождениях в ожидаемой производительности могут быть хорошим решением.

В следующей статье я, скорее всего, проведу эмпирический анализ того, что я здесь утверждаю. Не уверен, буду ли я сосредотачиваться на TWAP, VWAP или IS. С таким же успехом я мог бы быть максимально общим и разработать прайсер для общей стратегии с общим эталоном, а затем сравнить со спецификой TWAP, VWAP… Увидим.

В предыдущей статье я изложил некоторые мысли об исполнении. Я поделился некоторыми мыслями о том, стоит ли мне дать ему более практическое продолжение, и придумал эту идею: как насчет того, чтобы сделать это?

Вот план, я начну с того, что может быть самой сложной задачей для тех, кто не знаком с этим вопросом: сбор данных. Я написал программу на Go (этот язык недавно привлек мое внимание), которая обращается к публичным данным Binance, и она доступна на GitHub.

Тогда вы делаете работу!

  • Создайте калькулятор оптимальной стратегии.
  • Создайте инструмент тестирования на истории с помощью Binance.

Вы можете: сделать этот проект по-своему, используя свой собственный язык, или вы можете внести свой вклад, предоставив решение (написав свои собственные истории об этом). Просто создайте филиал и приступайте к работе!

Экстрактор данных

Использование экстрактора данных объясняется на GitHub, но давайте быстро свяжем вывод данных с используемыми здесь обозначениями.

Запустить код, не собирая его, очень просто

(i) При первом запуске создайте папку данных из корняmkdir -p data/json

затем запустите скрипт (вы можете собрать его, если хотите — см. файл readme на GitHub)go run cmd/dataextractor/dataextractor.go -symbol=BTCUSDT -json_path=data/json/ -throttle=5

-symbol указывает символ для запроса данных, используя форматирование Binance. В примере я запросил BTCUSDT, но вы можете запросить любой другой символ, доступный в API.

-json_path указывает, где должны храниться выходные данные. Вы должны создать его вручную перед запуском скрипта.

-throttle указывает интервалы времени, через которые книги заказов запрашиваются через интерфейс http API.
Сделки получаются через поток websocket. Некоторые могут заметить, что существует поток веб-сокетов книги заказов, но, к сожалению, он имеет только до 20 уровней, и этого было бы слишком мало, чтобы иметь хороший снимок ликвидности.
Чтобы иметь более высокий уровень в реальном времени, необходимо поддерживать локальную книгу заказов. Это прекрасное упражнение для любого начинающего квантового трейдера, но оно заняло бы у меня слишком много времени (я работаю над другими вещами, которые скоро начну публиковать). Поэтому вместо этого я дросселировал захват, чтобы запрашивать 5000 уровней книги заказов через регулярные интервалы времени, которые пользователь может указать. Для высоколиквидных символов, таких как BTCUSDT, достаточно короткого дроссельной заслонки (например, 5 секунд). По мере снижения ликвидности дроссельная заслонка должна увеличиваться, чтобы обеспечить возникновение сделок. В противном случае NaN будут производиться.

Вот пример вывода, который я получил, запустив скрипт{
«Spread»: 0.007543766220855038,
«OrderSize»: 0.006236945827489481,
«OrderAmount»: 165.35367702397087,
«BidOrderSize»: 0.005939920430722318,
«BidOrderAmount»: 157.47893286249285,
«BidTotalQty»: 395.6825525000046,
«BidMaxDelta»: 327.0700000000006,
«AskOrderSize»: 0.0049890625,
«AskOrderAmount»: 132.269875328125,
«AskTotalQty»: 235.42801750000615,
«AskMaxDelta»: 338.02500000000146,
«CumBids»: [
[
0,
0
],
[
0.0001,
0.04905527602005688
],
[
0.0002,
0.04934029523169036
],

],
«CumAsks»: [
[
0,
0
],
[
0.0001,
0.01546911719944717
],

]
}

Spread — это количество s, используемое во всех математических расчетах. CumBids являются нормализованными версиями (δ, F(δ)) для δ, принимающих конечные значения (101 равномерно распределенная точка между 0 и 0,01, а затем еще 100 точек между 0,01 и 1).CumAsks

Для любого ненормализованного значения δ получается F(δ) с формуламиF_bid := BidTotalQty * CumBids[int((delta — Spread / 2.0) / BidMaxDelta)]
F_ask := AskTotalQty * CumAsks[int((delta — Spread / 2.0) / AskMaxDelta)]

И это действительно все, что вам нужно знать, чтобы иметь возможность использовать выходные данные этого сценария для написания оптимальной стратегии выполнения!

И последнее: я вообще не упомянул время реконструкции τ, которое я представил в предыдущей статье. Теоретически одним из способов получить доступ к этому времени реконструкции было бы вычисление типичного времени автокорреляционной функции распространения… И для этого мне понадобится локальная книга заказов с достаточной глубиной, чтобы надежно оценить спред.Вместо этого я ввел параметр дроссельной заслонки, и мы будем считать, что этот дроссель равен τ.

Движок оптимальной стратегии

Ранее я представил эффективность торговли как

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

Как простой стартер, вы будете считать, что сделка не влияет на среднюю цену, и, следовательно,

Предполагая простой подход к минимизации риска, мы можем рассматривать функцию полезности, подлежащую минимизации, как

с ограничением

И как только у вас есть оптимальная стратегия, вы можете рассчитать ее цену, убедившись, что эффективность торговли плюс комиссия остаются положительными…

Итак, напишите решателю параметры ликвидности: F, σ, τ в качестве записей и вычислите для нескольких значений N оптимальные qn и выберите N таким образом, чтобы целевая функция, указанная выше, была минимальной: N, q₀, …, qn, … — это ваша торговая стратегия!

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

Теперь, когда у вас есть вычислительный движок для оптимальной стратегии, напишите правильную стратегию и протестируйте ее на потоке котировок и сделок, поступающих с Binance!

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

Давайте примерно представим, как должен быть спроектирован движок тестирования на истории.

Гипотеза немедленной доступности

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

Это довольно оптимистичная гипотеза, но ее достоинство заключается в том, что она проста. Многие события из реальной жизни опровергают эту гипотезу: у вас отнимают ликвидность, отменяет базовый ордер, теряется связь…

Стремление к агрессивному и пассивному исполнению

Когда я служил во французской армии, у инструкторов была такая фраза

Qui peut le plus, peut le moins.

что буквально означает «Если вы тренируетесь, чтобы делать больше, вы сможете делать меньше». Звучит немного очевидно на английском языке, но идея состоит в том, что, стремясь к более высоким целям, вы определенно сможете пройти через более низкие. Это хорошо, если нижние — это те, к которым вы стремитесь в первую очередь.

Итак, вот еще одно предложение. Если дроссельная заслонка позволяет, пусть часть целевой ликвидности будет выполняться пассивно. У этого есть один главный недостаток: вы не можете выполнить все запланированное количество. Не выполняя все, вы выставляете себя на рынок.

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

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

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

Ссылки

[1] Альмгрен и Крис — https://papers.ssrn.com/sol3/papers.cfm?abstract_id=53501

[2] Бушо — https://books.google.co.jp/books/about/Trades_Quotes_and_Prices.html?id=u45LDwAAQBAJ&redir_esc=y

[3] Gatheral — https://mfe.baruch.cuny.edu/wp-content/uploads/2017/05/Chicago2016OptimalExecution.pdf