AI TRADERS
инструкции AI Traders · 19 мин чтения

Бэктест стратегии: как проверить идею до реальных денег

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

Карта статьи: Бэктест стратегии: как проверить идею до реальных денег. Что именно проверяет бэктест стратегии? С чего начать, чтобы правило стало проверяемым? Как выбрать историю и разделить выборки? Почему «вся история в плюс» ещё ничего не доказывает?

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

Торговая стратегия начинается не с красивой кривой доходности. Она начинается с правила, которое другой человек сможет повторить по тем же данным и получить близкий результат. Если правило нельзя записать без слов «примерно», «на глаз» и «если кажется», пока тестировать нечего.

Что именно проверяет бэктест стратегии?

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

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

  • актив: BTC/USDT;
  • таймфрейм: 1 день;
  • источник сигнала: цена закрытия свечи;
  • условие входа;
  • условие выхода;
  • момент исполнения: например, открытие следующей свечи;
  • размер позиции;
  • комиссии и прочие издержки.

А фраза «покупать после сильного отката от уровня» пока не стратегия. Она может стать ею, если определить, что такое уровень, сильный откат, допустимый объём и конкретная цена входа. Базовые конструкции для таких правил разбирает гайд про технический анализ криптовалют, но индикатор или уровень сами по себе не создают преимущество.

Смысл бэктеста не в поиске максимального процента на графике. Его нормальный результат выглядит так: «идея пережила такие-то периоды, потеряла столько-то после учёта затрат, имеет такие-то слабые места и требует дальнейшей проверки».

Сначала выписывают правило в виде последовательности действий, которую можно выполнить без догадок. Затем проверяют, есть ли для каждого действия нужные данные: цена, время сигнала, состояние позиции, доступный капитал. После этого задают начальный баланс и порядок расчёта сделок. Только когда правила превращены в однозначные условия, их прогоняют по истории и смотрят не только на итоговый баланс, но и на список всех входов, выходов и периодов убытка.

Условный учебный пример: есть 10 000 USDT, торговля ведётся только BTC/USDT на дневных свечах, коротких позиций нет. Допустим, правило требует купить BTC на открытии следующего дня, если вчерашнее закрытие выше 20-дневной средней, а позиции сейчас нет. Если вчерашнее закрытие ниже средней, позицию закрывают на следующем открытии. Размер каждой покупки равен всему свободному балансу. Для расчёта заранее принимают, что данные по закрытию известны лишь после завершения дня, а следующая сделка не может исполниться по цене уже закрывшейся свечи. Проверка идёт по шагам: для каждой даты считают среднюю только из предыдущих и текущей доступных свечей, фиксируют сигнал, переносят исполнение на следующий день, обновляют состояние счёта и записывают результат операции.

Типичная ошибка в таком примере состоит в том, что тест покупает по цене закрытия дня, на основании которого был получен сигнал. Это создаёт недоступное преимущество: на момент принятия решения закрытие ещё не было окончательно известно. Ошибку легко заметить в журнале сделок: сигнал и исполнение происходят в одну и ту же точку времени. Исправление не в подборе другого периода средней, а в корректном сдвиге исполнения на следующий доступный момент.

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

С чего начать, чтобы правило стало проверяемым?

Начни с исследовательской карточки стратегии на одну страницу. В ней фиксируются все решения до запуска теста. Это защищает от привычки менять правило после каждого неудачного участка истории и называть получившуюся версию первоначальной идеей.

Запиши параметры в таком порядке:

  1. Рынок и инструмент. Например, спот BTC/USDT или бессрочный контракт ETH/USDT. Разделяй их: у фьючерса есть плечо, ликвидация и фандинг.
  2. Период и таймфрейм. Например, часовые свечи с января 2022 года по декабрь 2025 года. С уменьшением таймфрейма растёт влияние спреда, задержки и качества внутрисвечных данных.
  3. Сигнал. Укажи точную формулу или проверяемое условие. «RSI ниже 30 на закрытии часовой свечи» относится к проверяемым условиям. Формулировка «RSI выглядит перепроданным» слишком расплывчата.
  4. Вход. Определи тип заявки и время отправки. Рыночная заявка на следующем открытии и лимитная заявка по конкретной цене дают разные результаты.
  5. Выход. Укажи стоп, тейк, обратный сигнал, ограничение по времени в позиции и правило для частичного закрытия.
  6. Размер риска. Например, риск на сделку как доля капитала, максимальное число одновременных позиций и запрет на усреднение.
  7. Издержки. Комиссия, проскальзывание, спред, фандинг, заёмные средства, если они есть.
  8. Метрики решения. До запуска теста выбери приемлемые показатели: просадку, число сделок, соотношение прибыли к риску, стабильность на разных периодах.

