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

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

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

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

Опционные Greeks и их значение для бота

Delta (Δ) — чувствительность цены опциона к изменению цены базового актива. Delta = 0.5 означает: при росте BTC на $100, цена опциона растёт на $50.

Gamma (Γ) — скорость изменения Delta. Высокая Gamma = Delta меняется быстро = риск для маркет-мейкера.

Theta (Θ) — временной распад. Каждый день опцион теряет часть стоимости (для покупателя — это убыток, для продавца — доход).

Vega (V) — чувствительность к изменению implied volatility (IV). Рост IV = рост цены опциона.

Подключение к Deribit API

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}
        })

Стратегия: Theta Decay (продажа опционов)

class ThetaDecayStrategy:
    """
    Зарабатываем на временном распаде, продавая опционы вне денег (OTM).
    Стратегия: Cash-Secured Put + Covered Call = Iron Condor упрощённо.
    """
    TARGET_DELTA = 0.15      # продаём опционы с Delta ~0.15 (15% вероятность исполнения)
    TARGET_DTE = 7           # дней до истечения
    PROFIT_TARGET = 0.50     # закрываем при 50% прибыли
    MAX_LOSS = 2.0           # закрываем при 200% убытка от premium

    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']
            # Парсим: BTC-24JAN25-50000-C
            parts = name.split('-')
            expiry_str, strike, option_type = parts[1], float(parts[2]), parts[3]

            # Фильтр по DTE
            dte = self.calculate_dte(expiry_str)
            if dte < self.TARGET_DTE - 1 or dte > self.TARGET_DTE + 1:
                continue

            # Получаем Greeks
            book = await client.get_order_book(name)
            if not book.get('greeks'):
                continue

            delta = abs(float(book['greeks']['delta']))

            # Ищем опционы с нужной 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)

        # Выбираем лучший put (ниже рынка) и call (выше рынка)
        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

Для нейтрализации направленного риска при продаже опционов:

class DeltaHedger:
    HEDGE_THRESHOLD = 0.05  # перехеджируем при изменении delta на > 5%

    async def hedge_portfolio(self, client: DeribitClient):
        """Поддерживаем Delta-neutral портфель"""
        portfolio = await client.get_portfolio_greeks()
        total_delta = float(portfolio.get('delta', 0))

        if abs(total_delta) > self.HEDGE_THRESHOLD:
            # Хеджируем через perpetual futures
            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),  # Deribit использует $10 контракты
                    "type": "market",
                }
            })

Управление рисками

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

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

Опционный бот — высший уровень сложности. Он требует понимания не только алготрейдинга, но и опционного ценообразования (Black-Scholes, vol surface), управления Greeks и специфики крипто-опционного рынка.