Ідея коротко
Andrea Unger торгує портфель із багатьох невеликих ф'ючерсних систем і раз на місяць вирішує, які з них працюють. Його програма Zeus вимикає систему назавжди за однієї з двох умов. Просадка поза вибіркою перевищила історичну максимальну просадку в 1.5 раза. Або система надто довго не оновлює максимум, тривалості цього флету він не назвав.
Вимкнена система не повертається. Unger не підбирає їй нові параметри: з його досвіду, через кілька місяців вихідна версія працювала краще за виправлену. Якщо ідея ще виглядає здоровою, він бере її вихідний принцип, відкидає фільтри й будує стратегію заново.
Це правило життєвого циклу, а не угоди. Воно вбудовується в будь-яку систему, яка має бектест. Головна пастка в базовій величині: історична просадка з бектесту майже завжди менша за ту, яку стратегія покаже в торгівлі.
Чому це може працювати
Пояснення автора практичне. Система, яка нікуди не веде, займає маржу й тримає ризик, а місце в портфелі можна віддати іншій. Поріг потрібен помітно більший за історичну просадку: звичайна для системи просадка не повинна її вбивати. Unger допускає 40-60% замість 50%, але підбирати поріг за історією вважає ненадійним, і самі правила вимкнення свідомо не оптимізує.
Заборона на «ботокс» теж від автора. Переналаштовані параметри підганяються під останню невдалу ділянку. Нова стратегія з нуля принаймні проходить повний цикл розробки й перевірки поза вибіркою.
Чому історична просадка занижена (пояснення Finetiq):
- Бектест це одна траєкторія. Ті самі угоди в іншому порядку дають іншу просадку, і фактичне значення з історії рідко виявляється найгіршим із можливих.
- Максимальна просадка зростає з довжиною періоду. За п'ять років торгівлі її очікувана глибина більша, ніж за три роки бектесту, навіть якщо стратегія не змінилася.
- Параметри підбиралися на тій самій історії. Відбір серед варіантів віддає перевагу гладким кривим, і просадка на вибірці зміщена вниз.
- Сам Unger розробляє системи на одному контракті без витрат і додає їх пізніше. Просадка, знята до витрат, менша за торгову.
Звідси наслідок. Поріг 1.5× від заниженої бази вимикатиме здорові стратегії частіше, ніж здається. Натомість систему, що повільно вмирає без глибоких просадок, ловить лише другий тригер, за тривалістю флету.
Правила
Базові величини (автор, розрахунок Finetiq)
// до запуску, за бектестом із витратами й тим самим розміром позиції, що в торгівлі
HistMaxDD = максимальна просадка денної кривої капіталу, у грошах
// автор: «історична просадка»; Finetiq: за денною кривою з відкритими позиціями
HistMaxFlat = найдовший період без нового максимуму кривої, у торгових днях // Finetiq
// Finetiq: обережна база замість одного числа
FOR i = 1 TO 1000
зібрати криву з денних P&L бектесту, переставлених блоками по 20 днів
MaxDD_i = максимальна просадка на відрізку завдовжки із запланований живий період
HistMaxDD_MC = 95-й перцентиль MaxDD_i
Вимкнення (автор, другий поріг Finetiq)
// на закритті кожного дня після запуску
Peak = максимум кривої капіталу від дати запуску // Finetiq: рахуємо лише живий період
LiveDD = Peak - Equity
IF LiveDD > 1.5 * HistMaxDD // автор: перевищення на 50%
KILL
IF торгових днів від останнього максимуму > 1.5 * HistMaxFlat // автор: довгий флет; Finetiq: 1.5
KILL
KILL = закрити позиції, скасувати ордери, більше не вмикати // автор: «ніколи більше не грає»
// автор: множник 1.4-1.6 припустимий, підбір за історією ненадійний
Після вимкнення (автор)
// не змінювати параметри вимкненої системи
IF принцип системи ще виглядає робочим
нова розробка з нуля: вихідна ідея без фільтрів, нова перевірка поза вибіркою
// на місце вимкнених додавати нові незалежні системи, орієнтир автора: за ~6 місяців
Варіант B. Titan: тимчасове вимкнення за результатом кривої (автор)
// раз на місяць, за «тіньовою» кривою: вимкнена система далі рахується, але не торгується (автор)
Perf9 = результат за останні 9 місяців
Perf2 = результат за останні 2 місяці
ON = Perf9 > 0 AND Perf2 > 0 AND Perf2 / 2 > Perf9 / 9
// автор: 2 місяці «в середньому кращі» за 9; Finetiq: порівнюємо середній місячний результат
// наступного місяця торгуються системи з ON, найкращі за результатом (автор)
// автор сам подає пороги як приклад, їх можна змінювати
Застосування до картки drift-vwap-pullback
// автор тієї картки підібрав параметри на 2020–2024 і називає 2024–2026 поза вибіркою
HistMaxDD = максимальна просадка 2020–2024 на 1 NQ з витратами // Finetiq
з першого дня 2024 року:
IF LiveDD > 1.5 * HistMaxDD THEN KILL
// питання для перевірки: чи була б стратегія вимкнена на власній out-of-sample ділянці і коли
Параметри
| Параметр | Значення | Звідки |
|---|---|---|
| База | максимальна просадка бектесту | автор |
| Поріг просадки | 1.5 × бази | автор |
| Допустимий діапазон порога | 1.4-1.6 | автор |
| Другий тригер | флет, довший за норму | автор |
| Довжина флету | 1.5 × найдовшого флету в бектесті | Finetiq |
| Відлік живої просадки | від максимуму після запуску | Finetiq |
| Повторне увімкнення | ніколи | автор |
| Обережна база | 95-й перцентиль перестановок блоками по 20 днів | Finetiq |
| Частота перегляду портфеля | раз на місяць | автор |
| Варіант B: вікна результату | 9 і 2 місяці | автор |
| Варіант B: умова | обидва додатні, 2 місяці в середньому кращі за 9 | автор |
Що перевірити
- Хибні вимкнення. Наріжте історію на вікна: 3 роки розробки, 2 роки торгівлі. Для кожної своєї стратегії порахуйте, чи спрацьовував поріг і що стратегія робила після цього. Порівняйте множники 1.3, 1.5 і 2.0 за часткою вимкнень, після яких стратегія відновилася.
- Яка база. Одне число з бектесту без витрат, із витратами і 95-й перцентиль перестановок. Подивіться, наскільки зсувається дата вимкнення.
- Назавжди проти тимчасово. Портфель своїх стратегій у трьох режимах: усе завжди увімкнено, вимкнення назавжди, помісячне ввімкнення за правилом Titan на тіньовій кривій.
- Поріг флету. 1, 1.5 і 2 найдовші флети бектесту. Для стратегій із рідкісними угодами флет може тривати роками без жодної деградації.
- Портфель без заміни. Прогін, де вимкнені стратегії нічим не замінюються. Якщо у вас 2-3 системи, а не 30 зі 100, як у Unger, правило швидко залишить портфель порожнім.
- Out-of-sample чужої стратегії. Схема з блоку «Застосування» на
drift-vwap-pullbackі на будь-якій картці, де автор назвав період підбору параметрів.
Особливості платформ
TradingView (Pine Script)
strategy.risk.max_drawdown(value, type)після досягнення просадки закриває позиції й забороняє нові ордери до кінця тесту. Просадка рахується по всій історії тесту, включно з ділянкою, з якої ви взяли базу. Для відліку від дати запуску потрібен свій лічильник наstrategy.equityі вхідний параметр із датою.- Базу зручно зняти окремим прогоном на ділянці розробки:
strategy.max_drawdownнаприкінці цього прогону. - Вимкнення в бектесті означає, що до кінця графіка угод немає. Щоб побачити, що було б далі, потрібен другий екземпляр стратегії без правила.
- Pine бачить криву однієї стратегії на одному символі. Портфель із багатьох систем і правило Titan тут не зібрати.
MultiCharts і TradeStation (EasyLanguage)
- Крива стратегії:
NetProfit + OpenPositionProfit. Максимум і прапорець вимкнення зберігайте в змінних, дату запуску й базу задайте входами. - Під час увімкнення стратегія перераховується по всій історії. З датою запуску й базою у входах вимкнення відтворюється, але за теоретичними, а не реальними виконаннями. Рішення ухвалюйте за звітом реальних угод.
- Сам Unger рахує ротацію поза платформою: вивантажує з MultiCharts денний P&L кожної системи й збирає матрицю у своїй програмі на MATLAB. Для портфеля з десятків стратегій це ближче до його практики, ніж код усередині однієї стратегії.
MetaTrader 5 (MQL5)
ACCOUNT_EQUITYспільний для всіх радників на рахунку. Криву однієї стратегії збирайте з історії угод за magic:HistorySelect,HistoryDealGetInteger(ticket, DEAL_MAGIC),HistoryDealGetDoubleдляDEAL_PROFIT,DEAL_COMMISSION,DEAL_SWAP, плюс плаваючий прибуток відкритих позицій.- Прапорець вимкнення зберігайте поза пам'яттю радника, у глобальній змінній терміналу або у файлі. Інакше перезапуск терміналу поверне систему в торгівлю.
- Своп і комісія в MT5 ідуть окремими полями угоди. Якщо базу знято в тестері без них, жива просадка буде систематично глибшою.
Де ідея може зламатися
- Поріг 1.5 це евристика одного трейдера. Unger сам називає підбір порога ненадійним і не наводить статистики, як часто вимкнення виявлялися слушними.
- База з бектесту занижена з причин вище. Без поправки правило вимикає частину стратегій, які просто потрапили у звичайну для себе, але не зустрінуту в історії просадку.
- У системи з рідкісними угодами просадка поза вибіркою набирається роками. Правило спрацьовує пізно, коли основні втрати вже сталися.
- Вимкнення назавжди виключає відновлення. Якщо стратегія циклічна, варіант Titan із тіньовою кривою може виявитися кращим, але й він потребує перевірки.
- Правило розраховане на конвеєр розробки. В Unger сотня стратегій на вибір і регулярна заміна. З однією-двома системами воно перетворюється на рішення «припинити торгувати».
- Тривалості флету автор не назвав. Другий тригер у картці повністю наша формалізація.