From 8f4c984486be461ac81577e81e44897d31657181 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 1 Aug 2026 22:23:31 +0200 Subject: [PATCH] Perps equity --- pulse-sdk/src/general.rs | 2 +- src/engine/engine/mod.rs | 2 +- src/engine/engine/risk.rs | 9 ++------- src/engine/engine/terminal.rs | 5 +++++ src/terminal/formatting.rs | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pulse-sdk/src/general.rs b/pulse-sdk/src/general.rs index 1b8dd78..fd70443 100644 --- a/pulse-sdk/src/general.rs +++ b/pulse-sdk/src/general.rs @@ -63,7 +63,7 @@ pub struct Position { #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct EngineStatus { - pub equity: Decimal, + pub perps_equity: Decimal, pub strategy_mode: Mode, pub strategy_state: ItemState, } diff --git a/src/engine/engine/mod.rs b/src/engine/engine/mod.rs index 80a9f91..c062433 100644 --- a/src/engine/engine/mod.rs +++ b/src/engine/engine/mod.rs @@ -66,7 +66,7 @@ impl Engine { // live data / status status: Arc::new(Mutex::new(EngineStatus { - equity: 0.into(), + perps_equity: 0.into(), strategy_mode: Mode::Auto, strategy_state: ItemState::Stopped, })), diff --git a/src/engine/engine/risk.rs b/src/engine/engine/risk.rs index ba45dcc..cee9b65 100644 --- a/src/engine/engine/risk.rs +++ b/src/engine/engine/risk.rs @@ -68,14 +68,9 @@ impl RiskEngine { let mut state = self.state.lock().await; if let Some(acc) = engine.accounts.lock().await.get_active() { - self.state.lock().await.starting_equity = client - .user_vault_equities(acc.address) - .await? - .into_iter() - .map(|v| v.equity) - .sum(); + let clearing_house = client.clearinghouse_state(acc.address, None).await?; - engine.status.lock().await.equity = state.starting_equity; + state.starting_equity = clearing_house.margin_summary.account_value; } state.pnl = 0.into(); diff --git a/src/engine/engine/terminal.rs b/src/engine/engine/terminal.rs index 40a4c4d..20d700e 100644 --- a/src/engine/engine/terminal.rs +++ b/src/engine/engine/terminal.rs @@ -227,6 +227,11 @@ impl TerminalServer { if let Some(acc) = engine.accounts.lock().await.get_active() { match client.clearinghouse_state(acc.address, None).await { Ok(state) => { + engine.status.lock().await.perps_equity = + state.margin_summary.account_value; + + engine.update_status().await?; + self.broadcast(TerminalServerMessage::PositionsUpdated( state .asset_positions diff --git a/src/terminal/formatting.rs b/src/terminal/formatting.rs index 3ca77ca..17bd12e 100644 --- a/src/terminal/formatting.rs +++ b/src/terminal/formatting.rs @@ -199,12 +199,12 @@ impl Formatted for EngineStatus { fn get_formatted(&self) -> Vec { vec![ Triple( - "\x1b[2mTrading Equity\x1b[0m", - "\x1b[2mState\x1b[0m", - "\x1b[2mMode\x1b[0m", + "\x1b[2mPerps Equity\x1b[0m", + "\x1b[2mStrategy State\x1b[0m", + "\x1b[2mStrategy Mode\x1b[0m", ), Triple( - &format_usd(self.equity.as_f64()), + &format_usd(self.perps_equity.as_f64()), &self.strategy_state.to_string(), &self.strategy_mode.to_string(), ),