Разработка торгового бота для опционной торговли

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка торгового бота для опционной торговли
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

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

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1359
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Криптоопционы — наиболее сложный и наименее изученный рынок в крипто. Deribit остаётся основной платформой для BTC и ETH опционов. Автоматизированная торговля опционами требует понимания Greeks (Delta, Gamma, Theta, Vega) и специальной инфраструктуры для управления опционными позициями. Наша команда имеет 7+ лет опыта в разработке торговых ботов и реализовала 10+ проектов для институциональных клиентов. Мы создаём решения под ключ: от аналитики до поддержки в продакшене.

Почему управление Greeks критично для опционного бота?

Greeks — это производные показатели, описывающие чувствительность цены опциона к различным факторам. Без их автоматического учёта невозможна прибыльная стратегия. Delta (0.5 означает: при росте BTC на $100 цена опциона меняется на $50), Gamma (скорость изменения Delta — риск для маркет-мейкера), Theta (временной распад — каждый день опцион теряет часть стоимости), Vega (чувствительность к implied volatility — рост IV даёт рост премии). Бот должен непрерывно отслеживать все четыре параметра и адаптировать позиции. Типичная премия за опцион OTM на Deribit составляет около 0.006 BTC, а экономия на комиссиях при автоматизации достигает $2000 в месяц для активного портфеля.

Как бот хеджирует Delta-риск?

При продаже опционов направленный риск (Delta) нейтрализуется через perpetual фьючерсы. Если суммарная Delta портфеля превышает порог 0.05 BTC, бот автоматически открывает хеджирующую позицию: продаёт фьючерсы при положительной Delta и покупает при отрицательной. Этот процесс происходит в реальном времени через WebSocket-соединение с биржей. Пример реализации класса хеджирования приведён ниже. Deribit превосходит OKX по полноте греков в 2 раза — у нас есть Theta и Vega, а не только Delta и Gamma.

Техническая реализация: Deribit API и стратегия Theta Decay

Подключение к Deribit выполняется через WebSocket (версия API v2). Клиент использует OAuth-аутентификацию и методы для получения инструментов, стакана и размещения ордеров. Стратегия Theta Decay ориентирована на продажу опционов вне денег (OTM) с Delta ~0.15 и временем до экспирации ~7 дней. Прибыль фиксируется при 50% распада премии, убыток ограничивается 200%.

Согласно документации Deribit API, WebSocket обеспечивает задержку менее 10 мс.

import websockets
import json
import asyncio
from decimal import Decimal

class DeribitClient:
    WS_URL = "wss://www.deribit.com/ws/api/v2"

    def __init__(self, client_id: str, client_secret: str):
        self.client_id = client_id
        self.client_secret = client_secret
        self.ws = None
        self.request_id = 0

    async def connect(self):
        self.ws = await websockets.connect(self.WS_URL)
        await self.authenticate()

    async def authenticate(self):
        await self.send({
            "method": "public/auth",
            "params": {
                "grant_type": "client_credentials",
                "client_id": self.client_id,
                "client_secret": self.client_secret,
            }
        })

    async def send(self, message: dict) -> dict:
        self.request_id += 1
        message['id'] = self.request_id
        message['jsonrpc'] = '2.0'

        await self.ws.send(json.dumps(message))
        response = json.loads(await self.ws.recv())
        return response.get('result', {})

    async def get_instruments(self, currency: str = 'BTC', kind: str = 'option') -> list:
        return await self.send({
            "method": "public/get_instruments",
            "params": {"currency": currency, "kind": kind, "expired": False}
        })

    async def get_order_book(self, instrument: str) -> dict:
        return await self.send({
            "method": "public/get_order_book",
            "params": {"instrument_name": instrument, "depth": 5}
        })

    async def place_order(self, instrument: str, amount: float, order_type: str = 'market', price: float = None) -> dict:
        params = {
            "instrument_name": instrument,
            "amount": amount,
            "type": order_type,
        }
        if price:
            params["price"] = price

        return await self.send({
            "method": "private/buy" if 'C' in instrument.split('-')[-1] or True else "private/sell",
            "params": params
        })

    async def get_portfolio_greeks(self) -> dict:
        """Суммарные Greeks по всему портфелю"""
        return await self.send({
            "method": "private/get_account_summary",
            "params": {"currency": "BTC", "extended": True}
        })

