в Стратегии

Успешная проверка алгоритмических торговых стратегий на исторических данных. Часть 3: Операционные издержки

Успешная проверка алгоритмических торговых стратегий на исторических данных.

Часть 1: Ошибки, оказывающие влияние

Часть 2: Пакеты программного обеспечения для бэктестирования

Часть 3: Операционные издержки

В предыдущих частях мы обсудили статистические и поведенческие ошибки, которые оказывают влияние на результаты нашего бэктестиования. Мы также обсудили пакеты программ для бэктестиования: Excel, MATLAB, Python, R и C++. В этой статье мы рассмотрим как учитывать операционные издержки, а так же и конкретные решения, которые необходимо принять при создании инструмента бэктестиования, такие как тип заявок и частотность данных.

Операционные издержки

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

Комиссии/сборы

Самая наглядная форма операционных издержек, которую несет в себе алгоритмическая торговая стратегия, это комиссии и сборы. Всем стратегиям необходима некоторая форма доступа к бирже: напрямую или через брокерского посредника («брокер»). Эти услуги, которые накладывают дополнительные издержки на каждую сделку, известны как комиссия.

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

Проскальзывание / Задержки

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

Инструмент с более высокой волатильностью более склонен к движению, и цены сигнала и выполнения могут существенно отличаться. Задержка (latency) определена как разница между временем генерирования сигнала и временем его выполнения. Высокочастотные стратегии более чувствительны к проблемам с задержками, и улучшение времени ожидания на миллисекунды может повлиять на доходность. Также важен тип стратегии. Импульсные системы (momentum system) в среднем больше страдают от проскальзывания, потому что пытаются использовать инструменты, которые уже двигаются в направлении прогноза. Обратное верно и для стратегий возврата к среднему, так как они двигаются в направлении, противоположном сделке.

Воздействие на рынок / Ликвидность

Воздействие на рынок – затраты, понесенные трейдерами из-за динамики спроса/предложения биржи (и актива), через которую они пытаются торговать. Крупная заявка на относительно неликвидный актив, скорее всего, существенно сдвинет рынок, поскольку сделка должна будет получить доступ к большой части текущего предложения. Чтобы противостоять этому, крупные сделки делят на более мелкие, которые периодически проводятся по мере того, как новая ликвидность поступает на биржу. С другой стороны, для высоколиквидных инструментов, таких как фьючерсный контракт индекса S&P500 E-Mini, малообъемные сделки вряд ли сдвинут «текущую цену» на какое-то большое значение.

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

Модели операционных издержек

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

Модели плоских/постоянных операционных издержек

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

Модели линейных/кусочно-линейных/квадратичных операционных издержек

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

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

Проблемы реализации бэктестиования стратегии

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

Типы торговых заявок

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

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

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

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

Особенности данных OHLC

Есть специфические проблемы, связанные с бэктестиованием стратегий, у которых ежедневные данные используются в форме OHLC (цена открытия (Open), максимум (High), минимум (Low), цена закрытия (Close)), особенно для акций. Заметьте, что в такой форме предоставляет данные Yahoo Finance, а они являются самым распространенным источником данных для розничных алгоритмических трейдеров!

Дешевые или бесплатные наборы данных, страдающие от систематической ошибки выжившего (которую мы уже обсудили в предыдущей части), часто также являются смешанным потоком котировок от многочисленных бирж. Это означает, что крайние точки (то есть цена открытия, максимум, минимум, цена закрытия) данных очень восприимчивы к «выбросам» (outliers) из-за мелких заявок на региональных биржах. Эти значения, вероятно, будут еще и тиковыми ошибками, которые должны быть удалены из набора данных.

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

Автор: Michael Halls-Moore

Источник:

Sucessful backtesting of algorithmic trading strategies – part II