Розробка системи форвард-тестування (paper trading)

Стратегія, перевірена лише на історії, часто руйнується на живому ринку. Ми розробляємо системи форвард-тестування, де стратегія торгує в режимі paper trading на реальному потоці без ризику капіталу. Запускаємо під ключ і скорочуємо шлях від гіпотези до рішення про вивід у бій.
Часті запитання

Paper trading: де симуляція розходиться з реальною торгівлею

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

Помилка не в коді: paper trading за замовчуванням вважає виконання ідеальним — заявка наливається повністю за ціною з потоку котирувань, скасування спрацьовує миттєво, а стакан під нашим ордером не змінюється.

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

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

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

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

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

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

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

Що дає форвард-тестування до виведення стратегії в бій

Форвард-тестування (paper trading) проганяє стратегію на живому потоці ринкових даних, але заявки йдуть не на біржу, а в емулятор виконання.

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

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

Ефекти, які видно у звіті

  • Час перевірки гіпотези — дні замість тижнів, прогін іде безперервно.
  • Частка відтворюваних угод — понад 95% за фіксованого снапшоту стакана й повтору запуску.
  • Простій тестового контуру — хвилини на перезапуск замість годин ручного складання стенда.
  • Передбачуваність просідання — розрахункова й фактична криві сходяться, ліміти ризику задаються заздалегідь.
  • Класи відмов — закриваються на тестовому контурі, а не на реальному рахунку.

Стан до і після

Клас відмови До форвард-тесту Після
Скасування заявки в момент виконання Гонка, подвійна позиція Ловиться на прогоні
Часткове виконання Перекіс розміру позиції Перевіряється кожен прогін
Повтор запиту при обриві зв'язку Дублювання ордерів Підтверджена ідемпотентність
Розрив потоку даних Стратегія мовчки чекає Аварійне закриття й оповіщення

Формати paper trading: історія, живий потік, тіньовий режим

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

Історичні зрізи підтягуємо з архівів на кшталт CoinGecko і нормалізуємо в єдиний формат, щоб прогони були відтворювані.

Варіант Коли підходить Обмеження
Тестовий прогін на історії Первинний відбір гіпотез, налаштування параметрів Немає прослизання й черги заявок, ризик підгонки під минуле
Живий потік котирувань Перевірка виконання на реальних спредах і затримках Рідкісні розриви ліквідності залишаються непоміченими
Тіньовий режим торгівлі Порівняння нової версії з робочою на тому самому ринку Подвійне навантаження, потрібен роздільний облік сигналів

Як вибирати режим під тип стратегії

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

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

Як влаштований тіньовий прогін паралельно з робочим контуром

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

Звірка двох журналів показує розбіжність за часом входу й за ціною виконання: якщо нова версія сигналить раніше й закриває позицію на 2-3% вигідніше, її можна просувати в основний контур; якщо розбіжність у зворотний бік — правки повертаються на прогін.

Етапи впровадження системи тестування: від аудиту до передачі

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

  1. Аудит торгових стратегій: збираємо перелік, таймфрейми, набори інструментів і правила ризик-контролю, відзначаємо, що тестується ізольовано, а що потребує спільного рахунку.
  2. Схема потоків даних: описуємо, звідки приходять котирування, стакан і події блокчейну, як вони нормалізуються в загальний журнал і де проходить межа між бойовим і тестовим контуром.
  3. Складання стенда: розгортаємо середовище paper trading з ізольованими рахунками, емуляцією біржових обмежень і окремим сховищем результатів.
  4. Калібрування моделі виконання: налаштовуємо затримки, прослизання, часткове виконання лімітних заявок і комісії, щоб змодельований результат сходився з фактичним.
  5. Звірка на еталонних угодах: проганяємо набір відомих угод і порівнюємо з фактом за ціною входу, обсягом і часом, розбіжності розбираємо до прийнятного рівня.
  6. Передача й навчання: показуємо команді, як додавати стратегії, читати звіти й оновлювати модель виконання без нашої підтримки.

Критерії приймання

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

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

Запуск без зупинки робочого контуру

Стенд піднімаємо поруч із бойовою системою й підключаємо до тих самих джерел через окремі підключення й ліміти — робочий контур не зупиняється й не змінює поведінку.

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

Що замовник отримує на руки: стенд, схеми, регламенти

