Блог им. robot-scalper

Бэктестирование и статистика в алготрейдинге. Robot-Scalper

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

Бэктестирование и статистика в алготрейдинге. Robot-Scalper
Люди часто спрашивают, а какая доходность такой-то стратегии? Или, сколько процентов в месяц делает робот?И постоянно приходится объяснять людям, что трейдинг это не депозит в банке. Здесь нет фиксированных доходностей. Рынок меняется и результаты торгов тоже в следующем месяце обязательно будут отличаться от предыдущих прибылей и убытков, это может произойти как в лучшую так и в худшую сторону. Это нужно понимать.

Но сейчас речь пойдет немного о другом. Давайте постараемся понять насколько бэктесты могут быть достоверными и насколько правильно полагаться на статистику полученную на этих тестах.

Безусловно, если бэктест показывает стабильный убыток по стратегии, то этому можно доверять и стратегия отправляется в мусорное ведро. Но если есть сотни или даже тысячи сделок и кривая доходности растет, то такая стратегия уже вызывает интерес!  А теперь начинается настоящая работа аналитика. Потому что мало увидеть статистику, но нужно ещё и понять как им образом она получилась. Правильно бы были посчитаны сделки?
И, как оказывается на практике, не всегда всё настолько точно, как нам того бы хотелось.Приведем пример. Смотрите скриншот выше.

Запуская бэктест в торговом терминале TSLab (шикарное ПО для разработки и анализа стратегий, без шуток) можно заметить что при обновлении данных (котировок) сделки начинают прорисовываться справа налево. То есть, по мере получения всё более дальних (старых) данных система ищет сигнал для входа в позицию исходя из условий стратегии и открывает позицию, если такой сигнал находится. Некоторые сделки действительно будут соответствовать реалиям, но не все!
При тестировании стратегии в реальном времени (очень долго и сложно) сделки открываются по очереди слева направо. И до тех пор пока открытая позиция не будет закрыта новая сделка не произойдет! То есть, сигнал на открытие позиции теоретически может быть, но фактически позиция не была бы открыта, так как мы итак уже в позиции. Поэтому сделки на бэктестах и в реале могут сильно отличаться.

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

Ещё есть важная вещь, это низкая ликвидность и свечи с нулевыми или малыми объемами на исторических данных. Бывает так, что люди тестируют стратегию на низколиквидных активах. Исторические данные выглядят вроде бы неплохо. Но, если копнуть глубже, то можно найти много свечей, внимание(!), с нулевым объемом! И на них тестировщик может показывать сделки. Эта дикость была обнаружена ещё 10 лет назад. И до сих пор проблема остается актуальной. Решается она двумя способами:
​​​​​​​1. Мы не торгуем неликвид.
2. В стратегиях, мы прописываем в условиях на открытие позиции обязательное наличие минимально необходимого объема на свече.

Помимо этих технических моментов есть ещё и другие не менее важные вещи влияющие на статистику бэктестов. Например, это начальный депозит. Его размер очень важен, так как доходность считается исходя из того какой задан начальный депозит или не задан, тогда берется за основу стоимость одного лота/контракта/штуки актива. И нельзя забывать по накладные расходы. Комиссии тоже должны корректно учитываться в стратегии, потому что без учета комиссий стратегия может показывать положительную доходность, а с комиссиями отрицательную. Всё нужно учитывать. Только тогда ваша система будет жизнеспособной и прибыльной на дистанции!

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

В итоге хочется отметить важный момент: как бы точно и кропотливо мы не выстраивали свои стратегии, всё равно в реальной торговли сделки будут отличаться от тестовых! Одно то, что на сервере брокера могут происходить задержки в исполнении заявок уже дает погрешность. Поэтому всегда необходимо закладываться на погрешность в исполнении заявок и на дисперсию в статистических результатах.

По любым вопросам обращайтесь. Поможем, подскажем!

С уважением, 
Команда проекта «Робот Скальпер»
https://Robot-Scalper.ru
13 комментариев
Потому что мало увидеть статистику, но нужно ещё и понять как им образом она получилась. Правильно ли были посчитаны сделки?

 

