From bc28ac73015ffe85a6f09fdae272d52eaf32d699 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 28 Jul 2026 17:33:57 +0200 Subject: [PATCH] Working strategy --- src/__init__.py | 83 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 16 deletions(-) diff --git a/src/__init__.py b/src/__init__.py index 8c2f2a1..359fe89 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,5 +1,4 @@ import sys -import struct import plugin import general @@ -7,7 +6,7 @@ class PulseWire: def __init__(self): ... - def on_raw_engine_request(self, data: bytes): + def onRaw(self, data: bytes): ... def send_raw(self, data: bytes): @@ -17,25 +16,42 @@ class PulseWire: def start(self): while True: - len_buf = sys.stdin.buffer.read(struct.calcsize("P")) + len_buf = sys.stdin.buffer.read(8) + + sys.stderr.write(str(len_buf)) if len(len_buf) == 0: - return None + continue length = int.from_bytes(len_buf, "little") if length == 0: - return None + continue buffer = sys.stdin.buffer.read(length) if len(buffer) != length: raise EOFError("Unexpected EOF while reading payload") - self.on_raw_engine_request(buffer) + self.onRaw(buffer) class Strategy(PulseWire): - def on_request(self, req: plugin.StrategyEngineMessage): + def onInitialize(self, msg: plugin.StrategyEngineMessage.Initialize): + ... + + def onWatchList(self, msg: plugin.StrategyEngineMessage.WatchList): + ... + + def onCommand(self, msg: plugin.StrategyEngineMessage.Command): + ... + + def onCandleUpdate(self, msg: plugin.StrategyEngineMessage.CandleUpdate): + ... + + def onCandlestick(self, msg: plugin.StrategyEngineMessage.Candlestick): + ... + + def on(self, req: plugin.StrategyEngineMessageType): ... def send(self, req: plugin.StrategyMessageType): @@ -64,11 +80,35 @@ class Strategy(PulseWire): msg.signal = signal self.send(msg) - def on_raw_engine_request(self, data: bytes): - self.on_request(plugin.StrategyEngineMessage.from_com(data=data)) #type: ignore + def onRaw(self, data: bytes): + result: tuple[plugin.StrategyEngineMessageType, int] = plugin.StrategyEngineMessage.from_com(data=data) + req, _ = result + + self.on(req) + + handler = getattr( + self, + f"on{req.__class__.__name__}", + None + ) + + if handler: + handler(req) class Risk(PulseWire): - def on_request(self, req: plugin.RiskEngineMessage): + def onInitialize(self, msg: plugin.RiskEngineMessage.Initialize): + ... + + def onWatchList(self, msg: plugin.RiskEngineMessage.WatchList): + ... + + def onCommand(self, msg: plugin.RiskEngineMessage.Command): + ... + + def onSignal(self, msg: plugin.RiskEngineMessage.Signal): + ... + + def on(self, req: plugin.RiskEngineMessageType): ... def send(self, req: plugin.RiskMessageType): @@ -92,16 +132,27 @@ class Risk(PulseWire): msg.reason = reason self.send(msg) - def on_raw_engine_request(self, data: bytes): - com = plugin.RiskEngineMessage.from_com(data=data) + def onRaw(self, data: bytes): + result: tuple[plugin.RiskEngineMessageType, int] = plugin.RiskEngineMessage.from_com(data=data) + req, _ = result + + self.on(req) + + handler = getattr( + self, + f"on{req.__class__.__name__}", + None + ) + + if handler: + handler(req) class Bro(Strategy): def __init__(self): - self.log(general.EventLog.info("bro", "Hello, World")) super().__init__() - def on_request(self, req: plugin.StrategyEngineMessage): - # self.log(general.EventLog.info("bro", "Hello, World")) - pass + def onInitialize(self, msg: plugin.StrategyEngineMessage.Initialize): + self.log(general.EventLog.info("bro", "Hello, World")) + return super().onInitialize(msg) Bro().start() \ No newline at end of file