Рассмотрим сегодня подводные камни при тестировании стратегий. То, что алготрейдер обязательно должен знать и понимать!
Люди часто спрашивают, а какая доходность такой-то стратегии? Или, сколько процентов в месяц делает робот?И постоянно приходится объяснять людям, что
трейдинг это не депозит в банке. Здесь нет фиксированных доходностей. Рынок меняется и результаты торгов тоже в следующем месяце обязательно будут отличаться от предыдущих прибылей и убытков, это может произойти как в лучшую так и в худшую сторону. Это нужно понимать.
Но сейчас речь пойдет немного о другом. Давайте постараемся понять
насколько бэктесты могут быть достоверными и насколько правильно полагаться на статистику полученную на этих тестах.
Безусловно, если бэктест показывает стабильный убыток по стратегии, то этому можно доверять и стратегия отправляется в мусорное ведро. Но если есть сотни или даже тысячи сделок и кривая доходности растет, то такая стратегия уже вызывает интерес!
А теперь начинается настоящая работа аналитика. Потому что мало увидеть статистику, но нужно ещё и понять как им образом она получилась. Правильно бы были посчитаны сделки?
И, как оказывается на практике, не всегда всё настолько точно, как нам того бы хотелось.Приведем пример. Смотрите скриншот выше.
Запуская бэктест в торговом терминале TSLab (шикарное ПО для разработки и анализа стратегий, без шуток) можно заметить что при обновлении данных (котировок) сделки начинают прорисовываться справа налево. То есть, по мере получения всё более дальних (старых) данных система ищет сигнал для входа в позицию исходя из условий стратегии и открывает позицию, если такой сигнал находится. Некоторые сделки действительно будут соответствовать реалиям, но не все!
При тестировании стратегии в реальном времени (очень долго и сложно) сделки открываются по очереди слева направо. И до тех пор пока открытая позиция не будет закрыта новая сделка не произойдет! То есть, сигнал на открытие позиции теоретически может быть, но фактически позиция не была бы открыта, так как мы итак уже в позиции. Поэтому сделки на бэктестах и в реале могут сильно отличаться.
Другой момент: запуская робота в разное время мы можем получить точку входа на разных уровнях, если сигнал на вход был продолжительный. И если у нас тейк-профит и стоп-лосс фиксированные, то и закрытие позиции теперь будет тоже отличаться. А соответственно, это тоже повлияет на открытие следующей позиции и на итоговую статистику.
Ещё есть важная вещь, это низкая ликвидность и свечи с нулевыми или малыми объемами на исторических данных. Бывает так, что люди тестируют стратегию на низколиквидных активах. Исторические данные выглядят вроде бы неплохо. Но, если копнуть глубже, то можно найти много свечей, внимание(!), с нулевым объемом! И на них тестировщик может показывать сделки. Эта дикость была обнаружена ещё 10 лет назад. И до сих пор проблема остается актуальной. Решается она двумя способами:
1. Мы не торгуем неликвид.
2. В стратегиях, мы прописываем в условиях на открытие позиции обязательное наличие минимально необходимого объема на свече.
Помимо этих технических моментов есть ещё и другие не менее важные вещи влияющие на статистику бэктестов. Например, это начальный депозит. Его размер очень важен, так как доходность считается исходя из того какой задан начальный депозит или не задан, тогда берется за основу стоимость одного лота/контракта/штуки актива. И нельзя забывать по накладные расходы. Комиссии тоже должны корректно учитываться в стратегии, потому что без учета комиссий стратегия может показывать положительную доходность, а с комиссиями отрицательную. Всё нужно учитывать. Только тогда ваша система будет жизнеспособной и прибыльной на дистанции!
В одной публикации всего не уместишь, но если вы занимаетесь алготрейдингом и у вас есть свои торговые стратегии, то возможно вам пригодятся мысли изложенные выше. И теперь вы сможете проверить свои стратегии на качество и достоверность по результатам.
В итоге хочется отметить важный момент: как бы точно и кропотливо мы не выстраивали свои стратегии, всё равно в реальной торговли сделки будут отличаться от тестовых! Одно то, что на сервере брокера могут происходить задержки в исполнении заявок уже дает погрешность. Поэтому всегда необходимо закладываться на погрешность в исполнении заявок и на дисперсию в статистических результатах.
По любым вопросам обращайтесь. Поможем, подскажем!
С уважением,
Команда проекта «Робот Скальпер»
https://Robot-Scalper.ru
В «как именно она получилась» «правильно ли были посчитаны сделки» занимает, конечно, очень важное место, но ни чуть не менее важно понимать, как именно получилась эквити в части сколько раз ты гонял стратегию, каким образом, почему остановился именно на этом варианте и обоснована ли эта остановка.
еще тслаб криво считает лимитки — добавляет спред в профит примерно в 20% случаев
еще в тслабе есть 2 ой режим тестирования, когда требуется чтоб цена пересекла уровень… на нем можно делать стресс тест…
Про стакан, простите, Вы написали глупость. Ну откуда его взять, если мы тестируем на исторических данных?! Там есть только OHLCV. И никаких стаканов.
vlad1024, спасибо за ответ. Интересно было бы не понять исполнились вы или нет, а как в тестере хотя бы примерно спрогнозировать возможную реакцию рынка на ваш сайз. Я слышал что так делают, но ума не приложу вообще с какой стороны к этому подступиться. Вот и спросил, может вы думали на эту тему?
И еще вопрос: насколько я понимаю с фортсовским ордерлогом на тестах можно понять своё место в очереди? А вот что с этим делать в реале, ведь лог можно получить только после сессии?
Ордер лог идет в риалтайме по FASTу, но для целей тестирования абсолютно не важно откуда он взялся. По факту это плюс минус поток данных которыми оперирует ядро биржи, все остальное является агрегатами от него. Соответственно, если моделировать мэтчинг, то можно получить максимально приближенное к реальности моделирование исполнения, как по ликвидности так и по критическим значениям задержек.
По поводу реакции рынка, я думаю это слишком сложно реалистично смоделировать.
Вау, не знал. А свой номер в очереди из него можно рассчитать? Т.е. допустим я встал после такого-то объема, и когда сначала сверху накинули, а потом сняли — я могу из ордерлога понять откуда сняли, передо мной или после?
PS Насколько я знаю на CME для этого есть «Market By Order» и ритмик выдает для ценового уровня не только агрегированный объем, но и объемы по каждому ордеру на уровне.
На остальных биржах, насколько я знаю, есть полные аналоги, потому что это то, как в принципе работает матчинг в ядре биржи, вопрос лишь в том куда они могут этот поток отдать.
Market By Order, больше похоже на какой-то агрегат от аналога ордерлога.