use chrono::{DateTime, Utc};
use rustrade_core::Side;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TradeOutcome {
pub symbol: String,
pub close_side: Side,
pub qty: f64,
pub entry_price: f64,
pub exit_price: f64,
pub gross_pnl: f64,
pub fee: f64,
pub closed_at: DateTime<Utc>,
}
impl TradeOutcome {
pub fn net_pnl(&self) -> f64 {
self.gross_pnl - self.fee
}
pub fn outcome(&self) -> Outcome {
let n = self.net_pnl();
if n > 0.0 {
Outcome::Win
} else if n < 0.0 {
Outcome::Loss
} else {
Outcome::Breakeven
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Outcome {
Win,
Loss,
Breakeven,
}