← Усі ідеї
#043ВихідСвінг

Випадковий вхід, ATR-трейлінг і рівний ризик: перевірка, де насправді едж

Експеримент Tom Basso: вхід за монеткою, трейлінг-стоп на 1-2 ATR і однаковий відсоток ризику на 20 ф'ючерсах, 1000 прогонів. Картка описує, як повторити дослід відтворювано й використати його як еталон для свого входу.

The Algorithmic Advantage · Tom Basso · Дивитися відео

Ринки

Ф'ючерси, Сировина, Індекси, Облігації, Форекс

Таймфрейм

D1

Дані

OHLC

Правила

Частково формалізовано

Складність

Середня

Статус

Не перевірено

Частину правил дописали ми, це позначено в тексті.

TradingView потрібні дані або обхідні шляхи
EasyLanguage є пастки
MetaTrader 5 є пастки

Ідея коротко

Tom Basso хотів показати, як мало важить точка входу. Він узяв 20 ф'ючерсів, близько 10 років денних даних і замінив сигнал монеткою. Якщо на закритті дня позиції немає, кидаємо монетку: орел купуємо вранці, решка продаємо. Далі позицію веде механічний трейлінг-стоп на 1 або 2 ATR (сам Basso точно не пам'ятає). Розмір задає однаковий відсоток ризику від поточного капіталу.

Один прогін із монеткою нічого не доводить, тому він запустив цикл із 1000 прогонів і усереднив результати. За його словами, кожна така серія в середньому давала прибуток. Висновок Basso: одержимість входом переоцінена, а роботу виконують вихід, розмір позиції, диверсифікація й тисячі угод.

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

Чому це може працювати

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

Застереження Finetiq важливіше за сам висновок. Якщо в цінах немає трендів, правило виходу саме по собі не створює додатного очікування: на випадковому блуканні середній результат такої системи дорівнює нулю до витрат і від'ємний після них. Отже, прибуток в експерименті Basso це тренди, які були в цих 20 ринках за ці роки, зібрані трейлінг-стопом. Експеримент показує, що вхід не головне для трендової системи на трендових ринках. Твердження «вхід не важливий узагалі» з нього не випливає.

Правила

Експеримент (автор, параметри Finetiq)

// денні бари, кожен ринок портфеля рахується окремо
IF MarketPosition = 0 на закритті дня
    U = Coin(Seed, MarketId, BarDate)           // Finetiq: випадкове число 0..1, див. блок нижче
    IF U < 0.5 THEN BUY AT NEXT BAR OPEN          // автор: орел, купівля вранці
    ELSE            SELL SHORT AT NEXT BAR OPEN   // автор: решка, продаж

ATRn = ATR(21)                     // Finetiq: 21, як ATR у Keltner автора
k    = 2                           // автор: «1 або 2 ATR», пам'ятає неточно

// трейлінг-стоп підтягується лише в бік угоди (автор: «тягнув за ціною»)
Long:  Stop = MAX(Stop[1], Close - k * ATRn)     // Finetiq: від закриття бару
Short: Stop = MIN(Stop[1], Close + k * ATRn)
SELL STOP at Stop    // лонг
BUY STOP at Stop     // шорт
// після спрацювання стопа позиції немає, на найближчому закритті знову монетка (автор)
// цілі немає: вихід лише за стопом (автор)

Розмір позиції (автор, відсоток Finetiq)

RiskMoney = Equity * 0.5%                          // автор: однаковий % поточного капіталу
                                                   // Finetiq: 0.5%, як стартовий ризик у поточній торгівлі автора
Contracts = floor(RiskMoney / (k * ATRn * PointValue))
// Finetiq: Equity = закриті угоди + відкритий прибуток по всіх ринках, рахується перед кожним входом
// Finetiq: якщо Contracts = 0, угода пропускається, а лічильник пропусків пишеться у звіт

Відтворюваність: зерно, багато прогонів, розподіл (Finetiq)

// 1. монетка як функція від (зерно, ринок, дата), а не черговий виклик генератора
Coin(Seed, MarketId, BarDate) = Hash(Seed, MarketId, BarDate) / HashMax
// послідовний генератор ламає порівняння: інший вихід дає іншу кількість угод,
// і всі наступні монетки зсуваються. Хеш дає той самий кидок того самого дня за будь-якого виходу

