px_core/models/
position.rs1use 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}