ГлавнаяHigh Frequency › Еще одно тестирование алгоритма Маркет Мэйкера

Еще одно тестирование алгоритма Маркет Мэйкера

576ceafc73c646aca3a3c1afd56d94dd

Продолжая тему тестирования алгоритма Маркет Мэйкера, поделюсь своими результатами и мыслями по его работе:
1. Основной режим работы алгоритма - это маркетмэйкинг (он же арбитраж ликвидности, он же торговля спредом). И конечно же, прибыльность этой стратегии сильно зависит от рыночных условий, скорости получения данных и работы системы исполнения. Средняя прибыль на сделку даже и при идеальном исполнении не будет превышать значение спреда (2-5пунктов по Si в среднем). А в период сильной волатильности, когда стакан бросает из стороны в сторону на 10-30 пунктов, несмотря на большое количество положительных сделок ( около 70%), алгоритм становится убыточным. В основном из-за комиссий, конечно.

2. Да, математические формулы сильно ограничили многих желание понять, как устроен алгоритм. Но на самом деле, если вдумчиво посмотреть картинки (карты политик), получается все ясно и просто. А будет еще проще, если посмотреть картинки графиков из других статей, лежащих в основе алгоритма (например Guilbaud, Fabien, and Huyen Pham, 2013, Optimal high-frequency trading with limit and market orders). Забудем на минутку про дисбаланс бид/акс объемов и построим карту политик для открытой позиции при разных значениях спреда:

Требуется пояснение по зонам (в скобках указано название политики для тестируемого алогритма с дисбалансом):
Зона Ba, Bb (MarketMaking) -  одновременное выставление лимитных заявок по цене лучшего бида и цене лучшего аска;
Зона Ba, Bb+ (Pinging Bid Side) -  одновременное выставление лимитных заявок по цене лучшего бида - тик и цене лучшего аска;
Зона Ba-, Bb (Pinging Ask Side) -  одновременное выставление лимитных заявок по цене лучшего бида и лучшего аска - тик ;
Зона Ba-, Bb (Pinging Bid & Ask Sides) -  одновременное выставление лимитных заявок по цене лучшего бида - тик и цене лучшего аска - тик ;
Зона BUY AT MARKET (Inventory Control) - закрытие короткой позиции по рыночной цене;
Зона SELL AT MARKET (Inventory Control) - закрытие длинной позиции по рыночной цене.

Теперь, надеюсь, всё стало понятно. Внесение дисбаланса объемов немного модифицирует зоны и оптимизирует контроль и закрытие позиций.
Хотя предсказательная способность дисбаланска не велика, практическая польза от него все же есть. Большой объем по лучшему биду или аску снижает верятность исполнения заявки, выставленной на этот же уровень, поэтому алгоритм выдаст сигнал выставляться на тик меньше.

3. Перейдем к реализции и тестированию алгоритма. Система устроена следующим образом:
Расчетная часть:
- За предудущий день собирается история тиков и лучших бидов/асков;
- Далее считаем рыночные параметры, необходиммые для расчета политик;
- Затем считаем политики и сохранем их в виде массивов. То есть для каждого значения времени (t), открытой позиции (y), дисбаланса (f), спреда (s) массив выдаст сигнал, в какой зоне нужно работать.
Часть исполнения:
- Загружаем расчитанные массивы;
- По обновления лучшего бида/аска считаем t, y, f, s и получаем соответствующую политику из массивов;
- Формируем сигналы  в соответствии с политикой и выставляем заявки;
- Неисполненные заявки, если они не соответствуют текущей политике, снимаем.

Политики MarketMaking и Pinging не предусматривают какой объем выставлять, чтобы "поймать" спред. Объем определяется исполнителем при выставлении заявки. Для тестов - это всего 1 контракт. Но если какая-то из лимитных заявок не исполняется, а политика при следующем сигнале будет опять маркетмейкерская, то позиция может увеличиваться до тех пор, пока не сработает сигнал по Inventory Control. По сути, тут работает усреднение, но его можно регулировать или совсем исключить, изменив уровень риска (gamma) и допустимое количество заявок по рыночной цене (dzettaMax). 

4. По бэктестам получились результаты приблизительно такие же как у Eskalibur. Правда мой бэктест, пока еще не доведен до ума полностью. Протестировать более менее полную торговую сессию на реальном счете удалось лишь в пятницу из-за постоянных доработок системы.
Вот статистика за 03/07/2015 (с учетом комиссий: биржевая = 0.25, брокерская = половине биржевой (брокер Ай Ти Инвест, тариф Форсаж)):
Symbol             SIU5 (09.2015)
Num.Txns                     1986
Num.Trades                   1986
Net.Trading.PL             474.25
Avg.Trade.PL                 0.24
Med.Trade.PL                -0.38
Largest.Winner              30.92
Largest.Loser              -20.81
Gross.Profits             2304.09
Gross.Losses             -1829.84
Std.Dev.Trade.PL             3.43
Percent.Positive            36.81
Percent.Negative            63.19
Profit.Factor                1.26
Avg.Win.Trade                3.15
Med.Win.Trade                2.62
Avg.Losing.Trade            -1.46
Med.Losing.Trade            -0.38
Avg.Daily.PL               237.13
Med.Daily.PL               237.13
Std.Dev.Daily.PL           335.35
Max.Drawdown              -222.62
Profit.To.Max.Draw           2.13
Avg.WinLoss.Ratio            2.16
Med.WinLoss.Ratio               7
Max.Equity                    585
Min.Equity                      0
End.Equity                 474.25

Эквити

МАE

МFE


По тестам система выглядит вполне замечательно, но и рынок прошлую неделю был не такой волатильный. Текущая неделя (06/07/2015-10/07/2015) показала, что алгоритм требует серьезной доработки для учета волатильности. Но это уже предмет следующей статьи. Работа над алгоритмом и приведение его к стабильным результатам продолжается.

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

  1. Отличное исследование!

  2. Здравствуйте. А Вы не могли бы выложить упоминаемую Вами статью Guilbaud, Fabien, and Huyen Pham, 2013, Optimal high-frequency trading with limit and market orders или дать ссылку, где ее можно скачать?

    • Статью выложена на сайте arxiv.org

      • Спасибо. Статью на сайте arxiv.org видел, она датирована 24 июня 2011. Автор упоминает версию 2013 года, вот и захотелось понять, что в ней появилось нового.

Сообщение

Обратите внимание: вы можете использовать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>