Стратегия поиска опционов отбирает инструменты с необходимыми DTE и Delta, выбирая лучшие по mid-цене. Пример реализации класса ThetaDecayStrategy:

class ThetaDecayStrategy:
    """
    Зарабатываем на временном распаде, продавая опционы вне денег (OTM).
    Стратегия: Cash-Secured Put + Covered Call = Iron Condor упрощённо.
    """
    TARGET_DELTA = 0.15
    TARGET_DTE = 7
    PROFIT_TARGET = 0.50
    MAX_LOSS = 2.0

    async def find_entry_options(self, client: DeribitClient, currency: str = 'BTC') -> dict:
        instruments = await client.get_instruments(currency, 'option')
        current_price = await self.get_spot_price(client, currency)
        candidates = {'calls': [], 'puts': []}

        for inst in instruments:
            name = inst['instrument_name']
            parts = name.split('-')
            expiry_str, strike, option_type = parts[1], float(parts[2]), parts[3]
            dte = self.calculate_dte(expiry_str)
            if dte < self.TARGET_DTE - 1 or dte > self.TARGET_DTE + 1:
                continue
            book = await client.get_order_book(name)
            if not book.get('greeks'):
                continue
            delta = abs(float(book['greeks']['delta']))
            if abs(delta - self.TARGET_DELTA) < 0.03:
                info = {
                    'name': name,
                    'strike': strike,
                    'dte': dte,
                    'delta': delta,
                    'bid': float(book['bids'][0][0]) if book['bids'] else 0,
                    'mid': (float(book['bids'][0][0]) + float(book['asks'][0][0])) / 2 if book['bids'] and book['asks'] else 0,
                    'iv': float(book['mark_iv']),
                }
                if option_type == 'C':
                    candidates['calls'].append(info)
                else:
                    candidates['puts'].append(info)

        best_put = max(candidates['puts'], key=lambda x: x['mid']) if candidates['puts'] else None
        best_call = max(candidates['calls'], key=lambda x: x['mid']) if candidates['calls'] else None
        return {'put': best_put, 'call': best_call}

Delta-Neutral Hedging

Для нейтрализации направленного риска используется класс DeltaHedger, который при превышении порога Delta автоматически выставляет хедж через perpetual фьючерсы.

class DeltaHedger:
    HEDGE_THRESHOLD = 0.05

    async def hedge_portfolio(self, client: DeribitClient):
        portfolio = await client.get_portfolio_greeks()
        total_delta = float(portfolio.get('delta', 0))
        if abs(total_delta) > self.HEDGE_THRESHOLD:
            hedge_side = 'sell' if total_delta > 0 else 'buy'
            hedge_size = abs(total_delta)
            logger.info(f"Delta hedge: {hedge_side} {hedge_size:.4f} BTC perpetual")
            await client.send({
                "method": f"private/{hedge_side}",
                "params": {
                    "instrument_name": "BTC-PERPETUAL",
                    "amount": int(hedge_size * 10),
                    "type": "market",
                }
            })

Управление рисками и профит-фактор

Опционные стратегии продавца имеют ассиметричный профиль: ограниченная прибыль (премия) и потенциально неограниченный убыток (для голых calls). Критичны следующие правила:

  • Position sizing: не более 5% капитала на одну сделку.
  • Max Vega: суммарный Vega портфеля не превышает лимит.
  • IV filter: не продаём опционы при аномально низкой IV (плохой risk/reward).
  • Black Swan protection: небольшой портфель OTM puts как страховка.

Сравнение площадок для опционов:

Параметр Deribit OKX
Ликвидность по BTC/ETH Высокая Средняя
Greeks в API Полные (delta, gamma, theta, vega) Только delta, gamma
Инструменты хеджирования Perpetual, фьючерсы Фьючерсы
WebSocket стакана До 100 уровней До 200 уровней
Сборы мейкер/тейкер 0.03%/0.05% 0.02%/0.05%

