20 жовтня 2026 · дослідження

Стратегія працювала, доки ми не врахували витрати на перенесення ф’ючерсної позиції

Стратегія працювала, доки ми не врахували витрати на перенесення ф’ючерсної позиції

У вівторок уранці наша трендова стратегія на нафтових ф’ючерсах тримала довгу позицію в контракті, строк дії якого добігав кінця. Сигнал робив саме те, що ми йому доручили: утримувати позицію, поки тренд залишався висхідним. Бектест показував невеликий прибуток. На паперовому рахунку ж відображалися продаж, купівля наступного контракту, 2 комісії та ціна входу гірша, ніж підказував графік.

Із сигналом не сталося нічого загадкового. Бектест трактував «ціну ф’ючерсу» як одне безперервне значення. На рахунку ж довелося закрити один контракт і відкрити інший — у двох різних книгах ордерів і за двома різними цінами.

Ми виявили розбіжність, коли перевіряли позицію, що припала на період перенесення. Стратегія використовувала ліквідний контракт ближнього місяця й утримувала його, доки календарне правило не переводило позицію на наступний місяць. Саме правило було цілком обґрунтованим. Облік операцій — ні.

Наш безперервний ряд було скориговано заднім числом, щоб усунути розрив між контрактами. Це зробило графік зручним для розрахунку тренду. Але в ряді більше не було фактичної ціни, за якою ми могли б закрити старий контракт або відкрити новий. У бектесті скоригований рівень використовувався для оцінки угоди під час перенесення, а потім торгівля відновлювалася так, ніби позиція просто тривала.

Для сигналу безперервний ряд може бути корисним вимірюванням. Для виконання угоди це вигадка. Перенесення — це 2 угоди, а спред між контрактами є частиною структури ринку, а не косметичним стрибком, який можна згладити.

2 етапидля закриття та повторного відкриття ф’ючерсної позиції
2 книги ордерівзі своїми bid, ask і глибиною ринку
1 сигналякий може взагалі не потребувати змін

Ми відтворили подію з використанням двох лістингових контрактів. У старого місяця bid становив 79.98, а ask — 80.00. У наступного місяця bid був 80.42, а ask — 80.45. Щоб перенести нашу довгу позицію, треба було продати старий контракт за bid, а потім купити новий за ask. Календарний спред між цими цінами виконання становив 44 центи.

Це число не означало автоматичний збиток у 44 центи. Контракти мали різні місяці поставки, а спред відображав витрати на перенесення, зберігання й фінансування, а також очікування щодо пропозиції. Позиція, перенесена на новий контракт, зберігає чутливість до його подальшого руху ціни; вона не сплачує весь котируваний спред як комісію. Але стратегія має зафіксувати вихід зі старого контракту й відкрити позицію в новому. Якщо розрахунок дохідності порівнює ці ціни так, ніби це той самий інструмент, він може вигадати або стерти P&L.

Під час відтворення ми розділили ці завдання. Безперервний ряд і далі генерував трендовий сигнал. Для оцінки позицій і ордерів використовувалися ціни конкретних контрактів. Під час перенесення симулятор надсилав ордер на закриття контракту, строк дії якого завершувався, та ордер на відкриття наступного, враховував комісію за кожен контракт, а також спред і доступну глибину кожної книги.

Перше відтворення все ще не збігалося з паперовим рахунком. Ми синхронізували виконання обох ордерів за однією часовою міткою, хоча ордери подавалися послідовно. Закриття контракту старого місяця виконалося, але ask наступного місяця змінився, перш ніж ордер на купівлю потрапив до книги. Перенесення можна виконати як календарний спред, якщо біржа це підтримує, або як 2 окремі етапи з тимчасовою позицією між ними. Це різні припущення щодо виконання. Для порівняння ми використали фактичну послідовність ордерів паперового рахунку.

Потім ми помітили, що саме календарне правило було сформульоване нечітко. «Перенести за 5 днів до експірації» звучить точно, аж поки свято не зсуне торговий календар, ліквідність не переміститься на раніший термін або не виявиться, що в контракту інша дата експірації. В одному місці ми рахували календарні дні, а в іншому — робочі. Паперова стратегія переносила позицію за 5 сесій до останнього дня торгів, а бектест — за 5 календарних днів до нього.

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

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

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

Якщо у вашому бектесті ф’ючерсів використовується безперервний графік, з’ясуйте, для чого саме він придатний. Він може забезпечити сигнал послідовними даними. Але він не може замінити контракт, який ви могли б купити або продати. Для кожної позиції, що переходить через експірацію, у дослідницьких записах мають бути зазначені старий контракт, новий контракт, умова перенесення, модель виконання та 2 отримані грошові потоки.

Та вівторкова угода не була складною помилкою. Це була лінія прибутковості на графіку, яка пропускала мить, коли рахунку довелося змінити те, чим він володів. Коли ми повернули цю мить у відтворення, результат став менш привабливим і значно кориснішим.

ф’ючерсивитрати на перенесеннябектестингмікроструктура ринкутранзакційні витрати
ПоділитисяXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Усі статті