Перейти до змісту
Увійти

Теорія

Основи бектесту та його пастки

Перевірте правило на минулих цінах і побачте пастки: один вдалий період, задній розум, забагато підгонки і зниклі невдачі.

~8 хв читання · 9 вправ · 250 балів

Перед початком

Дев'ять угод, вісім виграшних

Ти знову на демо-рахунку Pebble, і Nora зробила щось розважливе: перевірила правило на минулих цінах Bluefin Energy, перш ніж торгувати за ним. Дев'ять угод, вісім виграшних, непоганий прибуток після витрат.

Твій план із минулого уроку має бути перевірюваним, тож сьогодні ти побачиш, як такі перевірки можуть ошукати. Ти переглянеш всі угоди правила за дев'ять місяців і знайдеш пастки, через які правило на старих цінах виглядає кращим, ніж буде насправді.

Бектест: правило на минулих цінах, увесь ряд, з витратами

Бектест (backtest) проганяє записане правило на минулих цінах так, ніби за ним уже тоді торгували: кожен вхід, кожен вихід, кожна витрата. Він дешевий, потребує лише таблиці цін і є першим чесним поглядом на правило, яке пройшло тест на перевірюваність з уроку «Торговий план на одній сторінці».

Чесним його роблять дві звички. Проганяй правило на всіх цінах, які маєш, а не на відрізку, що подобається. І враховуй витрати в кожній угоді, бо правило, яке трохи виграє на угоді, після витрат може програвати.

Правило Nora на Bluefin Energy показує обидві. Її 9 угод у лютому–квітні дали +1 233 після витрат. Усі 20 угод із січня по вересень дали −57: до витрат лише +23, а 20 входів і виходів по 4,00 коштували 80.

Набір даних · 20 рядків

Усі угоди за правилом Nora

100 акцій на угоду, 4,00 витрат за вхід і вихід; result — після витрат. in_test_window = yes позначає угоди, які перевірила Nora.

trade_identry_dateentryexit_dateexitsharescostsresultin_test_window
12025-01-3140.232025-02-0641.871004.00160.00no
22025-02-0741.872025-02-1344.611004.00270.00yes
32025-02-1444.612025-02-2044.891004.0024.00yes
42025-02-2645.412025-03-0447.251004.00180.00yes
52025-03-0547.252025-03-1147.941004.0065.00yes

Перші 5 з 20 рядків

Завантажити CSV

За кожним результатом бектесту йде одне питання: що може бути не так із цією перевіркою? Гарне число — це початок перевірки, а не її кінець.

  • Так
    «Усі 20 угод, січень–вересень, по 4,00 витрат на кожну: −57.»
  • Не так
    «9 угод, 8 виграшів, +1 233. Доведено!»

    Шматок ряду, прочитаний як цілий.

Поза вікном: те саме правило, інший ринок

Угоди поза тестовим вікном Nora розповідають решту історії. Угода 1 (+160) і угода 11 (+62) стоять одразу перед підйомом і одразу після нього. Угоди 12–20, з травня по вересень, усі збиткові: від −50 до −259. Разом 11 угод поза вікном дають −1 290.

У травні правило не змінилося. Змінився ринок. Після квітня тренд Bluefin закінчується, і ціна ходить убік: заходить на новий 10-денний максимум, а потім його віддає, як хибні пробої з уроку «Підтримка, опір і пробої» (модуль 5). Правило, що купує кожен новий максимум, купує кожен такий стрибок на вершині.

Зверни увагу й на кількість. На всьому ряді 20 угод. Менше ніж 30 — замало, щоб довіряти результатові, хоч доброму, хоч поганому, тож навіть −57 не вирок. Він лише каже, що +1 233 у вікні дав тренд, а не правило.

9 угод у вікні дали +1 233 після витрат, 11 поза ним втратили 1 290, тож усі 20 угод дали −57. І 20 угод — замало, щоб довіряти будь-якому результату.
  • Так
    «У бокові місяці правило купило 9 стрибків до нового максимуму і на всіх 9 втратило.»
  • Не так
    «Травень–вересень — просто невдача; справжнє правило — лютневе.»

    Лишає частину, що погоджується, і відкидає ту, що ні.

Пастка 1: один вдалий період

