Module backtest

Source
Expand description

§Enhanced Backtesting Functionality with Hyperliquid-specific Features

This module provides enhanced backtesting capabilities that extend the rs-backtester framework with Hyperliquid-specific features including funding rate calculations, maker/taker fee structures, and perpetual futures mechanics.

§Key Features

  • Funding Rate Integration: Automatic calculation of funding payments based on position size
  • Enhanced Commission Structure: Separate maker/taker rates matching Hyperliquid’s fee structure
  • Perpetual Futures Support: Complete support for perpetual futures trading mechanics
  • Advanced Reporting: Detailed reports separating trading PnL from funding PnL
  • Seamless Integration: Drop-in replacement for rs-backtester with enhanced features

§Usage Examples

§Basic Enhanced Backtesting

use hyperliquid_backtest::prelude::*;

#[tokio::main]
async fn main() -> Result<(), HyperliquidBacktestError> {
    // Fetch data
    let data = HyperliquidData::fetch("BTC", "1h", start_time, end_time).await?;
     
    // Create strategy
    let strategy = enhanced_sma_cross(10, 20, Default::default())?;
     
    // Set up enhanced backtest
    let mut backtest = HyperliquidBacktest::new(
        data,
        strategy,
        10000.0, // $10,000 initial capital
        HyperliquidCommission::default(),
    )?;
     
    // Run backtest with funding calculations
    backtest.calculate_with_funding()?;
     
    // Get comprehensive results
    let report = backtest.enhanced_report()?;
    println!("Total Return: {:.2}%", report.total_return * 100.0);
    println!("Trading PnL: ${:.2}", report.trading_pnl);
    println!("Funding PnL: ${:.2}", report.funding_pnl);
     
    Ok(())
}

§Custom Commission Structure

use hyperliquid_backtest::prelude::*;

// Create custom commission structure
let commission = HyperliquidCommission::new(
    0.0001, // 0.01% maker rate
    0.0003, // 0.03% taker rate
    true,   // Enable funding calculations
);

let mut backtest = HyperliquidBacktest::new(
    data,
    strategy,
    50000.0,
    commission,
)?;

§Funding-Only Analysis

use hyperliquid_backtest::prelude::*;

// Disable trading fees to analyze funding impact only
let commission = HyperliquidCommission::new(0.0, 0.0, true);

let mut backtest = HyperliquidBacktest::new(data, strategy, 10000.0, commission)?;
backtest.calculate_with_funding()?;

let funding_report = backtest.funding_report()?;
println!("Pure funding PnL: ${:.2}", funding_report.net_funding_pnl);

Structs§

CommissionStats
Commission statistics for reporting
CommissionTracker
Commission tracking for detailed reporting
EnhancedMetrics
Enhanced metrics for Hyperliquid backtesting
EnhancedReport
Enhanced report structure with Hyperliquid-specific metrics
FundingPayment
Individual funding payment record
FundingSummary
Funding payment summary for reporting
HyperliquidBacktest
Enhanced backtesting engine with Hyperliquid-specific features
HyperliquidCommission
Commission structure for Hyperliquid trading

Enums§

OrderType
Order type for commission calculation
OrderTypeStrategy
Strategy for determining order types in backtesting
TradingScenario
Trading scenario for commission calculation