Ідея коротко
PJ Sutherland торгує короткостроковий mean reversion на великих американських акціях. Раніше вистачало простої моделі з одним параметром: ковзна середня, міра розтягнення (стандартне відхилення, ATR або відсоток), вхід проти розтягнення, вихід біля середньої. З часом жива торгівля почала розходитися з бектестом. Висновок автора: ніхто не знає, де відкат почнеться і де закінчиться, і модель з одним рівнем входу тримається на удачі.
Його рішення називається кривою mean reversion. Позиція набирається частинами в міру відходу ціни від середньої: трохи на 0.25 SD, ще на 0.5 SD, на 1 SD і далі. Розвантажується теж частинами, в міру повернення. В одному прикладі в автора сім входів і сім виходів, в іншому двадцять. Одна стратегія перетворюється на портфель входів уздовж одного руху.
Alan Clement описує близький підхід для акцій: папір у сильному висхідному тренді, короткостроковий відкат до екстремуму недавнього діапазону, купівля просто під час падіння, доливання при поглибленні і без стопів. Це варіант B.
Чому це може працювати
Sutherland спирається на форму розподілу доходностей: у нього гострий пік і товсті хвости, повернення до середнього трапляється на ринку частіше за тренд. Угода на повернення забирає невеликий рух, тому відсоток прибуткових угод високий. Драбина знімає залежність від одного рівня. У системі з одним рівнем найбільша угода може пройти за цент від рівня і не потрапити в тест.
Clement додає аргумент про вхід без підтвердження. Розворот після розпродажу зазвичай швидкий і часто починається з гепу вранці. Хто чекає підтвердження, пропускає більшу частину руху.
Головний ризик обидва називають самі: тренд проти позиції. У спокійному режимі ставки майже незалежні. В обвал кореляція акцій іде до одиниці, і весь портфель стає однією ставкою. Sutherland закриває цей ризик окремим портфелем короткострокових трендових стратегій. Цієї частини в картці немає.
Правила
Розтягнення
MA = SMA(Close, 10) // Finetiq: період у відео не названо
SD = StdDev(Close, 10)
Z = (Close - MA) / SD // автор: міра розтягнення, можна ATR або відсоток від середньої
Варіант A. Драбина Sutherland на одному символі
// рівні 0.25, 0.5 і 1 SD від автора, решта Finetiq
EntryZ = [-0.25, -0.5, -1.0, -1.5, -2.0, -2.5, -3.0] // сім сходинок, як у прикладі автора
Unit = PositionBudget / 7 // Finetiq: рівні частини
// після закриття дня перераховуємо ціни рівнів
FOR k IN 1..7
IF частина k не відкрита
BUY LIMIT Unit at MA + EntryZ[k] * SD // Finetiq: лімітка живе один бар
// геп нижче кількох рівнів виконає їх усі на відкритті
MaxNewUnitsPerDay = 3 // автор: не набирати все за один день; число Finetiq
// виходи: кожна частина на своєму рівні повернення
ExitZ[k] = min(EntryZ[k] + 0.5, 0) // Finetiq: крок повернення 0.5 SD
FOR кожної відкритої частини k
SELL LIMIT Unit at MA + ExitZ[k] * SD // автор: розвантаження в міру повернення
// автор: частина виходів стоїть зовсім близько до ринку, щоб будь-яке коливання знімало експозицію
// і утримання залишалося коротким. Які саме це ордери, він не уточнив
IF Close >= MA THEN EXIT усі частини AT NEXT BAR OPEN // автор: базовий вихід біля середньої
IF BarsSinceFirstEntry >= 5 THEN EXIT усі частини AT NEXT BAR OPEN // Finetiq: в автора холд 1.3 дня
// шорт дзеркально, лонг і шорт з рівною алокацією (автор)
Захисні правила автора (Sutherland)
// всесвіт: великі акції рівня S&P 500; для малого рахунку країнові ETF
// розмір частини за волатильністю папера, а не частка капіталу, поділена на ціну
// входи розносяться на 2-3 дні; великі пачки: 50 ордерів по 10 на день 5 днів
// урок 2022 року: невелику частину починати набирати вже біля середньої або трохи нижче
Варіант B. Clement: відкат в аптренді, без стопів
Trend = Close > SMA(Close, 200) // автор: вище довгострокової середньої або ROC; довжина Finetiq
RangeHi = Highest(High, 10)
RangeLo = Lowest(Low, 10)
Oversold = (Close - RangeLo) / (RangeHi - RangeLo) <= 0.1 // автор: екстремум недавнього діапазону; числа Finetiq
IF Trend AND Oversold AND MarketPosition == 0
BUY LIMIT at Close - 0.5 * ATR(10) // автор: можна ловити трохи нижче; відступ Finetiq
IF MarketPosition > 0 AND доливання ще не було
BUY LIMIT at EntryPrice - 1.0 * ATR(10) // автор: доливання при поглибленні; рівень Finetiq
IF Close > SMA(Close, 5) THEN EXIT AT NEXT BAR OPEN // Finetiq: відскок до середнього
IF BarsSinceEntry >= 10 THEN EXIT AT NEXT BAR OPEN // Finetiq: вихід за часом, це не стоп
// стоп-лоса немає (автор). Лише лонг: на акціях автор бачить едж у довгій стороні
// ризик ділиться на 5-10 позицій у різних паперах (автор)
Параметри
| Параметр | Значення | Звідки |
|---|---|---|
| Міра розтягнення | стандартне відхилення від середньої | автор |
| Період середньої та SD | 10 | Finetiq |
| Перші рівні входу | −0.25, −0.5, −1 SD | автор |
| Решта рівнів | −1.5 … −3 SD | Finetiq |
| Кількість сходинок | 7 | автор (приклад), вибір Finetiq |
| Крок виходу | 0.5 SD від рівня входу | Finetiq |
| Базовий вихід | повернення до середньої | автор |
| Нових частин на день | не більше 3 | Finetiq (принцип: автор) |
| Вихід за часом, варіант A | 5 барів | Finetiq |
| Лонг і шорт | рівна алокація | автор |
| Всесвіт | великі акції, країнові ETF | автор |
| Варіант B: тренд | Close вище SMA 200 | Finetiq (принцип: автор) |
| Варіант B: перепроданість | закриття в нижніх 10% діапазону 10 днів | Finetiq (принцип: автор) |
| Варіант B: вхід | лімітка на 0.5 ATR(10) нижче закриття | автор (ідея), Finetiq (відступ) |
| Варіант B: доливання | ще 1 ATR(10) нижче | Finetiq (принцип: автор) |
| Варіант B: стоп | немає | автор |
| Варіант B: кількість позицій | 5–10 паперів | автор |
Що перевірити
- Драбина проти одного рівня. Уся позиція на −1 SD з виходом біля середньої проти семи сходинок того самого загального розміру. Автор обіцяє насамперед стабільність, тому порівнюйте розкид результату за роками і найгірший рік, а не лише підсумок.
- Околиця. Період середньої 5, 10, 20. Крок виходу 0.25 і 0.5 SD. Три, п'ять і сім сходинок. У драбини багато параметрів: 7 входів на 7 виходів дають 49 комбінацій, як рахує сам автор. Якщо результат тримається у вузькому куті цієї сітки, він підігнаний.
- Рівень біля середньої і 2022 рік. Додайте половинну частину на
Z <= 0з виходом на +0.25 SD. Порівняйте 2022 рік і всю історію окремо. Автор каже, що така частина здебільшого не працює, але рятує в роки на кшталт 2022-го. - Реалізм ліміток. Виконання при дотику рівня проти виконання лише при проході ціни за рівень. Сім ліміток на кожному русі роблять тест дуже чутливим до цього припущення.
- Стоп проти його відсутності у варіанті B. Стоп на 2, 4 і 8 ATR і без стопа. Дивіться найгіршу угоду, найгірший місяць і окремо 2008, 2020 і 2022 роки. Твердження Clement «що далі стоп, то краще» перевіряється лише на даних із виключеними з індексу та збанкрутілими паперами.
- Ліміт нових частин. Без обмеження проти трьох частин на день. Правило автора має різати збитки в дні обвалу, перевірте, чи так це на ваших даних.
- Витрати на дрібні ордери. Драбина дробить позицію, і мінімальна комісія за ордер б'є по ній сильніше, ніж по одному входу. Автор прямо каже, що без брокера без мінімальної комісії малому рахунку так торгувати важко.
Особливості платформ
TradingView (Pine Script)
- Докупівлю дозволяє
pyramiding = 7уstrategy(). За замовчуванням додаткових входів немає, і друга сходинка просто не виконається. Кожній сходинці потрібен свій id входу. - Лімітка
strategy.entry("L3", strategy.long, limit = x)висить до скасування. Рівень змінюється щодня: повторний виклик із тим самим id переносить ордер, для зняття потрібенstrategy.cancel. - Вихід частини:
strategy.exit("X3", from_entry = "L3", limit = y). Порядок закриття задаєclose_entries_ruleуstrategy(), за замовчуванням"FIFO". Щоб частини закривалися незалежно, вкажіть"ANY". На підсумковий капітал порядок не впливає, на статистику угод впливає. - Виконання ліміток при дотику оптимістичне.
backtest_fill_limits_assumptionуstrategy()вимагає проходу ціни за рівень на задану кількість тиків. - Портфель за S&P 500 не тестується: стратегія торгує лише символ графіка.
MultiCharts і TradeStation (EasyLanguage)
- Кілька входів в один бік дозволяються у властивостях стратегії. Без цього налаштування друга сходинка ігнорується. Сходинки називайте:
Buy ("L3") next bar at LevelPrice limit. - Вихід конкретної частини:
Sell ("X3") from entry ("L3") next bar at ExitPrice limit. Лімітки живуть один бар, їх треба надсилати на кожному барі. - Якщо на одному денному барі зачеплено і рівень входу, і рівень виходу, порядок невідомий. Потрібні Look-Inside-Bar Backtesting у TradeStation або Bar Magnifier у MultiCharts.
- Драбина за кошиком акцій робиться в Portfolio Maestro або Portfolio Trader, на одному графіку лише один символ.
MetaTrader 5 (MQL5)
- На неттінговому рахунку одна позиція на символ. Кожна сходинка збільшує обсяг і зсуває середню ціну, свого TP у частини немає. Виходи драбиною робляться відкладеними
SellLimitна частину обсягу, облік частин ведіть самі. - На хеджинговому рахунку кожна сходинка окрема позиція зі своїм TP. Відкладений
SellLimitтам відкриє нову коротку позицію, а не закриє частину довгої. Тип рахунку залежить від брокера, і логіка для одного не працює на іншому. - Сім частин вимагають позиції не менше семи мінімальних лотів з урахуванням
SYMBOL_VOLUME_MINіSYMBOL_VOLUME_STEP. На великому контракті з невеликим рахунком драбина може не вміститися. - Лімітки на один день ставте з експірацією, інакше вчорашній рівень виконається сьогодні. Кошик акцій у раднику можливий, але в брокера має бути весь список паперів.
Де ідея може зламатися
- Варіант B без стопа. Збиток однієї угоди нічим не обмежений, крім розміру позиції. Папір після банкрутства, шахрайства чи обвального звіту до середньої не повернеться. Драбина і доливання посилюють це: що глибше падіння, то більша позиція, і максимальний розмір набирається саме в найгіршому сценарії. У Clement єдиний захист це 5–10 різних паперів. Торгувати варіант B на одному інструменті означає прибрати і його, тобто торгувати взагалі без захисту.
- Теза «що далі стоп, то краще» отримана на бектесті. Якщо в даних немає паперів, що вибули з індексу, тест без стопів покаже результат, кращий за реальний. Clement користується історичними складами індексу без помилки вцілілого, у роздрібного трейдера таких даних часто немає.
- В обвали кореляція акцій іде до одиниці, і 5–10 позицій стають однією. Sutherland прямо каже, що тренд убиває mean reversion, і прикриває це трендовим портфелем, якого в картці немає.
- Цифри Sutherland (Sharpe вище 3, 90% прибуткових місяців) стосуються добрих періодів. За його словами, через 1987 рік майже неможливо провести MR-модель без просадки близько 50% за короткий строк, а хвостових подій в історії всього близько двадцяти. Модель, яка на бектесті їх оминула, найімовірніше щаслива вціліла після перебору варіантів.
- Шорти: автор розбирає приклад, де папір виріс на 400% при позиції 5% рахунку, це мінус 20%, і таких паперів може бути одразу кілька. Для шортової драбини потрібен sizing за волатильністю і великі папери.
- Період середньої, кількість сходинок, крок виходу і рівні після 1 SD автор не назвав. Це наша формалізація, а широку сітку параметрів легко підігнати.
- На денних барах частина сходинок виконується гепом на відкритті. Реальна ціна нижча за розрахункову, а за низької ліквідності лімітки біля екстремуму можуть не виконатися взагалі.