Risk Management

Risk Management

Comprehensive risk management system for professional trading - pre-trade checks, position limits, margin, liquidation, and monitoring

Risk Management

Specification: LP-9004: DEX Risk Management

LX implements institutional-grade risk management with real-time monitoring, automated safeguards, and comprehensive exposure controls.

Risk Management Architecture

                           LX RISK MANAGEMENT ARCHITECTURE

    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                              ORDER FLOW                                      │
    └─────────────────────────────────────────────────────────────────────────────┘

                                       v
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                         PRE-TRADE RISK CHECKS                               │
    │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────────────────┐  │
    │  │ Order Validation│  │  Balance Check  │  │    Position Limits Check    │  │
    │  │  Price/Size     │  │  Margin Calc    │  │   Exposure/Concentration    │  │
    │  └─────────────────┘  └─────────────────┘  └─────────────────────────────┘  │
    └─────────────────────────────────────────────────────────────────────────────┘

                                       v
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                          MATCHING ENGINE                                     │
    └─────────────────────────────────────────────────────────────────────────────┘

                                       v
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                       POST-TRADE RISK MONITORING                            │
    │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────────────────┐  │
    │  │  Margin Health  │  │ Position Update │  │    Exposure Recalculation   │  │
    │  │  Monitoring     │  │   & P&L Calc    │  │       & Alerting            │  │
    │  └─────────────────┘  └─────────────────┘  └─────────────────────────────┘  │
    └─────────────────────────────────────────────────────────────────────────────┘

                                       v
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                       AUTOMATED RISK RESPONSES                              │
    │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────────────────┐  │
    │  │   Liquidation   │  │ Circuit Breaker │  │      Kill Switch            │  │
    │  │     Engine      │  │    Trigger      │  │    (Emergency Halt)         │  │
    │  └─────────────────┘  └─────────────────┘  └─────────────────────────────┘  │
    └─────────────────────────────────────────────────────────────────────────────┘

                                       v
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │                         INSURANCE FUND / ADL                                │
    │  ┌─────────────────────────────────────────────────────────────────────┐    │
    │  │  Insurance Fund covers bankrupt positions; ADL for extreme events   │    │
    │  └─────────────────────────────────────────────────────────────────────┘    │
    └─────────────────────────────────────────────────────────────────────────────┘

Risk Categories

1. Market Risk

Risk from adverse price movements affecting positions.

Risk TypeMitigationDocumentation
Price volatilityCircuit breakers, price bandsCircuit Breakers
Gap riskPre-trade price validationPre-Trade Checks
Liquidity riskOrder size limits, market depth checksPosition Limits

2. Credit Risk

Risk of counterparty default or insufficient margin.

Risk TypeMitigationDocumentation
Margin shortfallInitial/maintenance marginMargin
Liquidation cascadeADL mechanism, insurance fundLiquidation
Socialized lossInsurance fund coverageInsurance Fund

3. Operational Risk

Risk from system failures or malicious activity.

Risk TypeMitigationDocumentation
System failureKill switch, graceful degradationKill Switch
Fat-finger errorsOrder validation, size limitsPre-Trade Checks
Market manipulationRate limits, wash trade detectionMonitoring

Key Risk Parameters

Global Parameters

interface GlobalRiskConfig {
  // Circuit breaker thresholds
  circuitBreaker: {
    priceMovementThreshold: 0.10,      // 10% price move triggers halt
    volumeSpikeThreshold: 10,           // 10x normal volume
    haltDurationSeconds: 300,           // 5-minute cooling period
  },

  // Position limits
  positionLimits: {
    maxLeverageSpot: 10,                // 10x max for margin
    maxLeveragePerp: 50,                // 50x max for perpetuals
    maxPositionUSD: 10_000_000,         // $10M max position
    maxConcentration: 0.25,             // 25% max in single asset
  },

  // Margin requirements
  margin: {
    initialMarginSpot: 0.10,            // 10% initial (10x leverage)
    maintenanceMarginSpot: 0.05,        // 5% maintenance
    initialMarginPerp: 0.02,            // 2% initial (50x leverage)
    maintenanceMarginPerp: 0.005,       // 0.5% maintenance
  },

  // Liquidation
  liquidation: {
    liquidationFee: 0.005,              // 0.5% liquidation fee
    insuranceFundContribution: 0.20,    // 20% to insurance fund
    adlThreshold: 0.80,                 // ADL at 80% insurance depletion
  },
}

Per-Market Risk Tiers

TierAssetsMax LeveragePosition LimitMargin Buffer
Tier 1BTC, ETH50x$50M1.5x maintenance
Tier 2LUX, SOL, AVAX25x$25M2x maintenance
Tier 3Mid-caps10x$5M2.5x maintenance
Tier 4Small-caps5x$1M3x maintenance
Tier 5New listings3x$100K5x maintenance

Risk Check Flow

Order Submission

func (r *RiskEngine) ValidateOrder(order *Order) error {
    // 1. Structural validation
    if err := r.validateOrderStructure(order); err != nil {
        return fmt.Errorf("invalid order structure: %w", err)
    }

    // 2. Price band check
    if err := r.checkPriceBands(order); err != nil {
        return fmt.Errorf("price band violation: %w", err)
    }

    // 3. Balance/margin check
    if err := r.checkMarginRequirement(order); err != nil {
        return fmt.Errorf("insufficient margin: %w", err)
    }

    // 4. Position limit check
    if err := r.checkPositionLimits(order); err != nil {
        return fmt.Errorf("position limit exceeded: %w", err)
    }

    // 5. Rate limit check
    if err := r.checkRateLimits(order.UserID); err != nil {
        return fmt.Errorf("rate limit exceeded: %w", err)
    }

    return nil
}

