use chrono::NaiveDateTime;
use positive::Positive;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GeneralPerformanceMetrics {
pub total_return: Decimal,
pub annualized_return: Decimal,
pub volatility: Option<Positive>,
pub downside_deviation: Option<Positive>,
pub sharpe_ratio: Option<Decimal>,
pub sortino_ratio: Option<Decimal>,
pub calmar_ratio: Option<Decimal>,
pub win_rate: Option<Decimal>,
pub profit_factor: Option<Decimal>,
pub avg_gain: Option<Decimal>,
pub avg_loss: Option<Decimal>,
pub gain_loss_ratio: Option<Decimal>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OptionsSpecificMetrics {
pub return_on_margin: Option<Decimal>,
pub return_on_premium: Option<Decimal>,
pub premium_capture: Option<Decimal>,
pub avg_delta_exposure: Option<Decimal>,
pub avg_gamma_exposure: Option<Decimal>,
pub avg_theta_exposure: Option<Decimal>,
pub avg_vega_exposure: Option<Decimal>,
pub avg_vanna_exposure: Option<Decimal>,
pub avg_vomma_exposure: Option<Decimal>,
pub avg_veta_exposure: Option<Decimal>,
pub avg_charm_exposure: Option<Decimal>,
pub avg_color_exposure: Option<Decimal>,
pub calls_percentage: Option<Decimal>,
pub puts_percentage: Option<Decimal>,
pub long_percentage: Option<Decimal>,
pub short_percentage: Option<Decimal>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MarketConditionMetrics {
pub bull_market_days: Positive,
pub bear_market_days: Positive,
pub sideways_market_days: Positive,
pub high_volatility_days: Positive,
pub low_volatility_days: Positive,
pub avg_market_volatility: Option<Decimal>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RollingMetrics {
pub window_size: Positive,
pub timestamps: Vec<NaiveDateTime>,
pub rolling_returns: Vec<Decimal>,
pub rolling_volatility: Vec<Decimal>,
pub rolling_sharpe: Vec<Decimal>,
pub rolling_sortino: Vec<Decimal>,
pub rolling_win_rate: Vec<Decimal>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BenchmarkComparison {
pub benchmark_name: String,
pub benchmark_return: Decimal,
pub alpha: Decimal,
pub beta: Decimal,
pub correlation: Decimal,
pub tracking_error: Decimal,
pub information_ratio: Option<Decimal>,
pub up_capture: Option<Decimal>,
pub down_capture: Option<Decimal>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AdvancedRiskMetrics {
pub value_at_risk_95: Option<Decimal>,
pub value_at_risk_99: Option<Decimal>,
pub expected_shortfall: Option<Decimal>,
pub tail_ratio: Option<Decimal>,
pub max_consecutive_losses: usize,
pub ulcer_index: Option<Decimal>,
pub pain_index: Option<Decimal>,
}