Для стопа недостаточно поставить «минус 2%». Его место должно следовать из логики сетапа, а размер позиции должен подстраиваться под расстояние до стопа. Формулу и примеры можно сверить в материале как рассчитать стоп-лосс.

Не добавляй в правило то, чего не было известно в момент сделки. Если дневная свеча закрылась в 23:59, использовать её максимум, минимум и закрытие для входа «внутри этой же свечи» нельзя. Это подсматривание в будущее, или look-ahead bias.

Как выбрать историю и разделить выборки?

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

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

Участок рынкаЧто можно увидетьЧто часто ломается
Сильный ростУмеет ли стратегия брать тренд и не выходить слишком раноКонтртрендовые шорты, слишком короткие тейки
Резкое падениеКак ведут себя стопы, ликвидность и фандингУсреднение без лимита, запоздалые входы
БоковикСколько капитала съедает частая смена сигналовТрендовые фильтры и пересечения средних
Высокая волатильностьРеалистичны ли цены исполненияСтопы, рыночные заявки, короткие таймфреймы
Спокойный рынокЕсть ли преимущество без большого движенияСтратегии, которые живут на редких импульсах

Удобная схема выглядит так:

  1. Отведи раннюю часть истории под разработку.
  2. Выдели следующий непрерывный период под отложенный тест.
  3. Оставь последний доступный период для форвард-теста в реальном времени.
  4. Не выбирай границы только потому, что они делают график лучше.
  5. Если стратегия работает на нескольких инструментах, проверь её на каждом отдельно, а не склеивай результаты в один красивый отчёт.

Статья Bailey, Borwein, López de Prado и Zhu о вероятности переобучения бэктеста предлагает более строгий подход: комбинировать разные разбиения данных на внутривыборочные и вневыборочные участки. Авторы отмечают, что обычный единичный hold-out не всегда надёжно показывает проблему в торговых исследованиях. Для частного трейдера практический вывод проще: один удачный тестовый период не стоит считать независимым подтверждением.

Почему «вся история в плюс» ещё ничего не доказывает?

Потому что итоговая доходность скрывает путь, которым стратегия к ней пришла. Две системы могут показать одинаковые 40% за три года, но одна пережила просадку 12%, а вторая почти потеряла половину счёта. Для торговли это две совершенно разные идеи.

Смотри на отчёт в нескольких проекциях:

  • чистая доходность, то есть после всех заложенных издержек;
  • максимальная просадка и её длительность;
  • количество сделок: десять сделок могут быть случайностью, тысяча скальперских сделок требует особенно точной модели затрат;
  • доля прибыльных сделок вместе со средним выигрышем и средним убытком;
  • profit factor, отношение валовой прибыли к валовому убытку;
  • средняя продолжительность позиции;
  • результат по годам, кварталам или рыночным режимам;
  • поведение после худшей серии сделок.

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

Сравни стратегию с простым ориентиром. Для спота это может быть buy and hold того же актива, для фьючерсной идеи - удержание позиции с тем же направлением и риском. Если сложная система чуть-чуть обгоняет ориентир только до комиссий, у неё нет запаса прочности.

Как правильно заложить комиссии в бэктест?

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

Таблица комиссий Binance для USDⓈ-M фьючерсов публикует ставки maker и taker, а таблица для спота Binance - ставки для спотовых сделок. Это не универсальные условия для всех площадок и всех пар: уровни, скидки, акции и правила меняются. В своей модели используй текущую таблицу выбранной биржи и свой тип заявки.

Учебный расчёт ниже не описывает доходность стратегии. Это только иллюстрация того, как затраты могут съесть сделку.

Допущения:

ПараметрЗначение
Номинал позиции10 000 USDT
Вход и выходРыночными заявками
Условная комиссия taker0,0500% на каждую сторону
Проскальзывание0,0300% на вход и 0,0300% на выход
Валовой результат сделки до затрат+0,3000%

При таких допущениях валовой результат на номинал составляет 30 USDT. Комиссии за вход и выход составляют 10 USDT, условное проскальзывание - ещё 6 USDT. До учёта фандинга чистый результат остаётся 14 USDT. Если валовое преимущество в сделке ниже суммарных затрат, стратегия статистически может быть права по направлению и всё равно терять деньги.

В тесте полезно прогнать минимум три режима:

  1. оптимистичный, но реалистичный для ликвидной пары;
  2. рабочий, который соответствует твоему обычному исполнению;
  3. стрессовый, с заметно худшими затратами.

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