Real-Time Monitoring

type RiskMetrics struct {
    // Account-level metrics
    AccountEquity        float64   `json:"account_equity"`
    UnrealizedPnL        float64   `json:"unrealized_pnl"`
    MarginUsed           float64   `json:"margin_used"`
    MarginAvailable      float64   `json:"margin_available"`
    MarginLevel          float64   `json:"margin_level"`      // equity/margin
    HealthFactor         float64   `json:"health_factor"`     // >1 = healthy

    // Position-level metrics
    TotalExposure        float64   `json:"total_exposure"`
    LargestPosition      float64   `json:"largest_position"`
    Concentration        float64   `json:"concentration"`     // % in single asset

    // Market-level metrics
    TotalOpenInterest    float64   `json:"total_open_interest"`
    FundingRate          float64   `json:"funding_rate"`
    MarkPrice            float64   `json:"mark_price"`
    IndexPrice           float64   `json:"index_price"`
}

API Endpoints

Risk Status

GET /api/v1/risk/status
Authorization: Bearer {api_key}

Response:

{
  "account_id": "acc_123456",
  "equity": 100000.00,
  "margin_used": 25000.00,
  "margin_available": 75000.00,
  "health_factor": 4.0,
  "risk_level": "low",
  "positions": 3,
  "total_exposure_usd": 250000.00,
  "largest_position_pct": 0.40,
  "warnings": [],
  "timestamp": "2024-01-15T10:30:00Z"
}

Position Risk

GET /api/v1/risk/positions
Authorization: Bearer {api_key}

Response:

{
  "positions": [
    {
      "symbol": "BTC-PERP",
      "side": "long",
      "size": 2.5,
      "entry_price": 42000.00,
      "mark_price": 43500.00,
      "liquidation_price": 38640.00,
      "margin_used": 10500.00,
      "unrealized_pnl": 3750.00,
      "leverage": 10.0,
      "margin_ratio": 0.097
    }
  ]
}

Risk Configuration

GET /api/v1/risk/config
Authorization: Bearer {api_key}
PUT /api/v1/risk/config
Authorization: Bearer {api_key}
Content-Type: application/json

{
  "max_leverage": 25,
  "position_limit_usd": 500000,
  "risk_alerts": {
    "margin_warning_threshold": 0.80,
    "liquidation_warning_threshold": 0.90
  }
}

Risk Alerts

WebSocket Alerts

// Subscribe to risk alerts
ws.send(JSON.stringify({
  op: 'subscribe',
  channel: 'risk',
  params: { account_id: 'acc_123456' }
}))

// Receive alerts
{
  "channel": "risk",
  "type": "margin_warning",
  "data": {
    "account_id": "acc_123456",
    "current_margin_level": 0.15,
    "warning_threshold": 0.20,
    "action_required": "reduce_positions_or_add_margin",
    "time_to_liquidation_estimate": "2h 15m",
    "timestamp": "2024-01-15T10:30:00Z"
  }
}

Alert Types

Alert TypeTriggerUrgency
margin_warningMargin level < 80%Medium
margin_criticalMargin level < 50%High
liquidation_imminentMargin level < 20%Critical
position_limit_warningPosition > 80% of limitMedium
circuit_breaker_triggeredMarket haltedHigh
kill_switch_activatedTrading suspendedCritical

Best Practices

For Traders

  1. Monitor health factor continuously - Keep above 2.0 for safety buffer
  2. Use stop-loss orders - Automated exits prevent catastrophic losses
  3. Diversify positions - Avoid concentration in single assets
  4. Start with lower leverage - Scale up as you gain experience
  5. Set up risk alerts - Enable all notification channels

For Market Makers

  1. Implement delta hedging - Reduce directional exposure
  2. Monitor funding rates - Adjust positions around funding
  3. Use reduce-only mode - When approaching limits
  4. Maintain margin buffers - At least 3x maintenance margin
  5. Configure sub-accounts - Isolate strategy risk

For Institutions

  1. Implement pre-trade risk - Check before order submission
  2. Use portfolio margining - Optimize capital efficiency
  3. Configure kill switches - Emergency halt capability
  4. Set up risk reporting - Daily/weekly exposure reports
  5. Conduct stress testing - Regular scenario analysis

Risk Documentation

TopicDescriptionLink
Pre-Trade ChecksOrder validation, price bands, balance checksPre-Trade
Position LimitsSize limits, exposure caps, concentration limitsPosition Limits
Margin RequirementsInitial/maintenance margin, cross/isolated modesMargin
LiquidationLiquidation process, cascade prevention, ADLLiquidation
Kill SwitchEmergency procedures, cancel-all, trading haltKill Switch
Circuit BreakersMarket halts, price bands, cooldown periodsCircuit Breakers
Insurance FundFund mechanics, ADL mechanism, coverageInsurance Fund
MonitoringReal-time dashboards, alerts, anomaly detectionMonitoring
ReportingRisk reports, exposure analysis, audit trailsReporting

Implementation Status

ComponentStatusSource
Pre-Trade Risk EngineCompletepkg/risk/pretrade.go
Position Limit ManagerCompletepkg/risk/limits.go
Margin CalculatorCompletepkg/risk/margin.go
Liquidation EngineCompletepkg/risk/liquidation.go
Circuit BreakerCompletepkg/risk/circuit_breaker.go
Insurance FundCompletepkg/risk/insurance.go
Risk MonitoringCompletepkg/risk/monitor.go