Блог им. uralpro

Мой доклад на конференции 20.05.17 в Челябинске

Мой доклад на конференции 20.05.17 в Челябинске

Введение

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

Мой доклад на конференции 20.05.17 в Челябинске

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

Есть и недостатки, которые надо учитывать. Первый недостаток — сложность и дороговизна инфраструктуры высокочастотного трейдинга. Второй — нетривиальный инструментарий для разработки, применения и контроля стратегий. Фактически здесь готовых решений нет, все придется писать самим, на таких языках программирования, как Java и C++, позволяющих гибко работать с внутренней архитектурой процессора. Третий недостаток — малая капиталоемкость большинства HFT стратегий. Из-за большого количества сделок значительно возрастают требования к мгновенной ликвидности, а она на срочном рынке невелика в настоящее время. Но есть определенные способы, позволяющие значительно повысить капиталоемкость.

 

1. Инфраструктура для HFT-трейдинга

Мой доклад на конференции 20.05.17 в Челябинске

Для быстрой реакции на события, происходящие на рынке, нужно получать рыночные данные — это может быть полный ордерлог, сделки и т. д. — с минимально возможной задержкой. Так же как и рыночные приказы, которые отдает ваша система, должны поступать на биржу как можно быстрее. Чтобы обеспечить такие требования, необходимо размещать вашу инфраструктуру, которая может состоять из отдельного сервера, либо виртуальной системы, как можно ближе к биржевому ядру. Лучший вариант — колокейшн сервера в биржевом дата центре. Возможен вариант виртуального хостинга у провайдеров, у которых пинг до биржи не превыщает 1 — 2 мс. Однако, при последнем варианте некоторые типы высокочастотных алгоритмов, скорее всего, работать не будут.

Очень важно качество маркет-даты. Московская биржа предлагает различные варианты подключений для ее получения, таких как CGATE или FAST. Для отправки приказов можно использовать протоколы TWIME или FIX. Необходимо тестировать все варианты, чтобы поток данных транслировался с наименьшим джиттером. Джиттер — это неравномерность задержки прихода данных во времени. Вот пример, какой джиттер у нас был в начале, а вот после того, как устранили различные сетевые задержки, подключились по 10Гб каналу и доработали программные коннекторы:

Мой доклад на конференции 20.05.17 в Челябинске

2. Инструментарий высокочастотного трейдинга

Мой доклад на конференции 20.05.17 в Челябинске

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

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

Для предварительного анализа можно использовать языки программирования, которые заточены под работу с векторными данными — такие как R или Python. Под них написано множество библиотек, которые помогают решить задачи разработки стратегий. Предварительный анализ необходим для проверки какой-то гипотезы, которая может лечь в основу алгоритма.

Пример. В основе robot_uralpro, который учавствовал в ЛЧИ2010, лежит гипотеза о временном лаге между приращениями цены фьючерса на индекс РТС от синтетического индекса из акций, его составляющих. Если такое отставание имеет место, то при существенном движении синтетики, можно входить во фьючерс в сторону этого движения, и, если фьючерс последует за синтетическим индексом, то мы получим прибыль. Чтобы подтвердить эту гипотезу, нужно загрузить в среду R цены фьючерса с разрешением в 3 мс и совмещенные по времени цены акций с фондового рынка. Составим из цен акций синтетический индекс согласно методике, представленной на сайте Московской биржи, и возьмем приращения цен по 3мс. Построив кросскорелляционную функцию по этим приращениям мы получим следующую картинку:

Мой доклад на конференции 20.05.17 в Челябинске

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

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

Мой доклад на конференции 20.05.17 в Челябинске

1) построим спред, то есть разность, между ценой фьючерса и синтетикой

2) в качестве средней спреда возьмем экспоненциальную скользящую среднюю с определенным коэффициентом альфа

3) вычислим среднеквадратичное отклонение спреда, за какой-то период, скажем 10 минут

4) определим верхний и нижний пороги по спреду равными средняя + 2 среднеквадратичных отклонения для верхнего порога и средняя — 2 среднеквадратичных отклонения для нижнего

5) при выходе спреда за верхний порог ставим лимитный ордер на лучший аск, при падении спреда за нижний порог — на лучший бид. Если спред находится между порогами, то отставляем лимитные ордера на 4 уровня выше или ниже лучших цен соответственно.

6) в конце дня активно закрываем все открытые позиции и фиксируем прибыль или убыток

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

