Все статьиИнвестиции

Как я нашёл баг в своём бэктесте и потерял 30% прибыли (но спас депозит)

История о том, почему красивые цифры на истории — это ещё не повод запускать робота на реальные деньги.

А так — с честной моделью гэпов
А так — с честной моделью гэпов

Я разрабатываю торгового бота для форекса. Однажды я собрал стратегию, которая на истории в 2 года показывала Profit Factor 1.32 и винрейт 53%. Я был уверен, что нашёл грааль. Но когда я добавил в симулятор всего одну строчку — модель проскальзывания при гэпах — прибыль испарилась. Вот как это было.

Я тестировал стратегию азиатского пробоя. Логика простая: ночью рынок стоит в узком диапазоне, а утром, на открытии Лондона, цена часто пробивает границу. Мы ставим два стоп-ордера: выше максимума и ниже минимума ночи.

Первые прогоны на GBPUSD за два года показали:

  • Profit Factor: 1.32
  • Win Rate: 53.1%
  • Чистая прибыль: +1925 пипсов
  • Walk-Forward: 7 из 8 окон прибыльные.

Цифры выглядели настолько стабильными, что я почти поверил в успех. В бэктесте стратегия входила в рынок по цене стоп-ордера.

Где был подвох.

Проблема в том, как симулятор обрабатывал «гэпы» — ситуации, когда цена открытия бара уже находится за уровнем моего стоп-ордера. В реальной торговле брокер исполнил бы мой ордер по текущей рыночной цене, которая может быть хуже. А мой старый код «рисовал» идеальный вход по цене ордера.

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

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

  • EURUSD: PF упал с 1.18 до 0.96
  • GBPUSD: PF упал с 1.32 до 1.02
  • USDJPY: PF упал с 1.40 до 1.10
  • EURJPY: PF упал с 1.29 до 0.98

Вся «прибыль» оказалась артефактом. В 37% дней цена уже выходила за границы диапазона до момента постановки ордеров. Старый бэктест входил по цене, которой на рынке уже не было.

Что я понял.

Этот случай научил меня трём вещам:

  1. Любая модель гэпов врёт в свою пользу, пока не доказано обратное. Если ваш бэктест не учитывает проскальзывание, он показывает вам сказку.
  2. Проверять нужно не «сработала ли стратегия», а «что именно произошло на конкретном баре в момент входа».
  3. PF 1.3 без walk-forward и проверки на устойчивость к спреду — это ещё не edge, а просто оптимистичная симуляция.

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

А если вы тоже пишете ботов или тестируете стратегии, заглядывайте в мой Telegram-канал «Грааль не найден». Там я разбираю чужие и свои стратегии, показываю код, цифры и провалы. Без инфоцыганства и обещаний «заработать за 3 дня».

#бэктест, #алготрейдинг, #python, #трейдинг, #личный_опыт

Источник:
Нет комментариев. Ваш будет первым!
Загрузка...