Блог им. uralpro

О пользе правильного бэктеста (+ итоги 2019)

    • 17 января 2020, 12:37
    • |
    • uralpro
  • Еще

О пользе правильного бэктеста (+ итоги 2019)

   Хотелось,  традиционно, подвести итоги 2019 года, но  нового и интересного ничего не произошло, результаты на МОЕКС практически не отличаются от года 2018-го. Поэтому расскажу, насколько важно для HFT торговли написать правильный бэктест. Результаты тоже будут, но на примере отдельных алгоритмов, из набора работающих на Московской бирже.

  Для высокочастотной торговли, наверное, самый главный показатель это мгновенная ликвидность. Не буду углубляться в проблему ее измерения, это отдельная задача. В общем случае, чем выше мгновенная ликвидность, тем большую прибыль приносит высокочастотная стратегия. И ваш тест должен правильно обрабатывать весь поток ликвидности, который присутствует в сохраненной маркетдате, чтобы верно эту мгновенную ликвидность отразить. В матчинге бэктеста необходимо сводить в сделки собственные (тестовые) ордера в первую очередь по потоку рыночных сделок используемого актива, и во вторую — по текущей книге заявок. Нарезки в тесте не должно быть никакой, то есть внутреннее время теста должно идти соответственно последней считанной записи в максимальном разрешении, которое транслируется биржей (миллисекунды или даже микросекунды).Также нужно учесть задержку прихода ордеров на биржу после их отправки и задержку коллбэка. Нюансов здесь много, и я как обычно, о них не расскажу:)

  Всегда сравнивайте результаты реальной торговли и результаты, полученные на бэктесте. Под результатами понимается эквити стратегии за определенный период времени. Если реал в течение дня постоянно демонстрирует результаты хуже теста, пускай даже на несколько процентов, то, скорее всего использовать такой тест для HFT нельзя, так как на годовом периоде эти несколько процентов превратятся в сотни. Совпадение за год может выглядеть как на графике в заглавии поста. Или так:

О пользе правильного бэктеста (+ итоги 2019)О пользе правильного бэктеста (+ итоги 2019)

(графики отдельных экземпляров наших алгоритмов. Красная кривая — реал, черная — тест. Под графиком результат в рублевом выражении без учета комисии/комиссия биржи в рублях.  Алгоритмы показаны на  периоде меньше года, если происходила смена рабочего набора)

  Это приемлемое совпадение, которое позволяет полагаться на результаты тестирования и быть уверенным в достаточной производительности высокочастотной стратегии. Иногда даже на хорошем бэктесте можно получить серьезное расхождение эквити. Это говорит о том, что на рынке присутствует какой-то неучтенный фактор. Например, вот результаты одной из наших стратегий на валютном рынке:

О пользе правильного бэктеста (+ итоги 2019)

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

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

Стратегии и алгоритмы автоматической торговли смотрите на моем сайте www.quantalgos.ru

