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

Чому бектест виконав угоду за ціною, якої ринок не показував?

Чому бектест виконав угоду за ціною, якої ринок не показував?

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

Спершу з’ясуйте, з якою ціною міг взаємодіяти ваш ордер. Свічка за останніми угодами показує, за якими цінами торгували протягом інтервалу. Вона не повідомляє, якими були bid і ask на момент надходження ордера, який обсяг був доступний за цими цінами чи чи міг ваш ордер опинитися на початку черги.

Чому бектест показує виконання за ціною поза ринковим діапазоном?

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

Розгляньмо хвилинну свічку з відкриттям 100.00, мінімумом 99.80 і закриттям 100.10. Стратегія бачить завершену свічку, надсилає ордер на купівлю, а симулятор виконує його за 99.80. Цей мінімум міг бути на початку хвилини — за п’ятдесят секунд до сигналу. Свічка не доводить, що після ухвалення рішення за ціною 99.80 ще можна було купити.

Наявні даніЩо вони підтверджуютьЧого вони не підтверджують
Свічка OHLCVДіапазон спостережуваних цін угод і обсяг за інтервалПослідовність цін, bid і ask або доступність на момент надходження ордера
Дані про угодиЗареєстровані виконання із часовими мітками й цінамиВідображену ліквідність або ваше місце в черзі
Котирування найкращих цінНайкращий відображений bid і ask на моменти вибіркиГлибину за межами найкращого рівня або те, чи зберігалося котирування між вибірками
Події книги ордерівЗміни відображеної глибини та події в черзі з урахуванням повноти потоку данихПриховану ліквідність, доступ до майданчика або гарантований пріоритет

Є ще одна поширена причина: плутанина між середньою ціною та ціною, за якою можна виконати ордер. Якщо котирування становить 99.99 bid і 100.01 ask, купівля за середньою ціною 100.00 гарно виглядає у звіті. Ринкова купівля зазвичай виконується за ask, а розмір ордера може додати до ціни ще й вплив на ринок. Якщо назвати середню ціну ціною виконання, половина спреду непомітно зникає.

Чи може лімітний ордер виконатися лише тому, що ринок торкнувся його ціни?

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

Припустімо, ваш ліміт на купівлю становить 50.00, а після його виставлення на ринку торгують 200 акціями за цією ціною. Симулятор, який виконує ордери за самим фактом дотику до ціни, заповнює весь обсяг у 500 акцій. Обережніша модель враховує обсяг, що пройшов за ціною 50.00 або вище після надходження ордера, а потім оцінює обсяг черги перед вами. Без даних книги ордерів на рівні окремих ордерів черга залишається припущенням. Його потрібно явно показувати в результатах, а не видавати за певний факт.

Для невеликої дослідницької системи я волів би чітко сформулювати це припущення й перевірити кілька варіантів, а не вдавати, ніби дані свічок показують пріоритет у черзі. Доречний діапазон залежить від майданчика, розміру ордера й частоти торгів стратегії. Тихі акції на відкритті ринку й малоліквідний криптоконтракт о 03:00 UTC — це різні завдання виконання.

Як вибрати модель виконання для даних свічок?

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

  1. Визначте час ухвалення рішення й надходження ордера. Якщо сигнал використовує ціну закриття свічки, надсилайте ордер після її закриття. Моделюйте виконання за наступним доступним інтервалом або котируванням, а не за попереднім мінімумом уже завершеної свічки.
  2. Використовуйте правильний бік спреду. Для ринкових купівель починайте з ask, для продажів — з bid. Якщо маєте лише свічки угод, оцініть спред за окремим джерелом або вкажіть, що модель його не враховує.
  3. Обмежуйте виконання правдоподібною ліквідністю. Установіть ліміт участі від спостережуваного обсягу та врахуйте комісії й вплив на ринок. Загальний обсяг свічки не означає, що весь він був доступний за обраною вами ціною.
  4. Перевіряйте стійкість припущень. Порівнюйте виконання за ціною відкриття наступної свічки з консервативним прослизанням і перевіряйте, чи зберігається результат за гіршого виконання. Не підганяйте модель виконання, щоб стратегія виграла.

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

Як з’ясувати, де в бектесті з’явилося неможливе виконання?

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

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

бектестуванняринкові данівиконання ордерівінженерія даних
ПоділитисяXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Усі статті