Что такое проскальзывание и почему его нельзя ставить нулевым?

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

В документации TradingView Strategy Properties параметр slippage задан в тиках и добавляется к цене исполнения рыночных и стоп-заявок. Это удобная настройка, но она не знает фактической глубины стакана выбранной биржи и не превращает исторический тест в запись реальных сделок.

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

Проверь три вопроса:

  • какой был средний спред на нужной паре и в нужные часы;
  • какой объём обычно стоит рядом с твоей ценой;
  • что происходило с исполнением во время движений, ради которых стратегия входит в рынок.

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

Почему свеча не рассказывает, что происходило внутри неё?

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

На исторических OHLC-данных порядок событий внутри свечи зависит от модели исполнения, выбранной в тесте. Поэтому перед интерпретацией результата проверь правила исполнения заявок и доступность внутрисвечных данных в используемом сервисе.

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

Чтобы снизить ошибку:

  1. сначала проверь правило на более низком таймфрейме;
  2. используй доступные внутрисвечные данные и отдельно фиксируй, где их не хватает;
  3. исключи или вручную проверь сделки, где вход и оба выхода попали в одну свечу;
  4. не используй нестандартные графики вроде Renko или Heikin Ashi для симуляции рыночных цен;
  5. для критичных стратегий сверяй тест с данными сделок и стакана, если они доступны.

В официальном описании Bar Replay TradingView отдельно указывает, что глубина доступной истории зависит от инструмента. Поэтому не предполагая, что любой график содержит одинаково полную историю, сохраняй источник данных, таймфрейм и дату выгрузки вместе с отчётом.

Как учесть фандинг, плечо и ликвидацию на фьючерсах?

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

Плечо не увеличивает преимущество стратегии, оно увеличивает чувствительность счёта к движению цены и издержкам. Если в бэктесте позиция проседает на 8%, а торговля ведётся с крупным плечом, реальный риск определяется не только стопом. На него влияют маржа, правила биржи, цена ликвидации и возможность исполнить выход.

Модель для фьючерсной системы должна содержать:

  • тип контракта и валюту маржи;
  • фактическую или консервативную модель фандинга;
  • комиссию maker и taker;
  • плечо и размер начальной маржи;
  • правила частичного закрытия;
  • ликвидацию как риск-сценарий, а не как обычный выход;
  • периодичность расчётов и доступность позиции в момент сильного движения.

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

Как распознать переобучение до потери денег?

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

Самый распространённый путь к переобучению выглядит знакомо. Ты перебираешь длины средних 10, 11, 12, 13 и так далее. Затем меняешь RSI, стоп, тейк, фильтр объёма, часы торговли и актив. В конце выбираешь комбинацию с максимальной кривой. Оптимизация сама по себе допустима. Но лучший результат среди множества попыток мог оказаться случайным победителем.

В работе Bailey и соавторов The Probability of Backtest Overfitting описан подход CSCV для оценки вероятности переобучения при выборе стратегий по историческим симуляциям. Не обязательно внедрять его с первого дня, но сам принцип стоит запомнить: чем больше вариантов ты просмотрел, тем выше стандарт доказательств для финального кандидата.

Признаки переобучения:

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

Надёжнее искать не одну точку с лучшими настройками, а устойчивую область. Если средняя длина показывает близкие результаты в диапазоне 45-65 дней, это лучше, чем единственный «магический» параметр 53.

Как провести walk-forward и форвард-тест?

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

Простой walk-forward-процесс:

  1. Выбери первое окно истории, например два года.
  2. Разработай правило только внутри него и зафиксируй настройки.
  3. Не меняя настройки, проверь следующий квартал или полугодие.
  4. Передвинь окно вперёд, если этого требует логика стратегии.
  5. Склей только вневыборочные результаты всех шагов.
  6. Отдельно посмотри, как часто и почему менялись параметры.

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

Демо-счёт полезен как тренажёр интерфейса и дисциплины, однако он не идентичен реальной торговле. Разницу помогает увидеть материал как тренироваться на демо-счёте. В демо проще нажать кнопку без колебаний, а исполнение может не совпасть с живым рынком. Поэтому форвард-тест подтверждает процесс, но тоже не гарантирует будущий результат.

Какие ошибки чаще всего делают при тестировании?

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

