Блог им. r0man
Продолжая тему тестирования алгоритма Маркет Мэйкера, поделюсь своими результатами и мыслями по его работе:
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, брокерская = половине биржевой (брокер Ай Ти Инвест, тариф Форсаж)):
Максимально неблагоприятные исполнения:
Максимально благоприятные исполнения:
По тестам система выглядит вполне замечательно, но и рынок прошлую неделю был не такой волатильный. Текущая неделя (06/07/2015-10/07/2015) показала, что алгоритм требует серьезной доработки для учета волатильности. Но это уже предмет следующей статьи. Работа над алгоритмом и приведение его к стабильным результатам продолжается.
Спасибо uralpro и Eskalibur за поддержку, плодотворный обмен идеями и сотрудничество.
Смотрите эту статью, а также другие материалы по алгоритмической торговле на сайте: www.quantalgos.ru
Просто нелогичная фраза получилась)))
А статистика эта чем подсчитана ?
Это за 1 день торгуя 1 контрактом Si ?
Почему тогда Net.Trading.PL не равен Avg.Daily.PL? Или потому что вечёрка как следующий день считается.
Вообще выглядит перспективно, но Max.Drawdown великоват.
Думаю можно поработать в сторону ограничения/прекращения торговли в моменты сильной волатильности.
Заход в маркетмэйкинг одним контарктом по обе стороны. Может добрать до 3 контрактов, затем позция будет закрываться. На графике эквити синяя линия показывает величину открытой позиции.