Bitcoin
Education

Более точный бэктест

Updated
Стать о том как делать бэктесты более точными. Хотя для этого самое главное хорошо понимать и саму тестируемую стратегию, и бэктестинг вообще.

Примечание: увы, но сервис TradingView даёт разное количество свечей, в зависимости от платности аккаунта. А это значит что на более дешевом аккаунте количество свечек может быть меньше (часто), а потому и точность бэктеста будет тоже меньше. Впрочем, эти знания даже более полезны в таком случае.

Равный период

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

Например, тестируя на 1ч ТФ мне сервис даёт данные с 2018 года, но тестируя на 30м ТФ уже только с 2019-го года. Потому как количество свечек по максимуму дают разное. Не удивительно что бэктест на ТФ 1ч покажет больше прибыль чем на 30м ТФ при аналогичных настройках. Раз уж срок теста больше почти в 2 раза (на 1 год больше).

Раз уж известно что при тесте на 30м ТФ я получаю свечки только с начала 2019-го года, то надо бы ограничить период теста с этой даты. С 01.01.2019. И протестировать оба варианта. Для ТФ 30м и для ТФ 1ч. С аналогичными настройками. Тогда на ТФ в 30м я получу более точный результат.

Что значит аналогичные

А вот тут уже надо хорошо понимать саму стратегию. Если ты понимаешь как работают каналы Дончяна (напомню - строятся от максимальной и минимальной цены свечи за заданное количество свечей), то сможешь догадаться что такое аналогичные тут. Должно быть понятно что максимальная цена за 10 часовых свечек это ровно тоже самое что и максимальная цена за 20 свечек получасовых свечек.

Например. Я могу протестировать скрипт RiskTurtle с длинами канала 20 для быстрого и 40 для медленного на ТФ 1 час. А могу протестировать с длинами 40 и 80 для ТФ 30минут. По логике вещей это идентичные настройки, однако... результат бэктеста будет отличаться. Несмотря на равные идентичные настройки и равный срок бэктесте. Почему же так? А потому что есть погрешности, и было бы полезно как они появлются.

Откуда берутся погрешности

Бэктест это не реальная торговля, а упрощенная эмуляция реальной торговли. Чтобы сделать абсолютно точный бэктест, его надо делать на тиковых данных (проще говоря когда график меняется на каждой сделке, это даже меньше чем 1-секундный таймфрейм). Расчеты на тиковых данных ведутся очень долго и тут нам такое не дадут. Кроме того, тиковые данные весят терабайты. В этом и состоит причина почему стратегии чаще всего тестируют в упрощённом режиме эмуляции - там намного быстрее работает. Хоть и появляются погрешности.

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

Если выбрать 30м таймфрейм вместо 1ч и полностью аналогичные настройки (в данном случае надо просто длины канала в 2 раза больше для 30м чем для 1ч), то в среднем свечки и тени станут короче по длине, и таких случае когда свеча была слишком длинной что задела оба ордера станут пореже. Так более точный бэктест может показать прибыль выше или ниже чем менее точный на 1ч.

И как лучше

Конечно лучше всего провести оба варианта бэктеста, убедиться что на обоих хотя бы не сливает до нуля то (а вообще я бы порекомендовал просадку более 50% считать уже сливом, так как при реальной торговле просадка может быть больше расчетной на бэктесте).

Поэтому я для себя тестирую так: сначала на 4х-часовом, потому что на этом ТФ мне количество свечей хватает чтобы протестить всю историю торгов пары с начала времен. Тут мне особенно важно посмотреть сливалась ли стратегия до 50%-ной просадки за всю историю или нет. Ну и уменьшить риски (лот, плечо) если надо. Потом на 1часовом более точно. Если график позволяет 15минутный посмотреть за полгода, то и на 15 минутном тестирую. Если нет, то на 30минутном. Так получаю желаемый результат на 3х разных таймфеймах. Где самый маленький показывает наиболее точный результат, а самый большой показывает скорее просто вероятность слиться в ноль за несколько лет такой торговли.

То есть наиболее достоверный результат бэктеста мы получим на самом маленьком таймфрейме из доступных. А вот живучесть стратегии (не сливается ли полностью?) можно проверить лишь за всю историю. Пока это 4х-часовой для биткойн/доллара. Но так как срок жизни этой монеты растет, то когда-нибудь уже не будет получаться тестировать на 4х-часовом с начала времен, и придется переходить на 6-часовой :)
Note
Тут бэктест на таймфрейме 30минут с настроками длин каналов 40 для быстрого и 80 для медленного (то есть в 2 раза больше дефолтных), а всё остальное дефолтное. Размер комиссии и проскальзывания менять при этом смысла нет, так и стоит 0,1% как по дефолту было.
Technical Indicators

Also on:

Disclaimer