★13
25 комментариев
С этим не поспоришь! Все рабочие алгоритмы торгуются на отдельных суб-счетах или на выходе агрегация ордеров?
avatar
bstone, агрегации нет, каждый экземпляр выставляет свои ордера, но логинов много, иначе будут тормоза
avatar
>Нюансов здесь много, и я как обычно, о них не расскажу
Ну вот, самое интересно и «не расскажу»....)
avatar
бектест никогда не может совпасть с реальной торговлей, тк в реальной торговле ты вносишь изменения в рынок своими заявками и сделками.
avatar
pavard, если объем заявки меньше определенного порога (который даже на Моексе достаточно большой) то влияния в первом приближении на рынок не оказываешь, во всяком случае оно не ухудшит значимо точность бэктеста. Как можно видеть по графикам, 100% совпадения и нет
avatar
uralpro, мы говорим о хфт — тут для создания движения в любую сторону иногда достаточно не то что сделки но и заявки в 1лот. наблюдал однажды такую картину — не даешь роботу по настоящему выставлять заявки — он прибыльный( с учетом мат ожидания задержки ), выпускаешь — не прибыльный. вернее так — чем выше частота и меньше амплитуда торговли — тем меньший объем вызывает движения. и наобарот.
avatar
pavard, у вас что то с тестом. 1 лот на ликвидных инструментах никак на рынок влиять не может, даже теоретически
avatar
uralpro, да, я что-то разогнался, не может. поддерживаю. надо будет теоретически разобраться с тестом. спасибо.
avatar
pavard, если ваши объемы позволяют влиять на рынок, то есть алгоритмы и под это :)
avatar
Dmitryy, нет таких алгоритмов. иначе сбербанк не тратил бы миллиарды на тренеровку своих моделей на реальном рынке.
avatar
Спасибо, прочитал с интересом! 
avatar
Просьба писать чаще. FPGA применяете?
avatar
ICWiener, нет, не применяем
avatar
uralpro, хватает стандартных средств или слишко науко-трудоемко?
avatar
ICWiener, что имеется в виду под стандартными средствами? Трудоемко-да, наукоемко относительно. Статистика, теория вероятностей присутствуют, но в простых формах. Технологически все довольно сложно
avatar
uralpro, под стандартными средствами я имею ввиду ПК с операционной системой и рабочим алгоритмом для всех трех задач: получение котировок, обработка данных, отправка заявок.

Сейчас планирую для третьей задачи настроить FPGA (пока ради практики, т.к. у меня вообще не ХФТ, хотя быстрое исполнение бонус даст)
avatar
ICWiener, ну да, вроде все стандартно, только не ПК, а сервер на колокейшене, заточенный под скорость Линукс и не алгоритм, а платформа для управления алгоритмами и всем остальным :))
Про FPGA мы тоже думали, но пока считаю, что временные затраты на ее внедрение не окупятся тем дополнительным доходом, что она даст. Хотя в отношении валютного рынка могу ошибаться
avatar
нужно учесть задержку прихода ордеров на биржу после их отправки и задержку коллбэка
а лучше ли это, чем смоделировать общую задержку одной цифрой?
avatar
Benderoni, думаю, нет, это сильно разные вещи.Колбэк может возвращаться несколько миллисекунд, а ордер доходит до биржи в несколько раз быстрее. И общая задержка усреднит все, и это будет очень неточно
avatar
это стратегии преимущественно маркет-мэйкерского типа или есть и тэйкерские?
avatar
Sergey Pavlov, преимущественно мэйкерские, но если можно взять тэйком, то любая стратегия так и сделает
avatar
В матчинге бэктеста необходимо сводить в сделки собственные (тестовые) ордера в первую очередь по потоку рыночных сделок используемого актива, и во вторую — по текущей книге заявок.
У такой последовательности есть теоретическое обоснование?

Могли бы Вы показать, как влияет на результат бэктеста исключение одного из пунктов или замена их местами?
avatar
fxsaber, последовательность сама сложится — если ваша заявка пересекает спред, то и матчить ее нужно по стакану, если нет — то смотрите на сделки. Исключать ни один пункт нельзя, тест будет не точным
avatar
Исключать ни один пункт нельзя, тест будет не точным
Звучит голословно. Есть два типа бэктеста.

Один — это воспроизведение своей реальной торговли на исторических данных. Там, действительно, учет сделок имеет место быть.

Второй — это оценка потенциального результата ТС на истории, которая там не торговала.

Поэтому и предложил обосновать свою рекомендацию хоть какими-то сравнительными данными.
avatar
fxsaber, я пишу только то, что вижу на основании десятков тысяч проделанных тестов и сравнения их с реальной торговлей. Обосновывать ничего не собираюсь, мне это зачем? Про два типа теста не понял. Тестируем всегда на исторических данных, а сравнение с реальной торговлей происходит только апостериори, по тестам, сделанным на проверочной выборке
avatar

теги блога uralpro

....все тэги



UPDONW
Новый дизайн