Стенд для paper trading здаємо не «як є», а комплектом, за яким ваша команда запускає та перевіряє його без нашої участі. У передачу входять конфігурації, схеми, правила доступу й регламенти — нижче перелік артефактів.

  • Конфігурації стенда: файли середовища, набори параметрів стратегій, сценарії прогонів і стартові умови, за яких результат відтворюється повторно.
  • Схема інтеграції з торговими майданчиками: які потоки йдуть у реальному часі, які беруться з історії, де стоять буфери й як обробляється розрив з'єднання.
  • Правила доступу й ролі: поділ на спостерігача, аналітика й адміністратора, окремі ключі до тестових кабінетів, журнал дій користувачів.
  • Звіт про калібрування: як звіряли потік заявок і угод з еталонним джерелом, які розбіжності знайшли, чим закрили й що залишилося у відомих обмеженнях.
  • Документація з тестового стенда: опис модулів, формати вхідних даних, точки розширення під підключення нових майданчиків та інструментів.
  • Регламент супроводу: періодичність оновлення довідників, порядок дій при зупинці джерела, кому надходить оповіщення і в який строк.
  • Чек-лист приймання: сценарії, які проганяються на вашій стороні перед тим, як стенд стає робочим.

Як передаємо знання команді

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

Далі підтримка йде за регламентом супроводу: правки стратегій ви вносите самі, розширення інтеграцій беремо на себе.

Кейс: скоротили розрив між тестом і реальними угодами

На старті проєкту форвард-тестування рахувалося за історичними свічками: заявка закривалася за ціною бару, затримки доставки й часткові виконання не враховувалися.

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

Модель виконання угод і облік затримок

Стенд переписали на програвання записаного біржового стакана через конектор до Binance: заявка стає в чергу й виконується за доступною ліквідністю, враховуються частковий обсяг, комісія, ставка фінансування й окремо — затримка між сигналом і постановкою ордера.

Її знімали замірами на робочому контурі й підставляли в симуляцію. Прогін прив'язаний до знімка даних і версії параметрів, тому повторний запуск дає ідентичний результат — раніше плаваючі налаштування робили порівняння прогонів безглуздим.

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

Перенесення налаштувань стенда в робочий контур

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

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

Чим форвард-тестування відрізняється від перевірки на історії

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

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

Форвард-тест, або paper trading, бере те саме ядро стратегії, але отримує дані по одній свічці — без доступу до майбутнього. Сигнали рахуються на надхідних даних, а угоди не йдуть у мережу: виконання емулюється за поточною книгою заявок із комісією та прослизанням. Стратегія поводиться так само, як поводилася б у бою, але без ризику втратити кошти.

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

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

Перевірка на надхідних даних іде за відрізком, якого при налаштуванні не існувало, і показує реальну стійкість логіки, а не якість підгонки.

Тому одного підходу недостатньо: історія відповідає на питання «що було б», форвард — «що відбувається зараз, поки ринок рухається сам».

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

Технічні питання перед стартом проєкту

Перед стартом проєкту замовники приносять той самий набір інженерних сумнівів: чи не виявиться модель виконання в paper trading надто «теплічною», чи вистачить історичних даних і чи не почне симулятор заважати бойовому контуру. Короткі відповіді нижче зазвичай знімають ці питання до обговорення оцінок і плану.

Наскільки модель виконання збігається з реальною угодою?

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

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

Які вимоги до історичних даних?

Потрібен безперервний ряд котирувань з однаковим кроком і повним набором полів, включно з обсягом. Історію перевіряємо на пропуски, дублікати й розриви сесій до старту тесту — інакше на графіку з'являються угоди за ціною, якої в той момент не існувало.

Що робити з рідкісними інструментами?

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

Чи навантажить симулятор робочий торговий контур?

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

Що змінюється в системі після передачі?

Віддаємо конфігурацію, правила зіставлення заявок, документацію з розширення й набір сценаріїв для регресії. Новий інструмент або поле в моделі виконання додаються правкою конфігурації, без переписування ядра.

Обговоримо задачу тестування ваших стратегій

Щоб оцінка проєкту була точною, а не приблизною, потрібен зріз вашої інфраструктури й того, що саме має показувати система paper trading. Нижче — що надіслати в першому повідомленні: за цим списком ми зафіксуємо вимоги до системи й повернемося з планом впровадження за етапами.

  • Опис стратегій: логіка входу й виходу, використовувані індикатори й таймфрейми, як сигнали рахуються зараз — вручну, у таблицях чи вже кодом.
  • Джерела даних: майданчики й інструменти, потрібна глибина історії, чи потрібен потік котирувань у реальному часі та з якою частотою оновлення.
  • Схема контурів: скільки середовищ потрібно — прогін на історії, paper trading на живому потоці, звірка з реальною торгівлею — і як вони пов'язані між собою.
  • Вимоги до звітності: які метрики рахувати (дохідність, просідання, частка прибуткових угод), у якому вигляді віддавати — панель моніторингу, вивантаження в таблицю, регулярний звіт.
  • Обмеження: строки, доступи до майданчиків і даних, правила розмежування прав, системи, у які потрібно вбудуватися.
  • Поточні напрацювання: що вже є й має зберегтися, а що можна замінити без втрати логіки.

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

Напрямки блокчейн-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142