Безперервний ряд ф’ючерсів об’єднує контракти, термін дії яких спливає один за одним, в одну історію. Цю історію можна використовувати для дослідження сигналів, але прямий розрахунок торгового P&L за змінами її ціни може вигадувати прибутки й збитки під час кожного перенесення. Такий ряд не показує, яким саме контрактом ви володіли.
Розгляньмо особливо суворий приклад: нафту WTI на NYMEX 20 квітня 2020 року. Травневий контракт закрився за ціною мінус $37.63 за барель. Червневий — плюс $20.43. Обидві ціни були реальними. Реальною була й різниця в $58.06 між ними. Але перехід на графіку з травневого контракту на червневий не приніс довгій позиції цього прибутку.
Розберімо це з’єднання. Це історичні розрахункові ціни; наведені нижче умовні приклади обліку використовують їх, щоб показати арифметику, а не стверджують, що за цими цінами можна було виконати ордер.
CLK20 і CLM20: ідентифікатори, які графік приховав
| Показник | Травневий контракт | Червневий контракт |
|---|---|---|
| Ідентифікатор контракту | CLK20 | CLM20 |
| Місяць поставки | травень 2020 року | червень 2020 року |
| Розрахункова ціна 20 квітня, доларів за барель | −37.63 | 20.43 |
| Розмір контракту | 1,000 барелів | 1,000 барелів |
Код місяця важливіший за префікс тикера. K означає травень, M — червень. Ці контракти передбачали різні зобов’язання щодо поставки й мали різні ціни. Термін дії травневого контракту добігав кінця на тлі надзвичайного дефіциту місць для зберігання. Червневий давав ще один місяць.
Безперервний символ постачальника даних приховує цю відмінність за приємно коротким позначенням. Короткі позначення мені до вподоби, доки вони не стають єдиними ідентифікаторами в журналі угод. Тоді налагодження починає скидатися на археологічні розкопки, тільки кава гірша.
До того ж універсальної безперервної історії не існує. Постачальник може переносити контракт за фіксовану кількість робочих днів до завершення терміну дії, під час перетину обсягів торгів або за іншим розкладом. У багатьох рядах перехід із травневого контракту відбувся ще до 20 квітня. У нашому прикладі ці два розрахунки навмисно з’єднані, щоб показати проблему; це не твердження про графік перенесення якогось конкретного постачальника.
1,000 барелів: множник для кожної ціни
Стандартний ф’ючерсний контракт NYMEX WTI охоплює 1,000 барелів. Тому рух ціни на $1 змінює вартість довгої позиції в одному контракті на $1,000. Тик у $0.01 дорівнює $10.
Для незмінної позиції в одному контракті базовий розрахунок такий:
gross_pnl = contracts × 1,000 × (ending_price − starting_price)
Цей розрахунок працює й за від’ємних цін. Відсоткові доходності від котируваної ціни ф’ючерсу стають значно менш корисними: перетин нуля може зробити їх невизначеними або змінити їхній видимий зміст. Доходність стратегії слід розраховувати за капіталом рахунку та прийнятим правилом обліку грошових потоків. Котирувана ціна бареля — це не капітал, вкладений у стратегію.
$58.06: розрив у місці з’єднання
Уявімо, що наївний рушій бачить розрахункову ціну травневого контракту, а потім — червневого, і застосовує цю формулу так, ніби інструмент не змінився:
invented_pnl = 1 × 1,000 × (20.43 − (−37.63))
= $58,060
У цьому порівнянні час не минув. Це ціни двох контрактів за одну й ту саму торгову сесію. Рушій сприйняв різницю між цінами контрактів як прибуток за період утримання позиції.
У реальному щоденному з’єднанні ціна старого контракту за вчора й ціна нового контракту за сьогодні також містять звичайний ринковий рух. Через це помилку складніше помітити. Зафіксована зміна поєднує рух старого контракту з різницею між контрактами в момент переходу.
І віднімання $58,060 як нібито грошових «витрат на перенесення» теж не виправляє модель. Ф’ючерси не купують, сплачуючи всю котирувану номінальну вартість. Закриття одного контракту й відкриття іншого змінює позиції та породжує реалізований або розрахований P&L, комісії, витрати на виконання й вимоги до маржі. Різниця між рівнями цін не стає автоматично списанням коштів.
+58.06: коригування, внесене в історію
Один зі звичних способів побудови безперервного ряду — додати різницю під час перенесення до давніших цін. За цим правилом ціна травневого контракту −37.63 стає 20.43, тож у місці з’єднання розриву немає. Попередні спостереження в тому самому історичному сегменті також підвищуються на 58.06.
| Спосіб побудови | Що відбувається в місці з’єднання | Наслідок для дослідження |
|---|---|---|
| Без коригування | Розрив у $58.06 зберігається | Індикатори можуть сприйняти зміну контракту як рух ринку |
| Адитивне коригування назад | До старішого сегмента додається 58.06 | Зміни в доларах усередині сегмента зберігаються; історичні рівні й відсоткові зміни зсуваються |
| Мультиплікативне коригування назад | Старіший сегмент множиться на 20.43 / −37.63, тобто приблизно на −0.543 | Від’ємний множник змінює знак цінових змін усередині сегмента |
Останній рядок пояснює, чому я не приймаю термін «скоригований за співвідношенням» як повну специфікацію даних. Метод, що добре працює лише за суто додатних цін, має передбачати чітке правило для нульових і від’ємних цін.
Адитивне коригування теж має наслідки. Сигнал на купівлю, коли ціна нижча за фіксований поріг у $30, може змінитися, якщо подальші перенесення переписують попередні рівні. Сигнал за різницею швидкої та повільної ковзних середніх може залишитися незмінним за спільного адитивного зсуву, якщо обидва вікна зазнають однакового зсуву. Вікна, що перетинають межу коригування, потрібно перевіряти окремо.
Зберігайте разом із результатом дослідження метод коригування, графік перенесень і версію даних. Для сигналів, чутливих до скоригованих рівнів, відновлюйте історію, доступну на кожну дату ухвалення рішення. У поточному завантаженні можуть бути коригування за перенесеннями, які на той час іще не відбулися.
Два рядки ордерів, яких немає на безперервному графіку
Ось навмисно спрощений журнал. Припустімо, що перед перенесенням один травневий контракт оцінювали за ціною −30.00. Припустімо також, що травневу позицію закрили, а червневу відкрили за наведеними вище історичними розрахунковими цінами, після чого червневий контракт оцінили за ціною 21.00. Ці умовні ціни виконання наведені лише для ілюстрації обліку.
| Подія в журналі | Розрахунок | Валовий P&L |
|---|---|---|
| Закриття однієї довгої позиції в травневому контракті за −37.63 | 1,000 × (−37.63 − (−30.00)) | −$7,630 |
| Відкриття однієї довгої позиції в червневому контракті за 20.43 | На вході руху ціни немає | $0 |
| Оцінка червневого контракту за 21.00 | 1,000 × (21.00 − 20.43) | +$570 |
| Разом | До витрат на виконання й комісій | −$7,060 |
Різниця в $58.06 ніде не обліковується як окремий дохід або витрата. Щоденна варіаційна маржа визначає, коли P&L за ф’ючерсами надходить у грошові кошти; вона не створює його копію.
У реальній торгівлі перенесення може виконуватися ордером на календарний спред, а не двома незалежними ордерами. Симулятор має відтворювати обраний механізм разом із передбаченими цінами виконання й витратами та зберігати окремий облік позицій за кожним контрактом.
Моя проста перевірка така: кожен долар P&L від торгівлі ф’ючерсами має бути прив’язаний до конкретного контракту, кількості, множника й двох цін саме цього контракту. Також потрібні час ухвалення рішення про перенесення та вхідні дані для нього. Правило на основі обсягу, яке використовує завершений обсяг торгів за сьогоднішню сесію, не може непомітно відкрити позицію раніше того самого дня.
Для контексту побудуйте графік безперервного ряду. Під ним покажіть фактично утримувані контракти й позначте кожен перехід між ними. Якщо під час переходу крива капіталу стрибає, я насамперед перевіряю саме ті два рядки ордерів.
← Усі статті


