Site icon Робоферма

Арбитражный робот на Фортс в TSLab

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

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

Кроме того, что графики цены инструментов должны как можно лучше повторять друг друга, то есть коррелировать, для начала разработки арбитражной стратегии нам нужно понимать еще две ключевые вещи:
  1. Инструменты должны быть приведены к равновесной цене. Это означает, что если один инструмент стоит 1000, а другой 500, то второй нужно брать с коэффициентом 2:1.
  2. Для определения расхождений в ценах строится “раздвижка“. Это график приведенных (смотри п.1) цен. Раздвижка может строиться разными способами. Мы рассмотрим два из них.
Мне известны два подхода подхода к построению раздвижки и расчету разницы между ценами инструментов – спреда. Но это не значит, что их всего два. Подходы могут быть различные. Давайте начнем с классического.

Классическая арбитражная стратегия

Начнем с того, что возьмем 2 инструмента: фьючерс Сбербанк (SBRF) и фьючерс Сбербанк прив (SBPR). Графики цен нам нужно привести друг к другу. Для этого возьмем и построим SMA с большим периодом по закрытиям свечей. Далее мы оптимизируем его. Разделив SMA2 первого инструмента на SMA3 второго, мы получим коэффициент для приведения их к общему знаменателю.

Он понадобится нам для построения раздвижки и расчета лотов. То есть, если Сбер относится к Сбер пр как 10000 к 7500, то на 10 лотов Сбер мы будем брать 13 лотов Сбер пр. Тут вскрывается одна особенность данной стратегии. Для того чтобы соблюсти данное соотношение, берем именно 10, а на 1 лот, так как не можем купить дробное количество лотов. Соответственно, депозит должен быть достаточно большим для арбитража.

Получается что для формулы разницы между инструментами spread берем Закрытие1 из Источник1 и close2, что является приведенным посредством умножения на полученный выше коэффициент Закрытие2 из Источник2. Формула спреда будет выглядеть следующим образом:

Закрытие1-close2, где close2 это Закрытие2*SMA2/SMA3

Раздвижка до и после приведения

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

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

Для этого вводим 2 константы: верхний пик и нижний. По пересечению верхнего (положительному) продаем Источник1 (Сбербанк) и покупаем Источник2 (Сбербанк прив). По пересечению закрываем позиции и открываемся в обратном направлении.

Надеюсь механика понятна. Для Источника1 задаем лоты через Константу lots. Для расчета лотов Источника2 используем все тот же коэффициент и несложную формулу. Подаем на третий вход блока открытия позиции.

Задаем лоты

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

Затем анализируем точки входа и приходим к выводу что входы далеко не всегда происходят на самых больших спредах, поэтому мы часто получаем не выгодные позиции. Что с этим делать? Самое простое – это добавить дополнительных входы, то есть входим частями через определенные промежутки спреда, если он растет против нас. Другими словами, делаем усреднение.

Не буду описывать в деталях. Тут просто берем Обновляемое значение, подаем туда МинимумЗа и МаксимумЗа нашего спреда при входе в основную позицию. Если спред увеличился от данного значения на определенную величину – gap, то делаем еще один вход.

 

Небольшая теоретическая вставка. Поскольку не все новички понимают принцип работы блока Обновляемое значение, приведу пример. Со скриншота ниже вы видите как в блок Обновляемое значение (желтый) подается параметр МаксимумЗа1 на вход 1 при условии что ЛогичесФормула5 выдаст значение Истина на вход 2. Это произойдет когда текущий бар будет баром входа в позицию. То есть при открытии позиции ОЗ получает текущее максимальное значение какого-либо параметра или цены. Также у ОЗ есть 2 параметра: Начальное – цифра, которую блок принимает при сбросе и галочка Не очищать, которая запрещает очищать значение при закрытии позиции. По-умолчанию ОЗ будет очищаться когда закроется позиция.

Обновляемое значение пример

Можно сделать проще. Так как входим мы по уровню спреда, можно найти еще несколько уровней посредством оптимизации и делать дополнительные входы на пересечении этих уровней. Таких уровней входов можно добавить 1, 2 или даже 3. Можно также сделать закрытие дополнительных позиций также ступеньками, например позицию, открытую при пересечении уровня спреда 3 закрываем на уровне 2, уровень 2 на уровне 1 и так далее.

График спреда с входом по уровням

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

Получаем вот такой график арбитражного робота на фортс. Тут b – основной вход, d – усреднение первого уровня, третий график это раздвижка, четверный – спред в виде гистограммы с уровнями. Пунктиром показано значение МинимумЗа входа для усреднения. Самый нижний график – это наш профит по всем позициям.

Арбитражный робот на фьючерсе Сбербанк

Ну и конечно же график доходности. Как видите, лонговые позиции сливают. Если посмотреть на график Сбербанка за этот период, станет понятно почему. На графике доходность на 10 лотов фьючерса Сбербанка, депозит 100 000 руб. Плечо получается около 1–1,5.

График доходности
Показатели арбитражной стратегии на Сбербанке

По результатам можно сказать что в на графике доходности просадка кажется ниже и тут она указана не зафиксированная, а “плавающая”. Таким образом, для получения доходности выше 40% годовых риски можно еще увеличить, увеличив плечо в 1,5 – 2 раза. Напомню также что доходность в результатах указана без реинвестирования и сложного процента, так что лоты можно увеличивать по мере накопления определенной прибыли, сохраняя плечо.

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

Арбитражный робот Фортс с применением скользящей средней

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

Арбитражная стратегия с SMA

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

Арбитражная стратегия с SMA – пример работы на Сбербанке
Результат работы 10 лотов, 100 000 руб
График доходности 10 лотов

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

Арбитражная стратегия Сургутнефтегаз депозит 100 000 р

 

Статистический арбитраж с индикатором Spread

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

Данный индикатор нужно скачать и разархивировать в папку Handlers (подробнее в FAQ). Добавить кубик нужно из категории Пользовательские – Spreadk. На вход 1 и 2 подаются инструменты, коэффициенты ставим 1 и 1 или нужный вам вес. Сам кубик представляет из себя поток данных типа Источник, то есть к нему нужно подключать блоки Закрытие, Открытие и т.д.

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

Использование кубика spreadk

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

На графике снизу второе окно – это спред. Черная SMA это средняя линия спреда. Прямые линии – это ОЗ точек входа основной и дополнительных позиций. Третье окно – график прибыли всех открытых позиций, их сумма.

Пример арбитражной стратегии на основе индикатора Spread

В моем примере всего 2 дополнительных уровня – через 1 и через 4 уровня от точки входа. Прибыль для каждой позиции фиксируется отдельно. Для этого для каждого дополнительного уровня я также записываю точку входа на спреде и считаю прибыль от нее.

Результат арбитражной стратегии на Сбербанке с помощью индикатора Spread

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

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

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

Буду рад, если вы поделитесь своими наработками. Спасибо что дочитали до конца!

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

Также мы предлагаем доверительное управление с помощью портфеля арбитражных пар на Фортс с помощью специального высокочастотного робота, написанного на API. Торгуются от 2 до 6 пар одновременно. Оптимальный капитал для арбитражного портфеля 2 млн. руб.

Полезные ссылки

 

Exit mobile version