Разработка системы OTC-торговли

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка системы OTC-торговли
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Разработка системы OTC-торговли

OTC (Over-The-Counter) торговля — это сделки между двумя сторонами вне публичного биржевого стакана. Институциональные инвесторы, крупные трейдеры, фонды покупают и продают большие объёмы через OTC именно потому, что биржевой стакан не может переварить $10M+ ордер без значительного price impact. OTC desk решает эту проблему.

Зачем нужен OTC

При крупной покупке через обычный биржевой ордер:

  • Маркет ордер на $10M BTC сдвинет цену на 2-5% вверх (market impact)
  • Трейдер сам себе поднимает цену покупки
  • Сделка видна в order flow — информация утекает к HFT

OTC позволяет согласовать фиксированную цену на весь объём, исполнить атомарно и конфиденциально.

Архитектура OTC системы

Request for Quote (RFQ) flow

Клиент запрашивает котировку
    │ (сумма, пара, направление)
    ▼
OTC Desk получает RFQ
    │
    ▼
OTC Trader агрегирует ликвидность
├── Внутренний matching (встречные ордера других OTC клиентов)
├── CEX deep liquidity (Binance OTC, Cumberland)
└── Собственный инвентарь
    │
    ▼
Котировка с lock period (30-60 секунд)
    │
    ▼
Клиент принимает / отклоняет
    │
    ▼
Settlement (атомарный, часто T+0 или T+1)

OTC Quote система

from dataclasses import dataclass
from decimal import Decimal
from datetime import datetime, timedelta
import uuid

@dataclass
class OTCQuote:
    quote_id: str
    client_id: str
    symbol: str
    side: str  # 'buy' | 'sell'
    quantity: Decimal
    price: Decimal
    total_value: Decimal
    spread_bps: int  # спред от mid-market
    expires_at: datetime
    status: str = 'pending'  # pending / accepted / rejected / expired

class OTCDeskService:
    def __init__(self, pricing_engine, risk_manager):
        self.pricing = pricing_engine
        self.risk = risk_manager

    async def request_quote(
        self,
        client_id: str,
        symbol: str,
        side: str,
        quantity: Decimal
    ) -> OTCQuote:
        # Проверяем лимиты клиента
        client = await self.db.get_client(client_id)
        notional = await self.pricing.estimate_notional(symbol, quantity)

        if notional > client.otc_limit:
            raise LimitExceeded(f"Exceeds client OTC limit: {client.otc_limit}")

        # Получаем mid-market price
        mid_price = await self.pricing.get_mid_price(symbol)

        # Рассчитываем спред на основе размера и ликвидности
        spread_bps = self.calculate_spread(symbol, quantity, notional, client.tier)

        if side == 'buy':
            offer_price = mid_price * (1 + Decimal(spread_bps) / 10000)
        else:
            offer_price = mid_price * (1 - Decimal(spread_bps) / 10000)

        quote = OTCQuote(
            quote_id=str(uuid.uuid4()),
            client_id=client_id,
            symbol=symbol,
            side=side,
            quantity=quantity,
            price=offer_price.quantize(Decimal('0.01')),
            total_value=(offer_price * quantity).quantize(Decimal('0.01')),
            spread_bps=spread_bps,
            expires_at=datetime.utcnow() + timedelta(seconds=45)
        )

        await self.db.save_quote(quote)
        return quote

    def calculate_spread(
        self,
        symbol: str,
        quantity: Decimal,
        notional_usd: Decimal,
        client_tier: str
    ) -> int:
        base_spread = {
            'BTC': 10,   # 10bps базовый для BTC
            'ETH': 15,
            'SOL': 25,
        }.get(symbol.replace('USDT', ''), 50)

        # Размер влияет на спред: больше → шире
        size_premium = max(0, int((notional_usd / 1_000_000 - 1) * 3))

        # Клиентский тир снижает спред
        tier_discount = {'vip': 5, 'premium': 3, 'standard': 0}.get(client_tier, 0)

        return base_spread + size_premium - tier_discount

Settlement

OTC settlement может быть:

Same-day (T+0): платёж и доставка актива в один день. Возможно при предварительно внесённом залоге или через DvP (Delivery vs Payment) механизм.

Next-day (T+1): стандарт для институционального OTC. Подтверждение сделки сегодня, расчёт завтра. Даёт время обеим сторонам организовать средства.

Atomic swap: для крипто-крипто OTC — смарт-контракт атомарного обмена. Обе стороны депонируют активы, контракт исполняет одновременно или не исполняет вообще.

Compliance для OTC

OTC сделки выше $10,000 (или эквивалент в крипте) требуют обязательной KYC/AML процедуры во большинстве юрисдикций. Институциональные клиенты проходят расширенный due diligence:

  • Corporate KYC: учредительные документы, структура ownership, UBO (Ultimate Beneficial Owner)
  • Source of funds: происхождение средств
  • AML screening: контрагенты, адреса блокчейна
  • Risk rating: ежегодное обновление

OTC desk с правильным compliance стеком может работать с банками, фондами и institutional crypto players — это premium сегмент с высокими margins.