Проверь себя по этому списку:

  • Сигнал использует только данные, доступные к моменту решения.
  • Цена входа соответствует следующему доступному моменту исполнения, а не цене уже закрытой свечи.
  • Комиссия списана на входе и выходе.
  • Проскальзывание задано ненулевым и проверено стресс-сценарием.
  • Лимитная заявка не считается исполненной только потому, что цена коснулась уровня.
  • В фьючерсной модели учтены фандинг, плечо и риск ликвидации.
  • История содержит несколько рыночных режимов.
  • Есть отложенная выборка, которую не использовали при подборе параметров.
  • Сравнение сделано с простым ориентиром.
  • Худшая просадка и худшая серия сделок приемлемы для твоего риска.
  • Результаты разбиты по периодам, активам и направлениям сделок.
  • Правила сохранены в версии, которую можно повторить.

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

Какие ограничения остаются даже у честного теста?

Даже аккуратный бэктест остаётся моделью. Он не знает будущих изменений ликвидности, правил биржи, доступности пары, задержек API, остановок торгов и твоих решений в стрессовый момент. Его задача - сузить неопределённость, а не убрать её.

Исследование David Marcos о transaction costs in execution trading рассматривает, в частности, влияние рынка и риск исполнения как компоненты торговых затрат. Практический смысл для частного теста простой: стоимость сделки не всегда постоянна. В спокойный момент твой ордер может пройти близко к расчётной цене, во время импульса - заметно хуже.

С особой осторожностью относись к таким результатам:

  • стратегия сделала мало сделок;
  • её преимущество появилось только на одной монете;
  • прибыль собрана на очень старой истории без проверки свежего периода;
  • модель предполагает бесконечную ликвидность;
  • результат требует точного попадания в цену;
  • параметры нельзя менять даже на один шаг;
  • стратегия не переживает консервативный сценарий затрат.

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

Какой порядок действий использовать перед первой сделкой?

Рабочий порядок простой: сначала формализировать идею, потом пытаться сломать её цифрами и только затем проверять выполнение в текущем рынке. Не начинай с суммы депозита и не выбирай риск по тому, как выглядит кривая доходности.

  1. Сформулируй одну торговую гипотезу.
  2. Запиши вход, выход, размер позиции и запреты.
  3. Собери данные и проверь их полноту.
  4. Раздели историю на разработку и отложенную проверку.
  5. Запусти тест с комиссиями и проскальзыванием.
  6. Посмотри на просадку, серии убытков и результат по режимам рынка.
  7. Проведи стресс-тест затрат и параметров.
  8. Сделай walk-forward-проверку.
  9. Запусти форвард-тест и веди журнал каждого сигнала.
  10. Только после этого решай, соответствует ли риск твоему плану.

Журнал важен даже для алгоритмичного правила. Он показывает разрыв между моделью и исполнением: пропущенную заявку, иной размер позиции, задержку, ошибку в настройке. Структуру записей можно взять из гайда как вести дневник криптотрейдера.

Бэктест становится полезным, когда ты готов принять и отрицательный вывод. Иногда лучший результат исследования: вовремя найденная причина не запускать стратегию на реальные деньги.

Источники

  1. TradingView, Strategy Properties - параметры комиссии, проскальзывания и размера заявки в тестировании стратегий.
  2. TradingView, Concepts / Strategies - справочник по стратегиям Pine Script.
  3. TradingView, Bar Replay: how and why to test a strategy in the past - глубина исторических данных для инструментов на платформе.
  4. Binance, USDⓈ-M Futures Trading Fee Rate - таблица maker/taker-комиссий для бессрочных фьючерсов.
  5. Binance, Spot Trading Fee Rate - таблица комиссий для спотовой торговли.
  6. Bailey, Borwein, López de Prado, Zhu, The Probability of Backtest Overfitting - методология оценки риска переобучения исторических симуляций.
  7. Marcos, Transaction Costs in Execution Trading - исследование торговых затрат, влияния рынка и риска исполнения.
Сколько сделок нужно для бэктеста?

Универсального числа нет. Чем реже стратегия торгует, тем длиннее нужна история. Оценивай не только число сделок, но и наличие разных рыночных режимов: рост, падение, боковик и резкие движения.

Можно ли доверять бэктесту из TradingView?

Можно использовать его как этап исследования, но не как доказательство будущей прибыли. Нужно отдельно задать комиссии, проскальзывание, правила исполнения и проверить стратегию на данных вне периода разработки.

Нужно ли учитывать фандинг в тесте фьючерсной стратегии?

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

Чем бэктест отличается от демо-торговли?

Бэктест прогоняет правило по прошлым данным, а демо проверяет, получится ли применять правило в текущем рынке. Демо не воспроизводит полностью исполнение и психологию торговли реальными деньгами.

Что делать, если стратегия прибыльна только при одном наборе настроек?

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

Материал подготовлен с помощью ИИ. Проверяй действующие условия по ссылкам на первоисточники. Учебные примеры не описывают будущую доходность.