// разбор

Почему в бэктесте 0 сделок

Бэктест без единой сделки почти всегда значит, что условия входа ни разу не выполнились все вместе на одной свече, — это не нехватка данных и не ошибка. Ниже причины в том порядке, в каком их стоит проверять, где Janorium показывает каждую и как её исправить.

4 минуты чтения

С чего начать

  • Пробный прогон. В панели Пробный прогон редактора график Где срабатывал вход отмечает на последних 500 свечах периода каждый вход и каждую свечу, где условие выполнилось, а позиция не открылась. Если условие не выполнилось ни разу, он так и пишет: «На этих барах условие входа не выполнилось ни разу, и сделок в прогоне нет».
  • Отчёт вашего бэктеста. На вкладке Цена и сделки отметьте Отмечать почти-срабатывания. Панель Почему нет? считает свечи, где выполнились все условия, кроме одного, и показывает, какое условие мешало чаще всего; нажмите на свечу на графике, чтобы узнать, почему именно на ней не открылась сделка. Панель разбирает группу верхнего уровня Все (AND).

1. Условия не выполняются на одной свече

Каждая строка группы Все (AND) должна выполниться на одной и той же свече. Каждая по отдельности может выполняться часто, а вместе — никогда. Обычно виноваты пересечения: CROSS_UP истинно только на той свече, где одна линия пересекает другую, а не всё время, пока она выше, поэтому два пересечения — или пересечение и редкий уровень — должны прийтись ровно на одну свечу.

  • Для состояния берите > или < («выше средней»), а пересечение оставьте для того единственного события, ради которого и вход.
  • Дайте строке окно баров. В её Окне баров выберите в пределах и число баров: строка будет считаться выполненной, если она выполнялась хотя бы на одной из последних N свечей.

2. Порог, до которого рынок не дошёл

RSI ниже 10, падение на 40% от максимума, объём в десять раз выше среднего: таких событий за период может просто не случиться. Панель почти-срабатываний называет условие, которое мешало чаще всего, — ослабьте его, возьмите свечи короче или период длиннее.

Отдельный случай — уровень цены. Условия сравнивают сырые значения, поэтому CLOSE > 60000, написанное для BTC, никогда не выполнится на ETH, а уровень одного года может оказаться далеко от цены другого. Сравнивайте цену с индикатором — со средней, каналом, максимумом последних N свечей.

3. У индикатора ещё нет данных

Фандинг, открытый интерес и другие фьючерсные ряды могут начинаться позже свечей. Пока у ряда нет значения, условие на нём ложно, и стратегия ждёт без всякой ошибки. Начните период после того, как ряд появился.

4. Вход срабатывает, а позиция не открывается

Если на графике пробного прогона есть сигналы без входа, условие выполнилось, но помешало что-то другое:

  • Не помещается размер. Фиксированная сумма больше свободного капитала или размер от риска, маржа которого больше него, — и вход пропускается. Нажмите на такую свечу в отчёте, и он напишет: «Условие выполнилось, но расчёт размера дал ноль — не хватило свободного капитала или маржи».
  • Ордер или сетап, который так и не сработал: лимитный ордер на вход, до которого цена не дошла, сетап, который ни разу не взвёлся, или стоп по неправильную сторону от входа.
  • Лимит ликвидности в режиме пропуска. Ограничение доли объёма свечи по умолчанию урезает ордер до допустимого (Урезать ордер); выбрасывает его только Пропустить сделку.

Что не даёт ноль сделок

  • Прогрев индикаторов. Длинной средней нужна история до первого значения, и Janorium подгружает её из времени до начала периода. Позже начинает торговать только монета, у которой столько ранней истории нет.
  • Позиция, которая не закрывается. Её закрывают в конце периода и считают сделкой.
  • Макс. открытых позиций, кулдаун и повторный вход. Они уменьшают число сделок, но слой, который ещё не входил, войти может всегда.
  • Нет свечей. Монета или период без данных заканчивают запуск ошибкой (NO_CANDLES), а не нулём сделок.
  • Фьючерсные данные на споте. Спотовую стратегию с фандингом или открытым интересом не дадут сохранить.

Всё равно ничего?

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

Идея

Следовать за трендом

Торгует BTCUSDT на споте Binance по 4-часовым свечам.

Покупает, когда экспоненциальная скользящая средняя EMA(20) пересекает EMA(50) снизу вверх, и вкладывает 50% свободного капитала.

Закрывает сделку при убытке −6%. Также закрывает, когда EMA(20) пересекает EMA(50) сверху вниз.

Каждый вход и каждый выход стоят 0.1% комиссии плюс 0.01% проскальзывания.

Открыть в мастере

Мастер откроется с этими ответами. Поменяйте любой из них, потом проверьте стратегию на свечах в панели «Пробный прогон» редактора.

Частые вопросы

Почему в бэктесте нет ни одной сделки?

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

Почему стратегия перестала торговать, когда я добавил условие?

Каждая строка группы «Все (AND)» должна выполниться на одной свече, поэтому новая строка может только убрать входы. Если новая строка — пересечение, она истинна лишь на одной свече: для состояния берите > или <, или дайте строке окно баров.

Съедает ли длинный индикатор начало бэктеста?

Нет. Janorium подгружает историю, нужную индикатору, из времени до начала периода, поэтому у 200-дневной средней есть значение уже в первый день теста — если монета торговалась столько до него.

Проверьте свою идею

Создайте бесплатный аккаунт, начните с шаблона или своих правил и прочитайте первый отчёт.

Другие руководства