// 2. серія прогонів
FOR Seed = 1 TO 1000
    прогнати весь портфель
    записати: підсумок після витрат, CAGR, MaxDD, кількість угод, % прибуткових, підсумок по ринках

// 3. читаємо розподіл, а не середнє
Median, P5, P95 для підсумку і MaxDD
ShareProfitable = частка прогонів із підсумком > 0 після витрат

// 4. порівняння варіантів: ті самі 1000 зерен, змінюється лише одне правило
//    (множник стопа, сайзинг, список ринків). Різниця рахується попарно для кожного Seed

Застосування до картки turtle-4w-2w

// A: черепахи як є. Вхід на пробої 20 барів, вихід за 10-барним екстремумом, однаковий ризик
// B: той самий вихід і той самий ризик, вхід за монеткою, Seed = 1..1000
Percentile = частка прогонів B, у яких підсумок гірший, ніж у A
// A вище 95-го перцентиля B: пробій 20 барів додає едж понад вихід
// A в середині розподілу B: результат роблять вихід і розмір
// Finetiq: у B монетка кидається лише в дні, коли A теж міг би увійти (немає позиції),
// інакше B проводить у ринку більше часу і порівняння нечесне

Параметри

Параметр Значення Звідки
Ринки 20 ф'ючерсів автор
Історія близько 10 років, денні бари автор
Вхід монетка на закритті без позиції, виконання вранці автор
Вихід трейлінг-стоп на k ATR, без цілі автор
Множник k 1 або 2 автор (пам'ятає неточно)
Період ATR 21 Finetiq (як у Keltner автора)
Розрахунок трейлінгу від закриття, лише в бік угоди Finetiq
Ризик на угоду однаковий % поточного капіталу автор
Відсоток ризику 0.5% Finetiq (стартовий ризик у торгівлі автора)
Кількість прогонів 1000 автор
Підсумок серії середнє автор
Підсумок серії в картці медіана, 5-й і 95-й перцентилі Finetiq
Джерело випадковості хеш від зерна, ринку й дати Finetiq

Що перевірити

  1. Розподіл після витрат. Повторіть 1000 прогонів із комісією та прослизанням в один тік на вхід і вихід. Дивіться на медіану й частку прибуткових прогонів, а не на середнє: кілька вдалих зерен тягнуть середнє вгору.
  2. Контроль на даних без трендів. Перемішайте денні зміни ціни кожного ринку й проженіть ті самі 1000 зерен. Прибуток має зникнути. Якщо він залишився, у коді зазирання вперед або помилка розрахунку стопа.
  3. Множник і період ATR. k = 1, 2, 3 і період 10, 21, 50 на тих самих зернах. При k = 1 угод у рази більше, і витрати важать сильніше.
  4. Сайзинг. Рівний відсоток ризику проти одного контракту на ринок, ті самі зерна. Так видно, яку частину результату дає розмір, а яку вихід.
  5. Періоди й ринки. Розбийте історію на відрізки по 5 років і проженіть окремо. Потім 1, 5 і 20 ринків. Basso спирався на портфель: на одному ринку розкид між зернами буде величезним.
  6. Еталон для своєї стратегії. Схема з блоку «Застосування»: де підсумок вашої системи лежить у розподілі випадкового входу з тим самим виходом і тим самим часом у ринку.

Особливості платформ

TradingView (Pine Script)

  • math.random(min, max, seed) із заданим seed дає повторювану послідовність. Але це послідовний генератор: за іншого виходу монетки зсунуться. Для попарного порівняння рахуйте свій хеш від зерна й time.
  • Стратегія торгує лише символ графіка, портфельного тесту немає (розділ 5 довідника). Експеримент на 20 ринках у Pine не повторити, лише по одному ринку.
  • Штатного перебору вхідних параметрів у тестері стратегій немає. 1000 зерен вручну нереально, тому вивантажуйте угоди й збирайте розподіл поза платформою.
  • Трейлінг у strategy.exit(trail_points, trail_offset) задається в тіках. ATR-стоп надійніше передавати ціною через stop =, перераховуючи на кожному барі. ta.atr згладжує за Вайлдером.

MultiCharts і TradeStation (EasyLanguage)

  • У вбудованої функції Random задається лише верхня межа, зерна в параметрах немає, і однакова послідовність між запусками не гарантована. Для відтворюваності напишіть свій генератор від входу Seed, номера ринку й дати, наприклад лінійний конгруентний на цілих числах у межах точності double.
  • 1000 прогонів робляться оптимізацією за входом Seed від 1 до 1000: звіт оптимізації і є таблицею результатів по зернах.
  • Портфель із 20 ринків зі спільним капіталом потрібен для правила «відсоток від поточного капіталу». Це Portfolio Maestro або Portfolio Trader. Перевірте, чи підтримує ваша версія портфельного модуля перебір входів, інакше вивантажуйте угоди для кожного зерна.
  • AvgTrueRange це просте середнє TrueRange, а не Вайлдер. Стоп ставте ціною: Sell next bar at StopPrice stop, ордер надсилайте на кожному барі.

MetaTrader 5 (MQL5)

  • Генератор: MathSrand(Seed) в OnInit і MathRand(). Для попарних порівнянь краще той самий хеш від зерна, символу й дати бару, що й на інших платформах.
  • Перебір Seed від 1 до 1000 робиться оптимізацією в тестері. Потрібен повний перебір: генетичний алгоритм пропустить частину зерен.
  • Мультисимвольний режим тестера дає змогу вести 20 символів одним радником. У брокера мають бути всі ринки, а в CFD на ф'ючерси історія часто коротша за 10 років.
  • iATR це просте середнє TR. Розмір лота з ризику: SYMBOL_TRADE_TICK_VALUE, SYMBOL_TRADE_TICK_SIZE, округлення до SYMBOL_VOLUME_STEP. На малому рахунку багато угод округляться до нуля лотів.

Де ідея може зламатися

  • Сам Basso називає такий спосіб торгівлі дурним і вважає, що індикатори додають небагато користі. Це демонстрація, а не стратегія.
  • Цифр немає. Ми знаємо лише, що середнє по 1000 прогонах було додатним. Яким був розкид, найгірший прогін, просадка і чи враховувалися витрати, в інтерв'ю не сказано. Кількість років Basso називає за пам'яттю.
  • Результат залежить від трендів у конкретних 20 ринках за конкретне десятиліття. На іншому відрізку чи на ринках без стійких трендів випадковий вхід із трейлінгом може дати нуль або збиток після витрат.
  • Множник стопа точно невідомий. Між 1 і 2 ATR кількість угод і вага витрат різняться в рази.
  • Випадкова система майже весь час у ринку: після стопа позиція відкривається вже наступного дня. Порівнювати її зі стратегією, яка більшу частину часу поза ринком, без вирівнювання експозиції некоректно.

Джерела

  • 023 - Tom Basso - The Calm Within the Chaos

    The Algorithmic Advantage · Tom Basso · 2024-08-09

    • 26:14Власна торгівля: ризик 0.5% на вході, до 1% у прибутку
    • 56:01Keltner: EMA 21 і ATR близько 21 дня
    • 59:26Ведучий нагадує про експеримент
    • 1:03:47Навіщо: показати, як мало важить вхід
    • 1:05:3920 ф'ючерсів, близько 10 років даних
    • 1:05:51Монетка: орел купівля, решка продаж
    • 1:06:09Трейлінг-стоп на 1 або 2 ATR
    • 1:06:31Однаковий ризик у відсотках від капіталу
    • 1:06:501000 прогонів у циклі, результати усереднені
    • 1:07:22Сам так торгувати не став би

Заявлено автором

Ці цифри й твердження належать автору. Ми їх не перевіряли.

  • Tom Basso прогнав експеримент на 20 ф'ючерсних ринках і, за пам'яттю, приблизно 10 роках даних. Кожну серію з 1000 випадкових прогонів він усереднював, і щоразу в середньому виходив прибуток. Доходність, просадку, витрати й розкид результатів він не назвав.
  • У своїй нинішній торгівлі Basso відкриває позицію з ризиком близько 0.5% капіталу й дозволяє прибутковій позиції дорости до 1% ризику.

Схожі ідеї

Оновлено: 2026-09-10