Хотелось, традиционно, подвести итоги 2019 года, но нового и интересного ничего не произошло, результаты на МОЕКС практически не отличаются от года 2018-го. Поэтому расскажу, насколько важно для HFT торговли написать правильный бэктест. Результаты тоже будут, но на примере отдельных алгоритмов, из набора работающих на Московской бирже.
Для высокочастотной торговли, наверное, самый главный показатель это мгновенная ликвидность. Не буду углубляться в проблему ее измерения, это отдельная задача. В общем случае, чем выше мгновенная ликвидность, тем большую прибыль приносит высокочастотная стратегия. И ваш тест должен правильно обрабатывать весь поток ликвидности, который присутствует в сохраненной маркетдате, чтобы верно эту мгновенную ликвидность отразить. В матчинге бэктеста необходимо сводить в сделки собственные (тестовые) ордера в первую очередь по потоку рыночных сделок используемого актива, и во вторую — по текущей книге заявок. Нарезки в тесте не должно быть никакой, то есть внутреннее время теста должно идти соответственно последней считанной записи в максимальном разрешении, которое транслируется биржей (миллисекунды или даже микросекунды).Также нужно учесть задержку прихода ордеров на биржу после их отправки и задержку коллбэка. Нюансов здесь много, и я как обычно, о них не расскажу:)
Всегда сравнивайте результаты реальной торговли и результаты, полученные на бэктесте. Под результатами понимается эквити стратегии за определенный период времени. Если реал в течение дня постоянно демонстрирует результаты хуже теста, пускай даже на несколько процентов, то, скорее всего использовать такой тест для HFT нельзя, так как на годовом периоде эти несколько процентов превратятся в сотни. Совпадение за год может выглядеть как на графике в заглавии поста. Или так:
(графики отдельных экземпляров наших алгоритмов. Красная кривая — реал, черная — тест. Под графиком результат в рублевом выражении без учета комисии/комиссия биржи в рублях. Алгоритмы показаны на периоде меньше года, если происходила смена рабочего набора)
Это приемлемое совпадение, которое позволяет полагаться на результаты тестирования и быть уверенным в достаточной производительности высокочастотной стратегии. Иногда даже на хорошем бэктесте можно получить серьезное расхождение эквити. Это говорит о том, что на рынке присутствует какой-то неучтенный фактор. Например, вот результаты одной из наших стратегий на валютном рынке:
На быстрых движениях рынка мы видим серьезную разницу с тестом. Можно сделать вывод, что на таких движениях серьезно возрастает задержка выставления ордера на биржу, либо есть более быстрые участники, которые маскируют наши заявки на хорошей движухе, где можно собрать больше профита. Скорее всего в какой-то мере присутствуют оба фактора (и первый из них можно эмулировать в бэктесте).
Итак, при правильном бэктесте довольно просто разработать работающий высокочастотный алгоритм. Если же этот инструмент не высокоточный, то поиск стратегии станет практически нерешаемой задачей.
Стратегии и алгоритмы автоматической торговли смотрите на моем сайте www.quantalgos.ru
Ну вот, самое интересно и «не расскажу»....)
Сейчас планирую для третьей задачи настроить FPGA (пока ради практики, т.к. у меня вообще не ХФТ, хотя быстрое исполнение бонус даст)
Про FPGA мы тоже думали, но пока считаю, что временные затраты на ее внедрение не окупятся тем дополнительным доходом, что она даст. Хотя в отношении валютного рынка могу ошибаться
Могли бы Вы показать, как влияет на результат бэктеста исключение одного из пунктов или замена их местами?
Один — это воспроизведение своей реальной торговли на исторических данных. Там, действительно, учет сделок имеет место быть.
Второй — это оценка потенциального результата ТС на истории, которая там не торговала.
Поэтому и предложил обосновать свою рекомендацию хоть какими-то сравнительными данными.