В «как именно она получилась» «правильно ли были посчитаны сделки» занимает, конечно, очень важное место, но ни чуть не менее важно понимать, как именно получилась эквити в части сколько раз ты гонял стратегию, каким образом, почему остановился именно на этом варианте и обоснована ли эта остановка.

avatar
Replikant_mih, эту стратегию я гонял раз 10. В соцсетях есть скриншоты и данные. Подписчики и клиенты знают. Но, суть не в том сколько раз, а как именно! Не конкретная ведь стратегия рассматривается, а подход к бэктестированию. 
avatar
Robot-Scalper.ru, Я не про эту стратегию, а в целом. Если прогнать стратегию 100 раз с разными параметрами, во всех случаях сделки будут вычислены идеально реалистично. Но если выбрать из этих 100 прогонов прогон с лучшей эквити, цена (ценность) этой эквити будет 0.
avatar
еще тслаб неправильно считает сделки длительностью 1-2 бара — сильно завышает… надо смотреть чтоб таких сделок было 1-2% от общго количества

еще тслаб криво считает лимитки — добавляет спред в профит примерно в 20% случаев

еще в тслабе есть 2 ой режим тестирования, когда требуется чтоб цена пересекла уровень… на нем можно делать стресс тест…
avatar
Нормальный бэктестер должен быть приближен максимально к боевому режиму, то есть быть событийным, а ликвидность хотя бы тривиально брать по стакану.
avatar
vlad1024, абсолютно с вами согласен! Вы сами каким бэктестером пользуетесь для максимального приближения торгов к боевому режиму?

Про стакан, простите, Вы написали глупость. Ну откуда его взять, если мы тестируем на исторических данных?! Там есть только OHLCV. И никаких стаканов. 
avatar
Robot-Scalper.ru, да у меня самописный как раз со стаканами, которые пишутся с биржи. А так это вопрос лишь где взять данные, к примеру для QSCALP была какая-то история стаканов.
avatar
vlad1024, а вы в тестере матчинг делаете?
avatar
Sprite, делаю, но без ордрерлога полноценный трудно сделать, в любом случаи это будет некоторая аппроксимация, либо консервативная, либо оптимистичная. Консервативно, можно на уровне куда встала лимитная заявка находить минимум объема с момента ее постановки, и считать ее исполненной если по уровню пройдет этот объем.
avatar

vlad1024, спасибо за ответ. Интересно было бы не понять исполнились вы или нет, а как в тестере хотя бы примерно спрогнозировать возможную реакцию рынка на ваш сайз. Я слышал что так делают, но ума не приложу вообще с какой стороны к этому подступиться. Вот и спросил, может вы думали на эту тему?

И еще вопрос: насколько я понимаю с фортсовским ордерлогом на тестах можно понять своё место в очереди? А вот что с этим делать в реале, ведь лог можно получить только после сессии?

avatar
Sprite, если  вы бьете по стакану, то плюс минус можно считать его статичным, в общем случаи это даст определенную погрешность на реальном исполнении.
Ордер лог идет в риалтайме по FASTу, но для целей тестирования абсолютно не важно откуда он взялся. По факту это плюс минус поток данных которыми оперирует ядро биржи, все остальное является агрегатами от него. Соответственно, если моделировать мэтчинг, то можно получить максимально приближенное к реальности моделирование исполнения, как по ликвидности так и по критическим значениям задержек.
По поводу реакции рынка, я думаю это слишком сложно реалистично смоделировать.
avatar
vlad1024, 
Ордер лог идет в риалтайме по FASTу

Вау, не знал. А свой номер в очереди из него можно рассчитать? Т.е. допустим я встал после такого-то объема, и когда сначала сверху накинули, а потом сняли — я могу из ордерлога понять откуда сняли, передо мной или после?

PS Насколько я знаю на CME для этого есть «Market By Order» и ритмик выдает для ценового уровня не только агрегированный объем, но и объемы по каждому ордеру на уровне.
avatar
Sprite, можно конечно, по сути там идет поток всех заявок на вставку/удаление из стакана.
На остальных биржах, насколько я знаю, есть полные аналоги, потому что это то, как в принципе работает матчинг в ядре биржи, вопрос лишь в том куда они могут этот поток отдать.
Market By Order, больше похоже на какой-то агрегат от аналога ордерлога.
avatar

теги блога Robot-Scalper.ru

....все тэги



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