Skip to main content

px_core/models/
position.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
5pub struct Position {
6    pub market_id: String,
7    pub outcome: String,
8    pub size: f64,
9    pub average_price: f64,
10    pub current_price: f64,
11}
12
13impl Position {
14    #[inline]
15    pub fn cost_basis(&self) -> f64 {
16        self.size * self.average_price
17    }
18
19    #[inline]
20    pub fn current_value(&self) -> f64 {
21        self.size * self.current_price
22    }
23
24    #[inline]
25    pub fn unrealized_pnl(&self) -> f64 {
26        self.current_value() - self.cost_basis()
27    }
28
29    #[inline]
30    pub fn unrealized_pnl_percent(&self) -> f64 {
31        let cost = self.cost_basis();
32        if cost == 0.0 {
33            return 0.0;
34        }
35        (self.unrealized_pnl() / cost) * 100.0
36    }
37}