hyperliquid-backtest 0.1.2

Comprehensive Rust library for backtesting trading strategies with Hyperliquid data, funding rates, and perpetual futures mechanics
Documentation
use std::time::Duration;
use chrono::{DateTime, FixedOffset, Utc};
use tokio::time::sleep;

use hyperliquid_backtest::prelude::*;
use hyperliquid_backtest::live_trading::{LiveTradingEngine, AlertLevel};
use hyperliquid_backtest::trading_mode::{TradingMode, TradingModeManager, TradingConfig, RiskConfig};
use hyperliquid_backtest::trading_mode_impl::{Position, OrderRequest, OrderSide, OrderType, TimeInForce};
use hyperliquid_backtest::risk_manager::RiskManager;
use hyperliquid_backtest::real_time_monitoring::MonitoringManager;
use hyperliquid_backtest::strategies::trading_strategy::TradingStrategy;

/// # Deployment and Production Setup Guide
///
/// This example provides a comprehensive guide for deploying trading strategies
/// to production on Hyperliquid, including:
///
/// - Setting up a secure production environment
/// - Configuring proper risk management for live trading
/// - Implementing monitoring and alerting systems
/// - Setting up logging and error handling
/// - Creating deployment checklists and procedures
/// - Implementing emergency stop mechanisms
/// - Setting up backup and recovery procedures
/// - Configuring proper API key management

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Deployment and Production Setup Guide");
    println!("====================================\n");

    // This example doesn't execute actual trades but demonstrates the setup process
    
    // 1. Environment Setup
    println!("1. Environment Setup");
    println!("------------------");
    println!("  - Use a dedicated server or VM for production trading");
    println!("  - Ensure server has reliable power and internet connection");
    println!("  - Set up proper firewall and security measures");
    println!("  - Use environment variables for sensitive configuration");
    println!("  - Set up proper logging with rotation and retention policies");
    println!("  - Configure automatic system updates and maintenance windows");
    println!("  - Set up monitoring for system resources (CPU, memory, disk)");
    println!("  - Configure NTP for accurate time synchronization");
    
    // 2. API Key Management
    println!("\n2. API Key Management");
    println!("-------------------");
    println!("  - Store API keys securely using environment variables or a secrets manager");
    println!("  - Use read-only API keys for monitoring when possible");
    println!("  - Rotate API keys regularly");
    println!("  - Set up IP restrictions for API access");
    println!("  - Never commit API keys to version control");
    println!("  - Use separate API keys for development and production");
    
    // Example of loading API keys from environment variables
    println!("\n  Example of loading API keys from environment variables:");
    println!("  ```");
    println!("  let api_key = std::env::var(\"HYPERLIQUID_API_KEY\")?;");
    println!("  let api_secret = std::env::var(\"HYPERLIQUID_API_SECRET\")?;");
    println!("  ```");
    
    // 3. Risk Management Configuration
    println!("\n3. Risk Management Configuration");
    println!("-----------------------------");
    println!("  - Configure conservative risk parameters for live trading");
    println!("  - Set up position size limits and leverage restrictions");
    println!("  - Configure maximum daily loss limits");
    println!("  - Set up stop-loss and take-profit mechanisms");
    println!("  - Implement circuit breakers for extreme market conditions");
    println!("  - Configure correlation-based position limits");
    
    // Example of production risk configuration
    let production_risk_config = RiskConfig {
        max_position_size_pct: 0.05,    // 5% of portfolio per position
        max_daily_loss_pct: 0.02,       // 2% max daily loss
        stop_loss_pct: 0.05,            // 5% stop loss
        take_profit_pct: 0.10,          // 10% take profit
        max_leverage: 2.0,              // 2x max leverage
        max_open_positions: 5,          // Maximum 5 open positions
        max_concentration_pct: 0.20,    // 20% max concentration in one asset class
        max_correlation: 0.7,           // 0.7 max correlation between positions
        max_drawdown_pct: 0.15,         // 15% max drawdown
        max_volatility_pct: 0.02,       // 2% max daily volatility
        emergency_stop_loss_pct: 0.05,  // 5% emergency stop loss
    };
    
    println!("\n  Example of production risk configuration:");
    println!("  ```");
    println!("  let production_risk_config = RiskConfig {{");
    println!("      max_position_size_pct: 0.05,    // 5% of portfolio per position");
    println!("      max_daily_loss_pct: 0.02,       // 2% max daily loss");
    println!("      stop_loss_pct: 0.05,            // 5% stop loss");
    println!("      take_profit_pct: 0.10,          // 10% take profit");
    println!("      max_leverage: 2.0,              // 2x max leverage");
    println!("      // ... other risk parameters");
    println!("  }};");
    println!("  ```");
    
    // 4. Monitoring and Alerting Setup
    println!("\n4. Monitoring and Alerting Setup");
    println!("-----------------------------");
    println!("  - Set up real-time monitoring for positions and orders");
    println!("  - Configure alerts for critical events");
    println!("  - Implement multi-channel notifications (email, SMS, chat)");
    println!("  - Set up performance dashboards");
    println!("  - Configure regular status reports");
    println!("  - Implement heartbeat monitoring");
    
    // Example of setting up monitoring
    println!("\n  Example of setting up monitoring:");
    println!("  ```");
    println!("  // Initialize monitoring manager");
    println!("  let mut monitoring_manager = MonitoringManager::new(TradingMode::LiveTrade);");
    println!("  ");
    println!("  // Configure alert handlers");
    println!("  monitoring_manager.add_alert_handler(|alert| {{");
    println!("      if alert.level == \"Critical\" {{");
    println!("          // Send SMS notification");
    println!("          send_sms_alert(&alert);");
    println!("      }}");
    println!("      ");
    println!("      // Log all alerts");
    println!("      log::warn!(\"Alert: {} - {}\", alert.level, alert.message);");
    println!("  }});");
    println!("  ```");
    
    // 5. Logging and Error Handling
    println!("\n5. Logging and Error Handling");
    println!("---------------------------");
    println!("  - Set up comprehensive logging for all trading activities");
    println!("  - Configure different log levels for different components");
    println!("  - Implement proper error handling and recovery procedures");
    println!("  - Set up log aggregation and analysis");
    println!("  - Configure log rotation and retention policies");
    println!("  - Implement transaction logging for all orders");
    
    // Example of setting up logging
    println!("\n  Example of setting up logging:");
    println!("  ```");
    println!("  // Initialize logger with file and console output");
    println!("  let file_appender = tracing_appender::rolling::daily(\"/var/log/trading\", \"trading.log\");");
    println!("  let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);");
    println!("  ");
    println!("  tracing_subscriber::fmt()");
    println!("      .with_max_level(tracing::Level::INFO)");
    println!("      .with_writer(non_blocking)");
    println!("      .init();");
    println!("  ```");
    
    // 6. Deployment Checklist
    println!("\n6. Deployment Checklist");
    println!("---------------------");
    println!("  - Verify strategy performance in backtesting and paper trading");
    println!("  - Confirm risk parameters are properly configured");
    println!("  - Verify monitoring and alerting systems are operational");
    println!("  - Check API key permissions and restrictions");
    println!("  - Verify system resources are sufficient");
    println!("  - Confirm logging is properly configured");
    println!("  - Test emergency stop procedures");
    println!("  - Verify backup and recovery procedures");
    println!("  - Start with reduced position sizes initially");
    println!("  - Monitor closely during initial deployment");
    
    // 7. Emergency Procedures
    println!("\n7. Emergency Procedures");
    println!("---------------------");
    println!("  - Implement emergency stop functionality");
    println!("  - Create procedures for manual intervention");
    println!("  - Set up redundant communication channels");
    println!("  - Document recovery procedures");
    println!("  - Test emergency procedures regularly");
    
    // Example of emergency stop implementation
    println!("\n  Example of emergency stop implementation:");
    println!("  ```");
    println!("  // Emergency stop function");
    println!("  async fn emergency_stop(engine: &mut LiveTradingEngine) {{");
    println!("      // Log emergency stop");
    println!("      log::error!(\"Emergency stop activated\");");
    println!("      ");
    println!("      // Cancel all open orders");
    println!("      if let Err(e) = engine.cancel_all_orders().await {{");
    println!("          log::error!(\"Failed to cancel orders: {}\", e);");
    println!("      }}");
    println!("      ");
    println!("      // Close all positions");
    println!("      if let Err(e) = engine.close_all_positions().await {{");
    println!("          log::error!(\"Failed to close positions: {}\", e);");
    println!("      }}");
    println!("      ");
    println!("      // Activate risk manager emergency stop");
    println!("      engine.risk_manager.activate_emergency_stop();");
    println!("      ");
    println!("      // Send critical alert");
    println!("      engine.send_alert(AlertLevel::Critical, \"Emergency stop activated\", None, None);");
    println!("  }}");
    println!("  ```");
    
    // 8. Backup and Recovery
    println!("\n8. Backup and Recovery");
    println!("--------------------");
    println!("  - Set up regular database backups");
    println!("  - Configure system state persistence");
    println!("  - Implement position recovery procedures");
    println!("  - Document recovery steps for different failure scenarios");
    println!("  - Test recovery procedures regularly");
    
    // 9. Performance Monitoring
    println!("\n9. Performance Monitoring");
    println!("-----------------------");
    println!("  - Set up regular performance reporting");
    println!("  - Monitor strategy performance against expectations");
    println!("  - Track key performance indicators (KPIs)");
    println!("  - Implement performance dashboards");
    println!("  - Configure alerts for performance deviations");
    
    // 10. Continuous Improvement
    println!("\n10. Continuous Improvement");
    println!("------------------------");
    println!("  - Regularly review trading performance");
    println!("  - Analyze logs for patterns and issues");
    println!("  - Update strategies based on performance");
    println!("  - Refine risk parameters as needed");
    println!("  - Implement A/B testing for strategy improvements");
    println!("  - Document lessons learned and best practices");
    
    // Example Production Deployment Script
    println!("\nExample Production Deployment Script");
    println!("=================================");
    println!("```bash");
    println!("#!/bin/bash");
    println!("# Production deployment script for Hyperliquid trading strategy");
    println!("");
    println!("# 1. Stop existing trading service");
    println!("systemctl stop trading-service");
    println!("");
    println!("# 2. Backup current state");
    println!("cp -r /opt/trading/data /opt/trading/data.backup.$(date +%Y%m%d%H%M%S)");
    println!("");
    println!("# 3. Deploy new version");
    println!("cp -r /tmp/new-version/* /opt/trading/");
    println!("");
    println!("# 4. Update configuration");
    println!("cp /opt/trading/config/production.toml /opt/trading/config/active.toml");
    println!("");
    println!("# 5. Start service in monitoring mode (no trading)");
    println!("systemctl start trading-service --monitoring-only");
    println!("");
    println!("# 6. Run health checks");
    println!("sleep 60");
    println!("if ! curl -s http://localhost:8080/health | grep -q 'ok'; then");
    println!("  echo 'Health check failed, rolling back'");
    println!("  systemctl stop trading-service");
    println!("  cp -r /opt/trading/data.backup.* /opt/trading/data");
    println!("  systemctl start trading-service --previous-version");
    println!("  exit 1");
    println!("fi");
    println!("");
    println!("# 7. Enable trading");
    println!("curl -X POST http://localhost:8080/api/enable-trading");
    println!("");
    println!("# 8. Send deployment notification");
    println!("curl -X POST https://notify.example.com/deployment-complete");
    println!("```");
    
    println!("\nDeployment and production setup guide completed!");
    
    Ok(())
}