Розробка алгоритму TWAP (Time-Weighted Average Price)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка алгоритму TWAP (Time-Weighted Average Price)
Середній
~3-5 днів
Часті запитання

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

Етапи блокчейн-розробки

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

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

Розробка TWAP (Time-Weighted Average Price) алгоритму виконання

TWAP (Time-Weighted Average Price) — алгоритм виконання великих ордерів шляхом рівномірного розподілу обсягу у часі. Мета не у отриманні прибутку від руху ціни, а у мінімізації рыночного впливу при виконанні: великий ордер, виставлений одночасно, зсуне ціну проти вас. TWAP ділить його на рівні частини через рівні інтервали.

Принцип роботи

Потрібно купити 100 BTC за 4 години без сильного впливу на ринок:

Кожні 10 хвилин: купити 100/24 ≈ 4.17 BTC
Всього 24 інтервали × 4.17 BTC = 100 BTC

Простий TWAP: рівні частки через рівні часові інтервали.

Адаптивний TWAP враховує ринкові умови:

  • Пропускаємо інтервал якщо поточна ціна значно вища за TWAP (не купуємо дорого)
  • Збільшуємо розмір ордера якщо ціна нижче поточного TWAP
  • Пауза при аномально високій волатильності

Реалізація

import asyncio
from datetime import datetime, timedelta

class TWAPExecutor:
    def __init__(self, symbol, total_qty, duration_minutes, exchange):
        self.symbol = symbol
        self.total_qty = total_qty
        self.n_slices = duration_minutes // 5  # кожні 5 хвилин
        self.slice_qty = total_qty / self.n_slices
        self.exchange = exchange
        self.executed_qty = 0
    
    async def execute(self):
        interval = (5 * 60)  # секунди
        for i in range(self.n_slices):
            await self.execute_slice()
            if i < self.n_slices - 1:
                await asyncio.sleep(interval)
    
    async def execute_slice(self):
        remaining = self.total_qty - self.executed_qty
        qty = min(self.slice_qty, remaining)
        
        # Використовуємо limit order близько до mid-price для економії на комісіях
        ticker = await self.exchange.fetch_ticker(self.symbol)
        mid_price = (ticker['bid'] + ticker['ask']) / 2
        limit_price = mid_price * 1.0005  # 0.05% вище mid
        
        order = await self.exchange.create_limit_buy_order(
            self.symbol, qty, limit_price
        )
        self.executed_qty += qty
        return order

Limit vs Market ордери у TWAP

Market orders: гарантоване виконання, але гірша ціна. Slippage на BTC може бути 0.02–0.1% на обсягу > $100K.

Limit orders: краща ціна, але ризик невиконання. Якщо ордер не виконаний за інтервал — конвертуємо у market близько до кінця інтервалу.

Hybrid підхід: виставляємо limit агресивніше за mid. Якщо 80% інтервалу невиконаний — snipe через market order.

TWAP benchmark та оцінка якості

Execution quality = середнє виконання vs ринковий TWAP за період:

TWAP_benchmark = Σ(price_i × volume_i) / Σ(volume_i)  за період виконання

Якщо алгоритм купив по average price нижче ринкового TWAP — добре виконання. Вище — погане.

Slippage report: по кожному слайсу фіксуємо: ціна quote, ціна fill, bid/ask spread у момент виконання.

Застосування

  • Виконання великих ордерів фондів без руху ринку
  • Регулярні DCA (Dollar Cost Averaging) покупки
  • Liquidation великих позицій
  • Rebalancing портфеля

Стек: Python (asyncio + CCXT), PostgreSQL для зберігання ордерів та execution report, REST API для управління (запуск, зупинка, статус виконання). Уведомлення про прогрес через Telegram.