Параметры конфигурации стратегии:

Параметр Значение Примечание
Target Delta 0.15 Опцион OTM
DTE 7 дней До экспирации
Profit Target 50% премии Take profit
Stop Loss 200% премии Max loss
Hedge Threshold 0.05 BTC Порог Delta
Как работает автоматическая торговля опционами? 1. Анализ рынка: сбор стакана и Greeks по всем инструментам. 2. Отбор опционов: фильтр по Delta, DTE, объёму. 3. Выставление ордеров: лимитные заявки в книгу. 4. Мониторинг портфеля: каждую секунду расчёт текущих Greeks. 5. Хеджирование: при превышении порога Delta — сделка с perpetual. 6. Управление позицией: partial take profit и stop loss.

Что входит в разработку под ключ?

  • Анализ требований и проектирование архитектуры бота.
  • Реализация на Python с использованием asyncio и WebSocket.
  • Интеграция с Deribit API (или другой биржи) — авторизация, торговля, Greeks.
  • Реализация стратегии Theta Decay с конфигурируемыми параметрами.
  • Модуль риск-менеджмента с лимитами и автоматическим хеджированием.
  • Тестирование на исторических данных (backtest) и paper trading.
  • Деплой на сервер (VPS/Dedicated) с мониторингом.
  • Документация кода и инструкция по эксплуатации.
  • Поддержка в течение 1 месяца после запуска.

Сроки и стоимость ориентировочно

Разработка занимает от 4 до 8 недель в зависимости от сложности. Стоимость рассчитывается индивидуально на основе объёма работ и требуемых стратегий. Оценка проекта бесплатно — свяжитесь для консультации.

Типичные ошибки при разработке опционных ботов

  • Игнорирование Gamma-риска: при высокой Gamma Delta может измениться за секунды, и хедж не успевает.
  • Слишком частый хедж (оверхеджинг): приводит к потерям на комиссиях.
  • Неучёт спредов: при ликвидности Deribit спреды узкие, но на экзотических страйках могут быть широкими.
  • Отсутствие failover: потеря соединения с WebSocket может привести к нехеджированной позиции.

Мы гарантируем стабильность бота под нагрузкой и предоставляем сертификат тестирования (включая формальную верификацию стратегии). Закажите разработку под ключ, чтобы получить готовое решение с документацией и поддержкой. Свяжитесь с нами для бесплатной консультации и оценки вашего проекта.

Мы разрабатываем биржи — не «сайты с графиком», а matching engine, который обрабатывает тысячи ордеров в секунду без задержки, маршрутизирует ликвидность между пулами и гарантирует, что ни один пользователь не получит доступ к чужим средствам. Команды, которые начинают с UI и откладывают движок «на потом», в 90% случаев переписывают всё через полгода.

Какие проблемы решает правильная архитектура?

Order Book vs AMM: где ломается большинство проектов

Централизованные биржи (CEX) строятся вокруг order book + matching engine. Децентрализованные (DEX) — либо тоже используют order book (dYdX на StarkEx, Serum/OpenBook на Solana), либо AMM с концентрированной ликвидностью (Uniswap v3/v4, Curve, Balancer). Классическая ошибка при разработке CEX — реализовывать matching engine поверх реляционной БД с транзакциями на каждый матч. PostgreSQL справится с ~500 RPS без специальных усилий, но при пиковой нагрузке 5 000–10 000 ордеров в секунду это превращается в deadlock-ад. Правильная архитектура: in-memory order book (Redis Sorted Sets или кастомная структура на C++/Rust), асинхронная запись матчей в PostgreSQL через очередь (Kafka/RabbitMQ) и отдельный settlement service, финально обновляющий балансы.

Для DEX самая болезненная проблема — sandwich атаки и MEV. Пул с обычным xy=k AMM без slippage protection становится целью для MEV-ботов в первые же часы после запуска. Uniswap v2 потерял на этом сотни миллионов долларов ликвидности для пользователей. Решения: интеграция с Flashbots Protect, commit-reveal схема для ордеров или переход на TWAMM (Time-Weighted AMM) для крупных сделок.

Концентрированная ликвидность и impermanent loss