Перша пастка — перевірити правило на одному відрізку, який випадково йому пасує. З 3 лютого до 18 квітня Bluefin виросла приблизно з 40 до 56. На стабільному зростанні виграє майже будь-яке правило «купуй»: на новому максимумі, на просіданні, по понеділках. Тоді перевірка вимірює тренд, а не правило.

Правило, що йде за трендом, і діапазон (range) погано поєднуються, а на кожному ринку є і те, і те. Тож чесна перевірка охоплює кілька типів ринку: зростання, падіння й боковий рух, як в уроці «Тренд і діапазон» (модуль 5). Якщо правило заробляє лише в одному з них, запиши це як його межу; це корисне знання, а не провал.

Швидка перевірка для будь-якого тесту: що робила ціна в тестовому вікні? Якщо відповідь «весь час росла», результат мало що каже про правило купівлі.

Тижневі свічки Bluefin, січень–вересень. Тестове вікно, 3 лютого – 18 квітня, — це підйом приблизно з 40 до 56. Після квітня ціна йде вбік, і угоди 12–20 усі збиткові.
Вигадані ціни з навчального ринку Pebble.
  • Так
    «Перевірено на січні–вересні: підйом, вершина і бокові місяці.»
  • Не так
    «Перевірено на лютому–квітні, коли Bluefin виросла з 40 до 56.»

    Правило купівлі на стабільному зростанні вимірює зростання.

Задній розум: вибрати перевірку, вже знаючи відповідь

Задній розум (hindsight) — це вибір способу перевірки, коли відповідь уже відома. Nora вибрала лютий–квітень, «бо там графік виглядав гарно». А гарно він виглядав, бо ціна росла, тож перевірку визначив той самий результат, який вона мала перевірити.

Ліки — трохи дисципліни до того, як дивитися:

  • обери період заздалегідь, наприклад «увесь 2025 рік», і використовуй його весь, разом із боковими місяцями;
  • поділи його: будуй й налаштовуй правило лише на першій частині;
  • останню частину не чіпай і прогони на ній готове правило один раз, як фінальну перевірку.

Недоторкана частина працює, лише поки її не торкаються. Подивилися, підкрутили, прогнали знову — і вона стала ще однією підігнаною частиною.

Витрати, ціни виконання й кількість угод — окремі перевірки; жодна з них не лагодить період, вибраний заднім розумом.

Nora радіє підйому лінії ціни у вікні між шторами, а Alex відсуває штору й показує бокові місяці після нього, які уважно роздивляється Marc.
  • Так
    «Період обрано заздалегідь: січень–вересень. Правило збудовано на січні–червні, перевірено один раз на липні–вересні.»
  • Не так
    «Я перевірила його на місяцях, де графік виглядав гарно.»

    Тест вибрала відповідь.

Пастка 2: перенавчання, правило, підігнане під минуле

Перенавчання (overfitting) — це підкручування правила, доки воно не пасуватиме до одного конкретного минулого, разом із шумом. Звичний шлях: спробувати багато версій на тих самих цінах і лишити найкращу. Nora перебрала всі періоди від 5 до 20 днів; версія з 5 днями дала +1 907, а її початкова з 10 днями — −57.

Правило Nora · є вище

Набір даних · 16 рядків

Те саме правило з 16 періодами

Ті самі ціни, ті самі витрати; net_result — після витрат.

lookback_daystradesnet_result
5201907.00
6201413.00
720946.00
820468.00
920219.00

Перші 5 з 16 рядків

Завантажити CSV

Найкраще з багатьох — частково везіння. Якщо версій досить, одна завжди виглядатиме чудово на будь-якому ряді цін, бо випадково збігається з його випадковими коливаннями. Ці коливання не повторяться.

Ознаки, на які варто зважати:

  • спробували багато версій, показують лише переможця;
  • дуже точні налаштування («5 днів, стоп 2,3 %, лише у вівторки»);
  • більшість прибутку з одного короткого відрізка.

Прості правила з кількома налаштуваннями перенавчаються менше. А чесний крок після будь-якого перебору — той самий, що й проти заднього розуму: один раз прогнати обрану версію на цінах, яких ніхто не бачив. Якщо там вона розвалюється, її підігнали, а не знайшли.

  • Так
    «Один період обрано на січні–червні, потім один прогін на липні–вересні.»
  • Не так
    «Я спробувала 16 періодів на цьому році й лишила той, що дав +1 907.»

    Переможець перебору на тих самих даних — частково везіння.

