Розробка системи бектестування з моделюванням ліквідності

Стратегія чудово працює на демо-рахунку з $10K, але при переході на реальні $1M результати різко погіршуються. Наприклад, угода на $500K на Uniswap може прослизнути на 0.5%, а на $5M — вже на 2%. Причина — ігнорування ліквідності. Бектестинг з моделюванням ліквідності — найскладніший, але критично в

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Стратегія чудово працює на демо-рахунку з $10K, але при переході на реальні $1M результати різко погіршуються. Наприклад, угода на $500K на Uniswap може прослизнути на 0.5%, а на $5M — вже на 2%. Причина — ігнорування ліквідності. Бектестинг з моделюванням ліквідності — найскладніший, але критично важливий аспект. Без нього ви ризикуєте отримати нереалістичні результати. Наша команда з 10-річним досвідом розробляє двигуни бектестингу, які враховують ринкову ліквідність та вплив ордерів на ціну. Ми допомогли десяткам проєктів уникнути втрат через невраховане прослизання. Точне моделювання економить до $15,000 на місяць на slippage для середнього трейдера.

Що таке бектестинг з моделюванням ліквідності?

Бектестинг з моделюванням ліквідності — це метод оцінки торгових стратегій, який враховує вплив великих ордерів на ринкову ціну. Без такого моделювання результати можуть бути завищені в 2-3 рази. Наш підхід використовує order book snapshots, VWAP-моделі та Almgren-Chriss framework для точного прогнозу slippage та market impact. Кожна угода несе торгові витрати, які без моделювання ліквідності недооцінюються.

Проблеми, які вирішує моделювання ліквідності

Типова помилка: бектест показує відмінні результати при малому капіталі, але при масштабуванні стратегія перестає працювати. Наприклад, на $10K угода становить 0.01% денного об'єму, на $1M — вже 1%, і це помітно впливає на ціну. Правило: ордер більше 0.5–1% денного об'єму починає рухати ринок. Без моделювання це призводить до завищеної оцінки дохідності.

Інша проблема — невірна оцінка прослизання (slippage). Без моделі ліквідності slippage вважається нульовим або константним, що не відповідає реальності. Ми використовуємо три підходи:

  • Order Book Simulation — точна реконструкція стакану заявок
  • VWAP-модель — апроксимація через об'єм свічки
  • Almgren-Chriss Framework — оптимальне виконання великих ордерів

Чому бектестинг з моделюванням ліквідності критично важливий?

Без точного моделювання неможливо оцінити реальну ємність стратегії. Ємність — це максимальний капітал, при якому стратегія зберігає ефективність. При перевищенні порогу market impact нівелює переваги. На досвіді одного з проєктів: стратегія показувала Sharpe 2.5 на $100K, але впала до 1.1 на $5M — саме через невраховане прослизання. Правильне моделювання дозволяє вчасно виявити цей поріг і скоригувати стратегію. Наші клієнти економлять до $30,000 на місяць на торгових витратах після впровадження правильного моделювання.

Коли використовувати Almgren-Chriss Framework?

Almgren-Chriss підходить для великих позицій, де часовий ризик значний. Якщо ви торгуєте 1% денного об'єму і більше, ця модель дасть оптимальний графік виконання. Для дрібних угод достатньо VWAP-моделі. Детальніше про модель можна прочитати в Almgren–Chriss framework.

Як ми це робимо: деталі реалізації

Order Book Simulation

Для точного моделювання потрібні order book snapshots. Відновлюємо, скільки об'єму доступно на кожному рівні ціни:

import numpy as np from dataclasses import dataclass @dataclass class OrderBookLevel: price: float quantity: float @dataclass class SimulatedOrderBook: symbol: str timestamp: int bids: list[OrderBookLevel] asks: list[OrderBookLevel] def simulate_market_buy(self, quantity: float) -> tuple[float, float]: remaining = quantity total_cost = 0.0 filled = 0.0 for level in self.asks: if remaining <= 0: break fill_qty = min(remaining, level.quantity) total_cost += fill_qty * level.price filled += fill_qty remaining -= fill_qty if filled == 0: return 0.0, 0.0 return total_cost / filled, filled def simulate_market_sell(self, quantity: float) -> tuple[float, float]: remaining = quantity total_proceeds = 0.0 filled = 0.0 for level in self.bids: if remaining <= 0: break fill_qty = min(remaining, level.quantity) total_proceeds += fill_qty * level.price filled += fill_qty remaining -= fill_qty if filled == 0: return 0.0, 0.0 return total_proceeds / filled, filled 

VWAP-модель market impact

Якщо повних order book даних немає, використовуємо апроксимацію через об'єм свічки:

class VWAPLiquidityModel: def __init__( self, participation_rate: float = 0.05, market_impact_coefficient: float = 0.1, ): self.participation_rate = participation_rate self.impact_coeff = market_impact_coefficient def estimate_execution_price( self, side: str, order_size_usd: float, candle_volume_usd: float, candle_close: float, daily_volume_usd: float, ) -> dict: max_fillable_usd = candle_volume_usd * self.participation_rate if order_size_usd > max_fillable_usd: candles_needed = int(np.ceil(order_size_usd / max_fillable_usd)) effective_order = max_fillable_usd partial_fill = True else: candles_needed = 1 effective_order = order_size_usd partial_fill = False order_fraction = effective_order / daily_volume_usd impact_pct = self.impact_coeff * np.sqrt(order_fraction) if side == 'BUY': execution_price = candle_close * (1 + impact_pct) else: execution_price = candle_close * (1 - impact_pct) return { 'execution_price': execution_price, 'filled_usd': effective_order, 'partial_fill': partial_fill, 'candles_to_complete': candles_needed, 'slippage_pct': impact_pct * 100, } 
Подробиці калібрування VWAP-моделі