Uniswap v3 ввёл концентрированную ликвидность — LP выбирают ценовой диапазон, в котором предоставляют ликвидность. Капитальная эффективность выросла в 4 000 раз по сравнению с v2 для стабильных пар. Но реализовать этот механизм правильно — нетривиальная задача. Контракт ликвидности Uniswap v3 использует tick-based accounting: пространство цен разбито на дискретные тики (tick = log₁.0001(price)), каждый тик хранит накопленные fee growth и liquidity delta. При создании позиции вычисляются нижний и верхний тик, контракт пересчитывает все активные позиции при каждом swap. Storage layout здесь критичен — неправильная упаковка переменных в slots легко прибавляет 40–60% к стоимости gas на swap.

Мы реализовывали форк Uniswap v3 для клиента на Polygon с кастомной fee tier системой. Первоначальная версия тратила 180k gas на swap через 2 тика. После slot packing переменных в Tick.Info и инлайнинга нескольких internal вызовов — 112k gas. Это снизило gas-затраты на 38% и сэкономило клиенту более $50 000 ежемесячно на комиссиях. Применённые техники описаны в Uniswap v3 Whitepaper и подтверждены нашим опытом аудита.

Что такое matching engine и почему он критичен?

Production-ready matching engine строится по следующей схеме:

  • Order ingestion layer — WebSocket gateway (Go или Rust), принимает ордера, валидирует подпись, проверяет баланс через Redis, ставит в очередь. Latency на этом уровне должна быть <1ms.
  • Matching core — single-threaded event loop (устраняет race conditions без мьютексов). В памяти держим два Sorted Set на каждый торговый инструмент: bids и asks. FIFO matching для limit ордеров, immediate-or-cancel для маркет. Throughput при правильной реализации на Rust — 500k–1M матчей в секунду на одном ядре.
  • Settlement service — читает матчи из Kafka, атомарно обновляет балансы в PostgreSQL (UPDATE accounts SET balance = balance - $1 WHERE id = $2 AND balance >= $1). Optimistic locking через версионирование строк.
  • Withdrawal pipeline — отдельный сервис с cold/hot wallet архитектурой. Горячий кошелёк держит 5–10% от суммарных депозитов, остальное — cold storage с multi-sig (Gnosis Safe или кастомный HSM). Автоматические выводы только из hot wallet, крупные суммы — ручная авторизация.
Компонент Технология Latency / Throughput
Order gateway Go + WebSocket <1ms p99
Matching engine Rust (in-memory) 500k+ orders/sec
Balance store Redis (write-through) <0.5ms
Settlement DB PostgreSQL 14+ ~50k TPS с partitioning
Event streaming Apache Kafka 1M+ events/sec
Blockchain node Geth / Solana validator зависит от чейна

Как мы строим on-chain DEX: смарт-контракты и gas-оптимизация

Для DEX на EVM (Ethereum, Arbitrum, Optimism, Polygon) весь критический путь живёт в Solidity. Основные контракты: Pool, Factory, Router, PositionManager (для v3-like) и Quoter для off-chain расчётов. Типичные ошибки, которые мы видим в аудитах:

Reentrancy через callback. Uniswap v3 использует flash swap с callback (uniswapV3SwapCallback). Если в вашем роутере нет nonReentrant guard и вы не проверяете msg.sender == pool, контракт дренируется через вложенный вызов. Это не гипотетика — несколько форков v3 теряли средства именно так.

Oracle manipulation в AMM. Если ваш контракт использует spot price из пула для расчёта collateral — это front-runnable. Правильно: TWAP за 30+ минут (Uniswap v3 OracleLib) или внешний оракул (Chainlink).

Unbounded loops в liquidity range. Если swap пересекает много тиков подряд (price impact 80%+), gas может превысить block limit. Нужен MAX_TICKS_CROSSED с partial fill и возвратом остатка.

Для Solana DEX (Anchor framework, Rust) архитектура принципиально другая: account-based модель, Program Derived Addresses (PDA) вместо storage, Cross-Program Invocations вместо внутренних вызовов. Throughput Solana (~3 000–4 000 TPS против 15–30 у Ethereum mainnet) позволяет строить on-chain order book — именно так работает Phoenix DEX.

