Найнебезпечніша помилка синхронізації в бектесті може пережити навіть ідеальну перевірку часових міток. Дві події можуть мати час 10:00:00.000, але статися в такому порядку, який ваш симулятор просто вгадав.
Це важливо щоразу, коли стратегія реагує не лише на закриті свічки: на зміну котирування, угоду, повідомлення про фінансування, зміну статусу біржі чи підтвердження власного ордера. Часова мітка показує, коли позначили подію. Але вона не обов'язково показує, коли стратегія могла на неї відреагувати.
На що впливає порядок подій?
Уявімо стратегію, яка купує, коли найкраща ціна продавця падає нижче $100.00. В ту саму мілісекунду стрічка фіксує зміну ціни продавця до $99.99 і угоду за $99.99. Якщо бектест спершу обробляє угоду, а потім котирування, стратегія бачить нову ціну продавця й надсилає ордер. Обробити спершу котирування теж може бути правильно — за умови, що ця подія справді вже надійшла. Але якщо угода вичерпала показану ліквідність раніше, ніж надійшов ордер, виконання за $99.99 — вигадка.
Якщо сортувати рядки лише за часовою міткою, симулятор сам обирає порядок подій з однаковим часом. Порядок у файлі, порядок символів або план запиту до бази даних можуть випадково стати правилом виконання. Крива капіталу може змінитися, хоча вихідні дані залишилися тими самими.
Ось простий спосіб побачити, наскільки довільним може бути цей порядок: сортувати події з однаковим часом за назвою символу, а не за послідовністю надходження. Тоді мультиактивна стратегія може поводитися інакше лише тому, що один тикер стоїть у сортуванні раніше за інший.
Які часові мітки варто зберігати в бектесті?
Ринкові дані й обробка ордерів часто пов'язані з кількома різними моментами часу. Зберігайте всі поля, які надає джерело, і точно визначайте їхнє значення. Для багатьох стрічок корисні і час події на біржі, і локальний час отримання; жоден із них не є універсальною правдою про те, що бачили всі учасники.
| Годинник | Що фіксує | Чого сам по собі не доводить |
|---|---|---|
| Час події на біржі | Коли, за даними біржі, сталася подія | У якому порядку її побачив інший канал даних або ваш процес |
| Час отримання | Коли ваш збирач отримав повідомлення | Коли ваша стратегія завершила його обробку |
| Час ухвалення рішення | Коли ваш код оцінив сигнал | Що вказана ціна все ще була доступна |
| Час надходження ордера | Коли біржа могла виконати ордер | Що ордер буде виконано — для цього мають збігтися правила зіставлення ордерів і ліквідність |
Якщо в історичних даних немає часу отримання, чітко зазначте свої припущення. Бектест може обробляти біржові події за послідовністю й додавати фіксовану затримку 5 ms між рішенням і надходженням ордера на біржу. Це модель, а не відновлена історія. Якщо для подій з однаковими біржовими часовими мітками немає номерів послідовності, правило їх упорядкування — теж припущення.
Як моделювати події з однаковим часом?
Спершу зберігайте номери послідовності з джерела, якщо вони є. Номер послідовності надійніше визначає порядок подій у межах стрічки, ніж часова мітка, хоча для різних каналів або продуктів нумерація може бути окремою.
Далі явно визначте правила обробки в симуляторі. Для кожної події вирішіть, чи може вона оновити інформацію, доступну стратегії, змінити доступну ліквідність, запустити ордер або підтвердити його. Це різні дії; якщо звести їх до «обробити рядок», у симуляцію просочуватимуться неможливі виконання.
- Застосовуйте лише ринкову інформацію, яка надійшла до моменту ухвалення рішення стратегією.
- Сформуйте ордер, а потім перенесіть його до змодельованого часу надходження на біржу.
- Дозволяйте виконання лише за ліквідністю, доступною після надходження ордера, з урахуванням припущень про виконання для цього типу ордера.
- Для кожного змодельованого виконання фіксуйте вхідні дані, порядок подій і використану затримку.
Для стратегії на основі свічок це може бути складніше, ніж потрібно для відповіді на ваше запитання. Якщо сигнал використовує закриті 1-хвилинні свічки, а ордери виконуються на відкритті наступної свічки з консервативною моделлю витрат, порядок подій із точністю до мілісекунди навряд чи змінить висновок дослідження. Важливо, щоб деталізація часу відповідала твердженням, які робить бектест.
Чи можна довіряти бектесту без даних про час надходження?
Так, але чітко окресліть межі його достовірності. Якщо стратегія торгує повільно й має широкі ліміти ризику, кілька мілісекунд можуть нічого не змінити. Якщо вона реагує на миттєві котирування, змагається за місце в черзі або залежить від сигналу випередження-запізнення між біржами, відсутність даних про час надходження може мати вирішальне значення для результату.
Критики мають рацію: точне визначення часу подій може створювати оманливу видимість точності. Історичні стрічки неповні, годинники розходяться, а часові мітки біржі не показують усіх мережевих переходів. Навіть симулятор із наносекундними полями може спиратися на грубе припущення про виконання.
Тож перевіряйте чутливість результату замість того, щоб заявляти про певність: відтворіть дані з правдоподібними варіантами впорядкування подій з однаковим часом і затримками ордерів, а потім порівняйте кількість угод, ціну виконання й те, які сигнали збереглися. Якщо результат залежить від послідовності, яку неможливо встановити за даними, зазначте цю залежність у звіті про дослідження. Бектест може бути корисним і з недосконалим годинником. Головне — чесно вказати, який час він насправді знає.
← Усі статті


