Введение
Сегодня я расскажу, что необходимо для создания и применения высокочастотных стратегий на российском рынке. Постараюсь этот рассказ проиллюстрировать примерами из нашей практики.
Зачем нужна высокочастотная торговля, в чем преимущество HFT алгоритмов? В отличие от традиционных, высокочастотные алго в подавляющем большинстве работают внутри дня, то есть все открытые позиции на инструментах в конце дня ликвидируются, устраняя риски переноса овернайт. Большое количество сделок также позволяет очень плотно контролировать риски, то есть, если ваша стратегия перестала работать, то вы это поймете не через месяц, а через несколько часов, максимум несколько дней, в отличие от долгосрочных стратегий, где можно сидеть в просадках месяцами. Еще одно преимущество — со временем большинство рутинных операций легко автоматизируется, и появляется больше времени для непосредственной разработки алгоритмов. И самая приятная сторона таких стратегий, это, конечно, доходность, которая может составлять от сотен до тысяч процентов годовых.
Есть и недостатки, которые надо учитывать. Первый недостаток — сложность и дороговизна инфраструктуры высокочастотного трейдинга. Второй — нетривиальный инструментарий для разработки, применения и контроля стратегий. Фактически здесь готовых решений нет, все придется писать самим, на таких языках программирования, как Java и C++, позволяющих гибко работать с внутренней архитектурой процессора. Третий недостаток — малая капиталоемкость большинства HFT стратегий. Из-за большого количества сделок значительно возрастают требования к мгновенной ликвидности, а она на срочном рынке невелика в настоящее время. Но есть определенные способы, позволяющие значительно повысить капиталоемкость.
1. Инфраструктура для HFT-трейдинга
Для быстрой реакции на события, происходящие на рынке, нужно получать рыночные данные — это может быть полный ордерлог, сделки и т. д. — с минимально возможной задержкой. Так же как и рыночные приказы, которые отдает ваша система, должны поступать на биржу как можно быстрее. Чтобы обеспечить такие требования, необходимо размещать вашу инфраструктуру, которая может состоять из отдельного сервера, либо виртуальной системы, как можно ближе к биржевому ядру. Лучший вариант — колокейшн сервера в биржевом дата центре. Возможен вариант виртуального хостинга у провайдеров, у которых пинг до биржи не превыщает 1 — 2 мс. Однако, при последнем варианте некоторые типы высокочастотных алгоритмов, скорее всего, работать не будут.
Очень важно качество маркет-даты. Московская биржа предлагает различные варианты подключений для ее получения, таких как CGATE или FAST. Для отправки приказов можно использовать протоколы TWIME или FIX. Необходимо тестировать все варианты, чтобы поток данных транслировался с наименьшим джиттером. Джиттер — это неравномерность задержки прихода данных во времени. Вот пример, какой джиттер у нас был в начале, а вот после того, как устранили различные сетевые задержки, подключились по 10Гб каналу и доработали программные коннекторы:
2. Инструментарий высокочастотного трейдинга
Для разработки любого алгоритма нужны три важнейшие составляющие — записи исторических рыночных данных, среда предварительного анализа данных и программа бэктестирования.
Запись исторических данных должна вестись с максимальным разрешением, которое транслирует биржа, каждая строка записи начинается с временной метки, соответствующей биржевому времени события. Сейчас временные метки транслируются с наносекундной точностью, но, например на срочном рынке существует нарезка по 3 мс, поэтому частота записи будет именно такой. Для высокочастотных стратегий достаточно данных для тестирования за 1 год.
Для предварительного анализа можно использовать языки программирования, которые заточены под работу с векторными данными — такие как R или Python. Под них написано множество библиотек, которые помогают решить задачи разработки стратегий. Предварительный анализ необходим для проверки какой-то гипотезы, которая может лечь в основу алгоритма.
Пример. В основе robot_uralpro, который учавствовал в ЛЧИ2010, лежит гипотеза о временном лаге между приращениями цены фьючерса на индекс РТС от синтетического индекса из акций, его составляющих. Если такое отставание имеет место, то при существенном движении синтетики, можно входить во фьючерс в сторону этого движения, и, если фьючерс последует за синтетическим индексом, то мы получим прибыль. Чтобы подтвердить эту гипотезу, нужно загрузить в среду R цены фьючерса с разрешением в 3 мс и совмещенные по времени цены акций с фондового рынка. Составим из цен акций синтетический индекс согласно методике, представленной на сайте Московской биржи, и возьмем приращения цен по 3мс. Построив кросскорелляционную функцию по этим приращениям мы получим следующую картинку:
Как можем видеть, центр функции смещен относительно центра в отрицательную область, значит лаг существует, и можно попробовать его использовать для извлечения профита.
Следующий этап — непосредственно разработка и тестирование алгоритма. Для этого используем программу бэктестирования, которая имитирует реальные торги и сведение заявки на бирже. Алгоритм будет состоять из следующих простых вычислений:
1) построим спред, то есть разность, между ценой фьючерса и синтетикой
2) в качестве средней спреда возьмем экспоненциальную скользящую среднюю с определенным коэффициентом альфа
3) вычислим среднеквадратичное отклонение спреда, за какой-то период, скажем 10 минут
4) определим верхний и нижний пороги по спреду равными средняя + 2 среднеквадратичных отклонения для верхнего порога и средняя — 2 среднеквадратичных отклонения для нижнего
5) при выходе спреда за верхний порог ставим лимитный ордер на лучший аск, при падении спреда за нижний порог — на лучший бид. Если спред находится между порогами, то отставляем лимитные ордера на 4 уровня выше или ниже лучших цен соответственно.
6) в конце дня активно закрываем все открытые позиции и фиксируем прибыль или убыток
Далее необходимо протестировать данный алгоритм на нескольких днях, если результат положительный, то на нескольких месяцах. Для вышеприведенной стратегии получаем такую эквити :
Чтобы запустить подобный алгоритм в реальные торги, необходимо использовать еще несколько инструментов. Во-первых, нужно подобрать параметры, которыми для нашей стратегии могут являться коэффициент альфа для скользящей средней, величина порога (коэффициент при среднеквадратичном отклонении) и, допустим, величина скользящего окна для вычисления среднеквадратичного отклонения. Для такого подбора нужна программа оптимизатор, которая будет прогонять бэктесты за определенный период, каждый раз меняя параметры, и после такого перебора, выберет лучшие.
После этого наша стратегия готова к применению, и для этого, конечно понадобится боевая часть, в которую будет встроен наш алгоритм, желательно методом копипаст непосредственно из бэктеста, для избежания ошибок при переносе. Соответственно в части тела алгоритмов боевая часть и бэктест должны быть идентичными. В боевой части, в отличие от бэктеста имеются коннекторы, которые, присоединяясь к бирже получают маркетдату, и коннекторы для отправки приказов на выставление ордеров.
3. Управление портфелем стратегий
Итак, мы успешно встроили алгоритм и запустили его в реальные торги. Но достаточно ли устойчива такая система для долговременного получения прибыли? С одним алгоритмом, конечно, нет. Каждый алгоритм имеет свой срок жизни, у некоторых стратегий он достаточно короткий. Это связано с постоянным изменением рынка, адаптации его к меняющейся внутренней и внешней среде.
Для устойчивого процесса получения прибыли с помощью алготорговли необходима система разработки, тестирования и внедрения в работу высокочастотных стратегий. Процесс разработки должен быть непрерывен, необходимо создавать запас стратегий, который можно использовать в случае ухудшения прибыльности действующих.
В реальных торгах должен принимать участие набор стратегий, которые представляют собой определенный портфель, собранный с учетом принципа диверсификации и снижения общего риска. Это означает, в частности, что стратегии в портфеле должны быть низкокоррелированы между собой по функции прибыли. Составить такой портфель можно в соответствии с портфельной теорией Марковица, или по принципу VaR и т. п.
Соответственно, проектирование боевой части должно вестись с учетом всего вышесказанного. Программа должна иметь возможность запуска и котроля над множеством алгоритмов одновременно. При этом задержки, создаваемой расчетной частью от получения маркет даты до отправки приказа — тик ту трейд — должны быть минимальными. Мы добились в нашей боевой части значения тик ту трейд от 2 до 5 мкс, без использования FPGA решений. Еще около 2 мкс добавляет сетевой стек и сетевая карта.
4. Типы высокочастотных стратегий
Я бы выделил два основных типа HFT алгоритмов:
1. Безрисковые
2. Допускающие ограниченный риск
К безрисковым стратегиям относятся все виды классического арбитража:
1. Между базовым активом и фьючерсом
2. Календарный арбитраж — например, между фьючерсами разного срока погашения
3. Межрыночный арбитраж — например между брентом на бирже СМЕ и фьючерсом на брент на MOEX
Все эти виды арбитража имеют очень низкие показатели риска при правильном дизайне алгоритмов, но не нулевые. Однако самый значительный риск здесь — технологический, то есть всевозможные обрывы соединений, сбои на биржах и т. п. Создание таких стратегий является довольно непростой задачей в связи с большой конкуренцией в этих видах алгоритмов. В этом случае обеспечение минимальных задержек на всех этапах прохождения маркет даты и рыночных приказов — жизненная необходимость. Все это требует покупки новейшего компьютерного оборудования, и продвинутых знаний программирования для создателей трейдерского софта.
Второй тип стратегий допускает существование ограниченного риска. Это всевозможные виды статистического арбитража, то есть алгоритмы, эксплуатирующие какую-либо статистическую зависимость, найденную разработчиком. Рассмотренный robot_uralpro относится именно к такому типу, так как хоть в основе и лежит идея арбитража, но торгует он одной ногой, реализовывая наблюдение об отставании от базового инструмента.
Понятно, что в данном типе стратегий присутствует ощутимый риск, который возникает из-за статистического характера зависимостей. Почему он ограниченный? По тем причинам, что я уже упоминал — высокочастотные алгоритмы торгуют только внутри дня и предполагают достаточно большое количество сделок.
В заключение продемонстрирую результаты нашей торговли на высокочастотных алгоритмах за 2016 год. Наш портфель в основном состоит из статистических стратегий с ограниченным риском.
Стратегии и алгоритмы автоматической торговли смотрите на моем сайте www.quantalgos.ru
Ну и второе максимальное количество контрактов для работы внутри дня?
Даже если взять РТС 50 контрактов покупать по рынку цена исполнения уже будет 20-30 пунктов не в нашу сторону, 5-10 без проблем конечно. А здесь несколько млн пусть даже будет 2млн это примерно 140 контрактов мгновенного исполнения не будет. И это самый ликвид у нас на рынке. По другим инструментам так там вообще еще хуже.
Получается выставляется куча заявок типа сеточника?
То есть в таком роде трейдинга тоже присутствует доля интуитивности, нужно всегда вылавливать момент окончания работы параметров и перестраиваться.
какие реализации алгоритмов Machine Learning используете? пишите сами? используете ли accord.NET?
В R не тестируете? пишите event driven тестер ?
Используете ли Complex Event Processing ?
Каким образом количественно оцениваете емкость стратегии ?
какую СУБД используете?
Используете коэффициент Шарпа, профит фактор или еще что то в этом роде?
Соответственно, в каждодневных тестах количество сделок и соотношение прибыльных и убыточных очень близки к реалу, не считая отдельных видов алго
«Алгоритм будет состоять из следующих простых вычислений:
...
2) в качестве средней спреда возьмем экспоненциальную скользящую среднюю с определенным коэффициентом альфа
3) вычислим среднеквадратичное отклонение спреда, за какой-то период, скажем 10 минут
4) определим верхний и нижний пороги по спреду равными средняя + 2 среднеквадратичных отклонения для верхнего порога и средняя — 2 среднеквадратичных отклонения для нижнего...»
Я всегда подозревал, что HFT-шники торгуют по Боллинджеру.
А SECRET, наверно, вообще по двум скользяшкам торгует или по стохастику...