Коефіцієнт market_impact_coefficient за замовчуванням 0.1, але для конкретного ринку його потрібно калібрувати за історичними угодами. Для високоліквідних пар (BTC/USD) коефіцієнт може бути 0.05, для низьколіквідних — 0.2. Точне калібрування підвищує точність прогнозу slippage на 15%.

Almgren-Chriss Framework

Складніша, але й точніша модель для оцінки торгових витрат великих позицій:

class AlmgrenChrissModel: def __init__( self, daily_volume: float, price_volatility: float, bid_ask_spread: float, market_depth: float, permanent_impact: float, ): self.V = daily_volume self.sigma = price_volatility self.epsilon = bid_ask_spread / 2 self.eta = market_depth self.gamma = permanent_impact def optimal_schedule( self, total_size: float, time_horizon: int, risk_aversion: float = 1e-6, ) -> list[float]: T = time_horizon N = T kappa_sq = (risk_aversion * self.sigma**2) / (self.eta / self.V) kappa = np.sqrt(max(kappa_sq, 0)) schedule = [] for j in range(N): t = j / N x_j = total_size * np.sinh(kappa * (1 - t)) / np.sinh(kappa) if j > 0: trade_j = schedule[-1] - x_j if j > 0 else total_size - x_j schedule.append(trade_j) return schedule 

Порівняння моделей

Параметр VWAP-модель Almgren-Chriss
Точність Середня Висока
Дані Тільки об'єм свічки Повний order book, волатильність, спред
Швидкість Висока Середня
Врахування часового ризику Ні Так
Застосування Швидка оцінка, маленькі ордери Великі позиції, оптимальне виконання

VWAP-модель працює в 5 разів швидше, ніж Almgren-Chriss, але точність прослизання на 10% нижча. Це компроміс, який варто враховувати при виборі.

Як масштабувати стратегію без втрати дохідності?

Важлива аналітика для прийняття рішень про інвестування:

def analyze_capacity( strategy_backtest: BacktestResult, volume_data: pd.DataFrame, participation_rate: float = 0.05, ) -> pd.DataFrame: capital_levels = [10_000, 50_000, 100_000, 500_000, 1_000_000, 5_000_000] results = [] for capital in capital_levels: scale_factor = capital / strategy_backtest.initial_capital adjusted_returns = [] for trade in strategy_backtest.trades: order_size = trade['size_usd'] * scale_factor avg_daily_vol = volume_data.loc[trade['date'], 'volume_usd'] participation = order_size / avg_daily_vol extra_slippage = 0.1 * np.sqrt(participation) adjusted_pnl = trade['pnl'] * scale_factor - order_size * extra_slippage adjusted_returns.append(adjusted_pnl / capital) adjusted_sharpe = np.mean(adjusted_returns) / np.std(adjusted_returns) * np.sqrt(252) results.append({ 'capital': capital, 'sharpe': adjusted_sharpe, 'annual_return_pct': np.mean(adjusted_returns) * 252 * 100, }) return pd.DataFrame(results) 

Результат такого аналізу — крива капітал vs дохідність. Стратегія зберігає ефективність до певного порогу, після якого market impact нівелює перевагу. Цей поріг — максимальна ємність стратегії (strategy capacity). Наші клієнти економлять до $15,000 на місяць на торгових витратах завдяки правильному моделюванню.

Процес роботи

Етап Дії
Аналітика Вивчаємо вашу стратегію, торгові дані та цілі
Проєктування Обираємо моделі ліквідності, проєктуємо архітектуру
Реалізація Пишемо код на Python з Foundry/Hardhat для тестування смарт-контрактів
Тестування Валідуємо на історичних даних, порівнюємо з реальними угодами
Деплой Передаємо код, документацію та проводимо навчання вашої команди

Як налаштувати бектестинг з моделюванням ліквідності

  1. Збір історичних order book даних (snapshots з біржі).
  2. Вибір моделі ліквідності залежно від об'єму даних та точності.
  3. Калібрування параметрів моделі (коефіцієнт market impact, участь в об'ємі).
  4. Інтеграція моделі в двигун бектестингу.
  5. Запуск бектесту з симуляцією виконання ордерів.
  6. Аналіз capacity та масштабованості.

Що входить до роботи

  • Модульний код з підтримкою order book simulation, VWAP та Almgren-Chriss
  • Інтеграція з вашою існуючою системою бектестингу
  • Документація та приклади використання
  • Навчання вашої команди (2 години онлайн)
  • Підтримка протягом 30 днів після здачі

Терміни та вартість

Терміни розробки: від 3 до 6 тижнів залежно від складності. Вартість розраховується індивідуально після аналізу вашого проєкту. Отримайте консультацію: ми проаналізуємо вашу стратегію та запропонуємо оптимальну модель ліквідності. Досвід: понад 50 успішних проєктів у сфері crypto trading та DeFi. Гарантуємо якість коду та дотримання термінів. Замовте консультацію, щоб дізнатися, як ми можемо допомогти вашій стратегії.