Мой доклад на конференции 20.05.17 в Челябинске

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

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

 

3. Управление портфелем стратегий

Мой доклад на конференции 20.05.17 в Челябинске

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

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

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

Соответственно, проектирование боевой части должно вестись с учетом всего вышесказанного. Программа должна иметь возможность запуска и котроля над множеством алгоритмов одновременно. При этом задержки, создаваемой расчетной частью от получения маркет даты до отправки приказа — тик ту трейд — должны быть минимальными. Мы добились в нашей боевой части значения тик ту трейд от 2 до 5 мкс, без использования FPGA решений. Еще около 2 мкс добавляет сетевой стек и сетевая карта.

 

4. Типы высокочастотных стратегий

Мой доклад на конференции 20.05.17 в Челябинске

Я бы выделил два основных типа HFT алгоритмов:

1. Безрисковые

2. Допускающие ограниченный риск

К безрисковым стратегиям относятся все виды классического арбитража:

1. Между базовым активом и фьючерсом

2. Календарный арбитраж — например, между фьючерсами разного срока погашения

3. Межрыночный арбитраж — например между брентом на бирже СМЕ и фьючерсом на брент на MOEX

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

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

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

В заключение продемонстрирую результаты нашей торговли на высокочастотных алгоритмах за 2016 год. Наш портфель в основном состоит из статистических стратегий с ограниченным риском.

Мой доклад на конференции 20.05.17 в Челябинске

Мой доклад на конференции 20.05.17 в Челябинске


Стратегии и алгоритмы автоматической торговли смотрите на моем сайте www.quantalgos.ru

★58
53 комментария
Это конечно все хорошо в теории. Лучше скажи сколько можно зарабатывать процентов в месяц?
Ну и второе максимальное количество контрактов для работы внутри дня?
avatar
Байкал, почему в теории? в конце поста наше эквити за 6 месяцев, как раз в процентах. Максимальное количество контрактов сильно зависит от стратегии. Но в общем можно загрузить до нескольких десятков млн руб
avatar
uralpro, как можно несколько млн рублей внутри дня по рынку кидать?
Даже если взять  РТС 50 контрактов покупать по рынку цена исполнения уже будет 20-30 пунктов не в нашу сторону, 5-10 без проблем конечно. А здесь несколько млн пусть даже будет 2млн это примерно 140 контрактов мгновенного исполнения не будет. И это самый ликвид у нас на рынке. По другим инструментам так там вообще еще хуже.
avatar
Байкал, а зачем кидать по рынку? Выставляйтесь лимитками
avatar
uralpro, я что то тогда не понял речь ведь идет про высокочастотный трейдинг с огромной кучей сделок.
Получается выставляется куча заявок типа сеточника?
avatar
Байкал, по разному, но в основном, лимитными ордерами, да. По рынку исполняется лишь небольшая часть.
avatar
uralpro, понятно теперь примерно стало)
avatar
uralpro, Крутая статьяю Добавлю в закладки

Судя по эквити вы не ре инвестируете?
avatar
Алексей С, часть реинвестировалась, это видно до просадки в октябре. Затем сильно изменились параметры рынка, и на какое-то время даже снижали объемы
avatar
uralpro, а как быстро вы понимаете, что параметры рынка поменялись? По эквити смотрите?
avatar
Андрей К, просадка превышает расчетную за день, или несколько дней подряд идет просадка. Для разных стратегий может несколько отличаться, но в основном становится быстро понятно, даже по характеру внутридневных сделок
avatar
uralpro, спасибо.
То есть в таком роде трейдинга тоже присутствует доля интуитивности, нужно всегда вылавливать момент окончания работы параметров и перестраиваться.
avatar
Андрей К, это можно легко формализовать, но вручную пока проще. Если возникнет необходимость, сделаем программный контроль
avatar
uralpro, Если позволите, ответьте на то что считаете нужным. Спасибо!

какие реализации алгоритмов Machine Learning используете? пишите сами? используете ли accord.NET? 

В R не тестируете? пишите event driven тестер ?

Используете ли Complex Event Processing ?

Каким образом количественно оцениваете емкость стратегии ?

