Яндекс.Метрика
ГлавнаяБез рубрики › Мой доклад на конференции 20 мая в Челябинске

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

Введение

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

Зачем нужна высокочастотная торговля, в чем преимущество 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 год. Наш портфель в основном состоит из статистических стратегий с ограниченным риском.

6 Комментарии[ Ваш комментарий ]

  1. Добрый день, принимаете деньги в управление?

  2. Добрый день.

    Некоторые вопросы:

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

    2. Действительно ли приходится углублятся до такого уровня, когда начинает играть роль архитектура процессора? Т.е. фактически действительно ли в вашем коде есть ассемблерные вставки, назначение которых - ускорить работу? Я правильно понимаю, что число их растет год от года, ибо конкуренция?

    3. Насколько важно очень глубокое знание математики? Я сам технарь, но многие статьи на этом сайте воспринимаю с трудом. Физико-математическое университетское образование - это тот минимум, что нужно иметь?

    4. Вы не принимаете деньги  в управление, похоже, потому, что емкость стратегий невелика и хватает своих собственных средств? Значит ли это, что доходы, хотя и крайне интересные в %, в абсолютном выражении небольшие? И хотя все относительно. Но хотя бы по порядку величины - насколько сложно, скажем, на нашей бирже выйти на доход - 10 млн./руб. в год? Понимаю, что некоторым хватает и 500к/руб. в год. Но, грубо говоря, с той компетенцией, что есть у вас, думаю, вы могли бы работать, скажем, в банке - например, анализировать риски кредитных портфелей и их оптимизировать. И платили бы там, скажем, уж 2-3млн./год точно (рублей). Понятно, что имея такую альтернативу уходить в трейдинг нужно тогда, когда доходность на ФР кратно выше.

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

    • Здравствуйте.

      1.На ФОРТСе инфраструктура (сервер+хорошая сетевая карта) будет стоить начиная с 300 т.р. Помимо этого в месяц будете отдавать от 70 т.р.

      2. Да, сейчас все играет роль. Архитектура боевой части должна быть тщательно выверена, показатель tick-to-trade не должен превышать 3-7 мкс.

      3. Глубокие знания математики для высокочастотных алгоритмов вряд ли понадобятся. Но какой-то минимальный уровень конечно должен быть.

      4. На доход в 10 млн выйти можно на нашей бирже, но довольно таки сложно. Однако есть, например, западные площадки, где это будет легко достижимо. В банке работать не буду ни за какие деньги 🙂 Сейчас зарабатывается нормально, мне хватает.

      5. Я практически не делаю стратегий, где меньше 50 сделок в день. Считаю, что недостаточно статистического подтверждения.

      • Понятно.

        А вы один этим занимаетесь, или у вас команда? Сколько человек, если не секрет?

        И такой вопрос. По вашему, в РФ в HFT и вообще в арбитраже/автоторговле разных закономерностей - много ли игроков? Конкуренция растет сильно со временем?

        • Нас в команде трое вместе со мной. Закономерностей довольно много, но конкуренция в РФ чрезвычайно высокая. Усилиями Московской биржи ликвидность сильно упала в 2017 году, поэтому зарабатывать стало намного сложнее.  Пока признаков исправления ситуации не видно. Если не будет в дальнейшем притока новых участников на российский рынок, то пока лучше повременить с алготорговлей здесь. Лучше пробуйте на зарубежных площадках, криптовалюте. Там ликвидность с каждым днем только увеличивается, возможностей море.

Сообщение

Обратите внимание: вы можете использоватьHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>