From 90876c83a78f03ae04dd12d1f122e585fc10ee06 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 25 Jul 2026 19:23:04 +0200 Subject: [PATCH] Strategy messaging --- pulse-wire/src/lib.rs | 18 ++++++++++ pulse-wire/src/strategy.rs | 73 +++++++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/pulse-wire/src/lib.rs b/pulse-wire/src/lib.rs index 689db77..ff1a69c 100644 --- a/pulse-wire/src/lib.rs +++ b/pulse-wire/src/lib.rs @@ -52,6 +52,24 @@ impl PulseWire for Vec { } } +impl PulseWire for Option { + fn to_com(&self) -> Vec { + if let Some(v) = self { + v.to_com() + } else { + vec![0] + } + } + + fn from_com(com: &mut Vec) -> Self { + if com[0] > 0 { + Some(T::from_com(com)) + } else { + None + } + } +} + impl PulseWire for String { fn to_com(&self) -> Vec { let bytes = self.as_bytes(); diff --git a/pulse-wire/src/strategy.rs b/pulse-wire/src/strategy.rs index 757ac70..07d2419 100644 --- a/pulse-wire/src/strategy.rs +++ b/pulse-wire/src/strategy.rs @@ -1,4 +1,9 @@ -use crate::{PulseWire, units::TimeFrame}; +use crate::{ + PulseWire, + general::{EventLog, Signal}, + terminal::MarketItem, + units::{Direction, TimeFrame}, +}; use pulse_macros::pwp; #[pwp] @@ -23,3 +28,69 @@ pub struct RiskManifest { max_loss: u8, cooldown: TimeFrame, } + +#[pwp] +pub enum StrategyMessage { + RequestOHLC { + symbol: String, + timeframe: TimeFrame, + count: u32, + }, + + SubscribeCandle { + symbol: String, + timeframe: TimeFrame, + }, + + Signal(StrategySignal), + + Log(EventLog), +} + +#[pwp] +pub enum StrategyEngineMessage { + Initialize { + watchlist: Vec, + }, + + CandleUpdate { + symbol: String, + candle: String, + }, + + OHLC { + symbol: String, + timeframe: TimeFrame, + candles: Vec, + }, + + Start, + + Stop, +} + +#[pwp] +pub enum RiskMessage { + Approve(Signal), + + Reject { reason: String }, + + Log(EventLog), +} + +#[pwp] +pub enum RiskEngineMessage { + Initialize { strategy: String }, + + Signal(StrategySignal), + + MarketUpdate { symbol: String, price: f64 }, +} + +#[pwp] +pub struct StrategySignal { + pub symbol: String, + pub side: Direction, + pub confidence: f32, + pub price: Option, +}