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