Ідея коротко
Є два способи вести розмір позиції. Перший: порахувати розмір під час входу й більше його не чіпати. Другий: регулярно підлаштовувати позицію під поточну волатильність, зменшуючи її, коли ринок розгулявся, і збільшуючи, коли він затих. Другий спосіб називають vol-targeting або контролем волатильності.
Moritz Seibert і Moritz Heiden з Takahé Capital торгують першим способом. ATR вимірюється один раз у момент відкриття угоди, і розмір тримається до виходу. Капітал для розрахунку (trade level) береться не з поточного рахунку, а з умовної величини. Її переглядають рідко й лише за реалізованим прибутком, відкритий прибуток до розрахунку не входить.
Картка задає цей блок для будь-якої системи й контрольний варіант зі щоденним підлаштуванням, щоб перевірити твердження авторів на своїх угодах.
Чому це може працювати
Аргументи авторів:
- Менше угод. Кожне підлаштування платить комісію і спред, а фіксований розмір їх не платить зовсім.
- Волатильність погана міра ризику. Вона симетрична й однаково рахує рух у ваш бік і проти вас.
- Підлаштування ламає логіку системи. Шорт на ринку, що падає, зазвичай потрапляє на зростання волатильності, і правило урізає виграшну позицію. Приклад авторів: нафта у 2020 році.
- Підлаштування зрізає правий хвіст. Крива стає гладшою, але трендова система живе рідкісними величезними угодами, і саме їхній розмір зменшується.
- Тезу «волатильність зростає біля розворотів» їхні дані не підтверджують. Облігації роками падали плавно. Контроль волатильності в такій ситуації нарощував би позицію, яка почала втрачати.
Про свій підхід автори чесно кажуть: єдиний замір може припасти на момент незвично низької або високої волатильності, і це буває і плюсом, і мінусом. Дослідження, на яке вони посилаються, в інтерв'ю не розкрито. Цифр щодо нього немає.
Trade level за закритими угодами автори називають консервативним: плече не нарощується автоматично на кожній хвилі відкритого прибутку.
Правила
Блок розміру (автори, числа Finetiq)
// рахується лише в момент сигналу на вхід
// trade level: умовний капітал для розрахунку розміру (автори)
// тримається сталим і переглядається за реалізованим прибутком, коли P&L помітно змінився
ClosedEquity = InitialCapital + сума закритих угод // відкритий прибуток не входить (автори)
IF перший торговий день місяця // Finetiq: перевірка раз на місяць
AND |ClosedEquity / TradeLevel - 1| >= 10% // Finetiq: поріг «помітної» зміни
TradeLevel = ClosedEquity
ATRe = ATR(20) на закритті сигнального бару // автори: недавній середній діапазон; Finetiq: 20
RiskMoney = TradeLevel * 0.25% // автори: «певний відсоток»; Finetiq: 0.25%
StopDist = 3 * ATRe // автори: початковий стоп є; Finetiq: 3 ATR
Contracts = floor(RiskMoney / (StopDist * PointValue))
BUY Contracts AT NEXT BAR OPEN // або SELL SHORT
// після входу Contracts не змінюється до виходу (автори): ні за зростання ATR, ні за падіння
// однаковий ризик для всіх ринків і для лонга й шорта (автори)
Контрольний варіант: щоденний vol-targeting (Finetiq)
// той самий вхід, той самий вихід, той самий TradeLevel; змінюється лише ведення розміру
Target(t) = floor(TradeLevel * 0.25% / (3 * ATR(20)[t] * PointValue))
IF |Target(t) - CurrentContracts| >= MAX(1, 20% * CurrentContracts) // Finetiq: зона нечутливості
довести позицію до Target(t) AT NEXT BAR OPEN
позначити угоду міткою "vol-adj"
Кошик коригувань (метод авторів, облік Finetiq)
// автори: скласти всі коригувальні угоди окремо, з комісією і спредом 0.5-1 тік
// Finetiq: кожна добавка закривається при найближчому скороченні або на загальному виході (LIFO)
AdjPnL = Σ по угодах "vol-adj": (ціна закриття частини - ціна відкриття частини) * контракти * PointValue
- комісія - (0.5 або 1 тік) * контракти * 2
// AdjPnL < 0: підлаштування коштує грошей (твердження авторів)
Застосування до картки always-in-breakout
// там розмір уже рахується в момент перевороту: Units = Equity * 0.2% / (ATR20 * PointValue)
// блок змінює дві речі:
Equity -> TradeLevel за закритими угодами, перегляд раз на місяць за зміни від 10%
ATR20 -> фіксується на барі перевороту й не перераховується до наступного перевороту
// контрольний варіант: ті самі перевороти, Units перераховуються щодня за ATR20[t]
Параметри
| Параметр | Значення | Звідки |
|---|---|---|
| Замір волатильності | один раз під час входу | автор |
| Міра волатильності | недавній ATR | автор |
| Капітал для розрахунку | trade level за закритими угодами | автор |
| Перегляд trade level | коли P&L помітно змінився | автор |
| Поріг перегляду | 10%, перевірка раз на місяць | Finetiq |
| Період ATR | 20 | Finetiq |
| Ризик на угоду | 0.25% trade level | Finetiq |
| Стоп для розрахунку розміру | 3 ATR | Finetiq |
| Лонг і шорт | однаковий бюджет ризику | автор |
| Контроль: частота перерахунку | щодня | Finetiq |
| Контроль: зона нечутливості | 1 контракт або 20% | Finetiq |
| Витрати в кошику | 0.5-1 тік спреду плюс комісія | автор |
Що перевірити
- Головне порівняння. Ті самі сигнали (наприклад,
always-in-breakoutабоturtle-4w-2wна 20-30 ф'ючерсах), розмір на вході проти щоденного vol-targeting. Дивіться на доходність, максимальну просадку, середній збиток, середній прибуток і асиметрію розподілу угод. - Кошик коригувань. Порахуйте AdjPnL при 0.5 і при 1 тіку. Це пряма перевірка твердження авторів, що підлаштування саме по собі приносить збиток.
- Правий хвіст. Частка підсумкового прибутку, яку дають 5% найкращих угод, в обох варіантах. Якщо vol-targeting помітно її знижує, він змінює саму природу трендової системи, про що й кажуть автори.
- Частота між крайнощами. Перерахунок щодня, раз на тиждень, раз на місяць, лише за зміни розміру від 50%. Так видно, де зникає різниця.
- Чутливість єдиного заміру. Період ATR 10, 20, 50. Окремо угоди, відкриті одразу після сплеску волатильності: за короткого ATR їхній розмір буде крихітним на всю угоду.
- Капітал для розрахунку. Trade level із переглядом, закритий капітал на кожній угоді, повний капітал із відкритим прибутком. Порівняйте поведінку просадки наприкінці довгого тренду, коли відкритий прибуток повертається.
- Розмір рахунку. При 1-3 контрактах на ринок щоденне підлаштування майже завжди округлюється до нуля змін. Проженіть порівняння на капіталі, з яким торгуватимете, а не на мільйонах.
Особливості платформ
TradingView (Pine Script)
- Закритий капітал:
strategy.initial_capital + strategy.netprofit.strategy.equityуже містить відкритий прибуток і для trade level не підходить. - Розмір на вході рахуйте на сигнальному барі й передавайте в
strategy.entry(..., qty = n). Вартість пункту:syminfo.pointvalue. - Контрольний варіант потребує добору й часткового скорочення:
pyramidingуstrategy()іstrategy.close(..., qty = x). Безpyramidingдобавки мовчки не виконаються, і порівняння покаже два однакові результати. - Портфельного тесту немає: trade level на весь портфель у Pine не порахувати, лише на один символ (розділ 5 довідника).
ta.atrзгладжує за Вайлдером.
MultiCharts і TradeStation (EasyLanguage)
- Закритий прибуток стратегії:
NetProfit, відкритий:OpenPositionProfit. Початковий капітал зручніше задати входом, щоб trade level рахувався однаково в бектесті й у торгівлі. - Вартість пункту
BigPointValue.AvgTrueRangeце просте середнє TrueRange, а не Вайлдер. - Розмір фіксується в змінній на сигнальному барі:
Buy Contracts_ contracts next bar at market. Контрольний варіант потребує дозволити кілька входів в один бік у властивостях стратегії й скорочувати позицію іменованими виходами з кількістю контрактів. - Спільний trade level на багато ринків рахується в Portfolio Maestro або Portfolio Trader. На одному графіку стратегія бачить лише свій прибуток.
MetaTrader 5 (MQL5)
AccountInfoDouble(ACCOUNT_BALANCE)це баланс без плаваючого прибутку,ACCOUNT_EQUITYз ним. Для trade level потрібен баланс, але він спільний для всіх радників на рахунку.- Лот із ризику:
SYMBOL_TRADE_TICK_VALUE,SYMBOL_TRADE_TICK_SIZE, округлення доSYMBOL_VOLUME_STEP. Зафіксований лот зберігайте в змінній, а під час перезапуску радника беріть обсяг відкритої позиції. - На неттинговому рахунку підлаштування змінює обсяг однієї позиції, на хеджинговому створює окремі позиції. Кошик коригувань простіше вести на хеджинговому рахунку.
iATRце просте середнє TR. У CFD кожне підлаштування платить спред, а позиція, яку тримають 200 днів, ще й своп. Для CFD витрати в кошику будуть вищими, ніж в авторів на біржових ф'ючерсах.
Де ідея може зламатися
- Дослідження авторів в інтерв'ю не оприлюднено. Усі твердження про середній збиток і кошик коригувань поки що словесні.
- Автори торгують довгостроковий тренд із середньою угодою близько 200 днів. За такий час волатильність змінюється сильно, і різниця між двома способами помітна. У системи з угодами на 3-10 днів ATR майже не встигає змінитися, і порівняння може нічого не показати.
- Єдиний замір ATR може припасти на сплеск або затишшя. Якщо після затишшя волатильність зросла в рази, ризик позиції в грошах теж зріс у рази, і блок цього свідомо не виправляє.
- Trade level консервативний лише на зростанні. Після глибокої просадки він залишається високим до перегляду, і ризик у відсотках від реального капіталу стає більшим за план.
- Відсоток ризику, період ATR, множник стопа й поріг перегляду trade level автори не назвали. Значення в таблиці стартові й потребують перевірки.
- На маленькому рахунку округлення до цілих контрактів важить більше, ніж вибір між двома способами. Фіксованого відсотка ризику там дотримуються лише приблизно.