Читай всю таблицю, а не переможця

Коли тобі показують найкращу з багатьох версій, попроси решту списку. У таблиці Nora 16 періодів на тих самих цінах Bluefin і з тими самими витратами. Найкращий, 5 днів, дав +1 907. Середнє всіх 16 — 6 023 ÷ 16 ≈ 376, а середина списку — близько +148.

Датасет: Те саме правило з 16 періодами · є вище

Тож переможець приблизно вп'ятеро більший за типову версію. Цей розрив — та частина +1 907, яку варто очікувати втратити на нових цінах: вона походить з підгонки під коливання цього року, а не з ідеї.

Важить і форма таблиці. Результати плавно падають від 5 днів до 10, а далі майже не змінюються. Це каже, що короткі періоди здебільшого захопили більше того самого підйому в лютому–квітні — пастки одного вдалого періоду в новій формі.

Чесний підсумок перебору показує типовий результат і розкид, а не верхній рядок.

Те саме правило з періодами від 5 до 20 днів на тих самих цінах: найкращий, 5 днів, дає +1 907 після витрат, 10 днів Nora — −57. Найкраще з багатьох — частково везіння.
  • Так
    «16 періодів: найкращий +1 907, середній близько +376, десять із них — менше ніж +150.»
  • Не так
    «Моє правило дає +1 907 на рік.»

    Видає переможця перебору за результат правила.

Пастка 3: упередження виживання, зниклі невдачі

Остання пастка ховається в чужих перевірках. Допис на форумі перелічує «десять правил, що п'ять років обігрували ринок». Які правила могли потрапити до списку? Лише ті, що досі працюють. Правила, що «вибухнули», тихо прибрали, тож список показує тих, хто вижив, і видає їх за типових.

Це упередження виживання (survivorship bias): ти бачиш лише те, що вижило. Так само працюють списки «найкращих фондів десятиліття»: фонди, що закрилися, просто зникають із таблиці, і середнє виглядає кращим за реальний результат будь-кого. Часто той, хто ділиться списком, навіть не знає, що невдачі зникли.

Питання, яке це виправляє: скільки було на старті, а не лише скільки лишилося? Десять переможців із десяти — вражає; десять із п'ятисот — саме стільки дало б саме везіння.

Разом з одним вдалим періодом, заднім розумом, перенавчанням і замалою кількістю угод це п'ять способів, якими тест виглядає кращим за саме правило.

  • Так
    «Скільки правил було в цьому списку п'ять років тому і що сталося з рештою?»
  • Не так
    «Десять правил, усі виграють п'ять років: іти за одним із них безпечно.»

    Невдачі прибрали ще до того, як ти побачиш список.

Ідеальне виконання і чекліст після кожного бектесту

У бектесті кожен ордер виконується точно за ціною з таблиці. Справжні — ні: ринкові й стоп-ордери трохи прослизають, а ранковий розрив ціни може відкритися одразу за стопом, як показали прослизання й розриви з модулів 1 і 3. Тож реальний результат зазвичай трохи гірший за бектест, тож досвідчені трейдери, як-от Marc, зменшують кожен результат, перш ніж йому довіряти.

Це завершує питання, що йдуть за кожним результатом бектесту:

  • витрати враховано? увесь період, обраний заздалегідь?
  • скільки версій спробували? один прогін на небачених цінах?
  • щонайменше 30 угод? чи не бракує невдач?
  • ціни виконання, які справді можна отримати?

Правило, що пройшло все це, не доведене — лише ще не спростоване. Минуле не обіцяє майбутнього.

Як це складається докупи: бектест — дешевий доказ, і кожна пастка робить його кращим за правило. Правило, що пройшло чекліст, заслуговує на наступний крок: малими угодами на демо-рахунку, із записом кожної угоди в журнал.

  • Так
    «Бектест +600 після витрат на 40 угодах; я розраховую на менше, бо стопи можуть перестрибнути, а ціни виконання — прослизнути.»
  • Не так
    «Тест показує, що стоп щоразу спрацьовував рівно на 48,00, тож мій збиток обмежений цим.»

    Розрив ціни може відкритися нижче за стоп.

Готові потренуватися?

Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.

Розпочати вправи