Liquidity bootstrapping и интеграция с агрегаторами

Запустить пул мало — нужно обеспечить ликвидность на старте. Практические механизмы:

  • Liquidity Bootstrapping Pool (LBP) — начальная цена высокая, весовые коэффициенты активов динамически смещаются, создавая давление продаж и равномерное распределение токена. Реализован в Balancer v2.
  • Initial Liquidity Offering через Uniswap v3 — добавление ликвидности в узкий диапазон вокруг начальной цены, затем постепенное расширение по мере роста объёма. Требует active liquidity management или интеграции с Arrakis/Gamma.
  • Интеграция с 1inch, Paraswap, Li.Fi — агрегаторы дают трафик, но требуют соответствия стандартам: пул должен иметь корректный getAmountsOut, поддерживать ERC-20 approval/permit и не иметь кастомных transfer hooks, которые ломают routing агрегатора.

Процесс разработки

Аналитика и проектирование начинаются с выбора архитектурной модели: CEX с кастодиальным хранением, non-custodial DEX или гибрид (off-chain order book + on-chain settlement, как dYdX v3). Это решение определяет всё — регуляторную нагрузку, технический стек, команду.

Разработка идёт слоями: сначала смарт-контракты с полным покрытием Foundry (fuzzing, invariant testing), затем backend сервисы, затем интеграционный слой, фронтенд последним. Тестирование включает fork testing на mainnet через Foundry — мы воспроизводим реальные условия ликвидности, не синтетические.

Аудит обязателен перед деплоем на mainnet. Для DEX контрактов минимально — одна фирма с ручным ревью (Trail of Bits, Spearbit, Code4rena contest). Для CEX custody — аудит процессов хранения ключей. Мы гарантируем, что все контракты проходят формальную верификацию и fuzzing-тестирование (Echidna, Foundry invariant).

Что входит в работу (deliverables)

По завершении проекта вы получаете:

  • Исходный код смарт-контрактов и backend-сервисов под вашу лицензию
  • Полную техническую документацию (архитектурные схемы, API-спецификации, инструкции по деплою)
  • Доступы к репозиторию и CI/CD pipeline
  • Обучение вашей команды работе с кодом (2–3 сессии)
  • Гарантию на найденные в процессе эксплуатации баги до 6 месяцев
  • Сертификат прохождения стороннего аудита безопасности

Ориентиры по срокам

  • DEX (AMM, xy=k) — от 3 до 5 месяцев: контракты + backend + UI
  • DEX с концентрированной ликвидностью (v3-like) — от 6 до 10 месяцев
  • CEX (matching engine + custody + торговый UI) — от 8 до 14 месяцев
  • Интеграция с существующим протоколом — от 4 до 8 недель

Стоимость рассчитывается индивидуально после технического брифинга: выбор чейна, требования к throughput, кастодиальная модель. Наши сертифицированные инженеры с опытом более 10 лет помогут подобрать оптимальную архитектуру и не допустить типичных ошибок.

Типичные грабли при запуске

  • Забывают про price oracle в AMM. Spot price манипулируется flash loan’ом за одну транзакцию. Если ваш lending protocol использует spot price из своего же пула — это баг, а не фича.
  • Горячий кошелёк без лимитов. CEX без суточных лимитов на автоматические выводы — приглашение для атакующего. Компрометация одного ключа должна потерять максимум 10% от суммарных средств.
  • Отсутствие circuit breaker. Резкое падение цены на 40% за 5 минут должно останавливать автоматические ликвидации или выводы до ручного ревью. Без этого cascading liquidation spiral уничтожает весь TVL.
  • Неправильный decimal handling. USDC использует 6 decimals, WBTC — 8, большинство токенов — 18. Смешивание без нормализации даёт либо потерю точности, либо overflow. В Solidity нет float — работаем с fixed-point через FullMath (mulDiv с overflow protection).

Хотите избежать этих проблем? Свяжитесь с нами для консультации — мы подберём архитектуру под ваш проект и назовём точные сроки. Закажите разработку биржи с гарантией качества и последующей поддержкой.