Strategy protocol

This commit is contained in:
2026-07-28 03:33:22 +02:00
parent f3656ec940
commit 796bbb397b
2 changed files with 50 additions and 20 deletions
+29 -19
View File
@@ -30,7 +30,11 @@ pub struct RiskManifest {
#[pwp] #[pwp]
pub enum StrategyMessage { pub enum StrategyMessage {
RequestOHLC { Log(EventLog),
GetWatchList,
RequestCandlestick {
symbol: String, symbol: String,
interval: CandleInterval, interval: CandleInterval,
count: u32, count: u32,
@@ -43,44 +47,50 @@ pub enum StrategyMessage {
UnsubscribeAll, UnsubscribeAll,
Signal(StrategySignal), Signal(StrategySignal),
}
#[pwp]
pub enum RiskMessage {
Log(EventLog), Log(EventLog),
GetWatchList,
Approve(Signal),
Reject { reason: String },
} }
#[pwp] #[pwp]
pub enum StrategyEngineMessage { pub enum StrategyEngineMessage {
Initialize { Initialize,
watchlist: Vec<MarketItem>,
}, WatchList(Vec<MarketItem>),
CandleUpdate { CandleUpdate {
symbol: String, symbol: String,
candle: String, interval: CandleInterval,
candle: Candle,
}, },
OHLC { Candlestick {
symbol: String, symbol: String,
interval: CandleInterval, interval: CandleInterval,
candles: Vec<Candle>, candles: Vec<Candle>,
}, },
Start, Command {
command: String,
Stop, args: Vec<String>,
} },
#[pwp]
pub enum RiskMessage {
Approve(Signal),
Reject { reason: String },
Log(EventLog),
} }
#[pwp] #[pwp]
pub enum RiskEngineMessage { pub enum RiskEngineMessage {
Initialize { strategy: String }, Initialize,
WatchList(Vec<MarketItem>),
Command { command: String, args: Vec<String> },
Signal(StrategySignal), Signal(StrategySignal),
+21 -1
View File
@@ -68,10 +68,20 @@ impl StrategyEngine {
let strategy = self.strategy.clone(); let strategy = self.strategy.clone();
let risk = self.risk.clone(); let risk = self.risk.clone();
strategy.send(&StrategyEngineMessage::Initialize).await?;
loop { loop {
match strategy.recv().await? { match strategy.recv().await? {
None => {} None => {}
Some(StrategyMessage::GetWatchList) => {
let mut v = vec![1];
v.extend(engine.config.lock().await.watchlist.to_com());
self.strategy.send_raw(&v).await?;
}
Some(StrategyMessage::Log(mut log)) => { Some(StrategyMessage::Log(mut log)) => {
log.name.insert_str(0, "strategy::"); log.name.insert_str(0, "strategy::");
engine.terminal_server.log_raw(log).await?; engine.terminal_server.log_raw(log).await?;
@@ -97,7 +107,7 @@ impl StrategyEngine {
} }
} }
Some(StrategyMessage::RequestOHLC { Some(StrategyMessage::RequestCandlestick {
symbol, symbol,
interval, interval,
count, count,
@@ -144,10 +154,20 @@ impl StrategyEngine {
let risk = self.risk.clone(); let risk = self.risk.clone();
risk.send(&RiskEngineMessage::Initialize).await?;
loop { loop {
match risk.recv().await? { match risk.recv().await? {
None => {} None => {}
Some(RiskMessage::GetWatchList) => {
let mut v = vec![1];
v.extend(engine.config.lock().await.watchlist.to_com());
self.risk.send_raw(&v).await?;
}
Some(RiskMessage::Log(mut log)) => { Some(RiskMessage::Log(mut log)) => {
log.name.insert_str(0, "risk::"); log.name.insert_str(0, "risk::");
engine.terminal_server.log_raw(log).await?; engine.terminal_server.log_raw(log).await?;