какую СУБД используете?
avatar
evgen000, не понял вопроса, МА — это moving average имеются в виду? accord.NET мы точно не используем, потому что полностью перешли на С++
avatar
uralpro, MA — machine learning. 
avatar
evgen000, в R тестируем гипотезы, то есть есть ли какое-то смещение вероятности в каких-то случаях. Емкость стратегии оцениваем на основе собственного опыта и тестированием в реале. СУБД вообще не используем, в виду медленной реализации
avatar
uralpro, Спасибо за ответы! А почему прям в R не тестируете стратегию, это же быстрее и удобнее в плане разработки?
avatar
evgen000, потому что тестер должен быть максимально приближен к боевой части и работать с миллисекундным разрешением как минимум. На R вообще очень сложно реализовать такую точность, уж не говоря о том, что на боевую часть, написанную на С++ это будет вообще не похоже. Все это чревато тем, что в реальности производительность соответствовать тесту не будет
avatar
хороший пост
avatar
Вашу конференцию снимали на видео? Оно будет в общем доступе?
avatar
Мурен(а), вроде кто-то снимал, наверняка где-то выложат
avatar
 Как оцениваете качество стратегии?
Используете коэффициент Шарпа, профит фактор или еще что то в этом роде?
avatar
Алексей С, HFT стратегии можно оценивать  по профит фактору и максимальной просадке. За год она должна не превышать 3-5% для каждого отдельного алгоритма. Коэффициенты Шарпа там заоблачные получаются, поэтому никакого смысла в них нет
avatar
uralpro, То есть вы не запускаете стратегию в строй, если она при бектесте за год показала просадку более 5%?
avatar
Алексей С, да, не запускаем. Только в крайнем случае, если, например, показывает необычно большой профит или срочно нужен новый алгоритм
avatar
uralpro, На сколько сильно у вас отличаются результаты бэктеста от реальных, за один и тот же период? В суммарной прибыли, количестве сделок, балансе прибыльных убыточных…
avatar
Алексей С, в суммарной прибыли почти не отличаются, если мы говорим о соответствии каждодневных тестов. Исторические просадки могут быть превышены, и это первый сигнал об ухудшении работы алго.
Соответственно, в каждодневных тестах количество сделок и соотношение прибыльных и убыточных очень близки к реалу, не считая отдельных видов алго
avatar
А чего не log(rts) — k1 * log(price1)…?
avatar
ELab, можно и так:)
avatar
uralpro, может так и есть? )))
avatar
Побежал реализовывать!
avatar
SECRET, не надо, после тебя нам уже нечего будет собирать на рынке :)
avatar
SECRET, у тя летенси недостаточно хороших для таких страт ;)
Не поделитесь другими гипотезами для основы алгоритма стратегии, не являющимися коммерческой тайной?
avatar
НеоМэн, не, все гипотезы на вес золота, одной за раз достаточно :)
avatar

«Алгоритм будет состоять из следующих простых вычислений:
...

2) в качестве средней спреда возьмем экспоненциальную скользящую среднюю с определенным коэффициентом альфа

3) вычислим среднеквадратичное отклонение спреда, за какой-то период, скажем 10 минут

4) определим верхний и нижний пороги по спреду равными средняя + 2 среднеквадратичных отклонения для верхнего порога и средняя — 2 среднеквадратичных отклонения для нижнего...»

Я всегда подозревал, что HFT-шники торгуют по Боллинджеру. 
А SECRET, наверно, вообще по двум скользяшкам торгует или по стохастику...

Ну как бы, все гениальное просто ;)
avatar
Спасибо!!!
avatar
Какой минимальный PFactor в рабочих системах?
avatar
В статье есть серьезная ошибка: классический арбитраж не является безрисковым.
sore, серьезней некуда :)
avatar
matrix, а вводить читателя в заблуждение по такому важнейшему параметру стратегии, как её рискованность, по твоему не серьезно? ;)
sore, конечно не серьезно, тут 99% никогда не реализует ничего подобного, как рисовали каналы так и будут их рисовать.
avatar
evgen000, cразу видно «большого спеца» в арбитраже lol
sore, по «твоему»? мы знакомы?
avatar
sore, конечно, риск везде присутствует. Я имел в виду безрисковость относительно других стратегий, наверное, надо было пояснее этот момент отразить
avatar
uralpro, безрисковость она апсолютна, а не относительно. Относительно других может лишь быть мение или более рисковано ;)
sore, восхищаясь  вашей абсолютной грамотностью, более или менее согласен :)
avatar
Портфель стратегий состоит из принципиально различных стратегий? Или там всего к примеру 2-3 алгоритма с множеством клонов с различными параметрами?
avatar
Reznor, сейчас разных алго около десятка
avatar

теги блога uralpro

....все тэги



UPDONW
Новый дизайн