diff --git a/copilot/_actor.py b/copilot/_actor.py index 8f208126..69058d29 100644 --- a/copilot/_actor.py +++ b/copilot/_actor.py @@ -24,7 +24,7 @@ from core.mixins import EventHandlerMixin from core.models.risk_type import SessionRiskType, SignalRiskType from core.models.side import PositionSide, SignalSide -from core.models.signal_risk import SignalRisk +from core.models.entity.signal_risk import SignalRisk from core.models.strategy_type import StrategyType from core.queries.copilot import EvaluateSession, EvaluateSignal diff --git a/core/actors/policy/signal.py b/core/actors/policy/signal.py index 133cf6d2..46abae90 100644 --- a/core/actors/policy/signal.py +++ b/core/actors/policy/signal.py @@ -9,5 +9,5 @@ def should_process(cls, actor, event: NewMarketDataReceived) -> bool: return ( event.symbol == actor.symbol and event.timeframe == actor.timeframe - and event.closed + and event.bar.closed ) diff --git a/core/events/ohlcv.py b/core/events/ohlcv.py index bc368714..8b69ab5a 100644 --- a/core/events/ohlcv.py +++ b/core/events/ohlcv.py @@ -1,6 +1,5 @@ from dataclasses import dataclass, field - -from core.models.entity.ohlcv import OHLCV +from core.models.entity.bar import Bar from core.models.symbol import Symbol from core.models.timeframe import Timeframe @@ -19,8 +18,7 @@ class MarketEvent(Event): class NewMarketDataReceived(MarketEvent): symbol: Symbol timeframe: Timeframe - ohlcv: OHLCV - closed: bool + bar: Bar def to_dict(self): parent_dict = super().to_dict() @@ -28,8 +26,7 @@ def to_dict(self): current_dict = { "symbol": str(self.symbol), "timeframe": str(self.timeframe), - "ohlcv": self.ohlcv.to_dict(), - "closed": self.closed, + "bar": self.bar.to_dict(), } return {**parent_dict, **current_dict} diff --git a/core/events/risk.py b/core/events/risk.py index 9f027403..8e573069 100644 --- a/core/events/risk.py +++ b/core/events/risk.py @@ -16,8 +16,3 @@ class RiskEvent(Event): @dataclass(frozen=True) class RiskThresholdBreached(RiskEvent): pass - - -@dataclass(frozen=True) -class RiskAdjustRequested(RiskEvent): - adjust_price: float diff --git a/feed/_historical.py b/feed/_historical.py index 89fb80fc..3506801d 100644 --- a/feed/_historical.py +++ b/feed/_historical.py @@ -124,7 +124,7 @@ async def _handle_market(self, batch: List[Bar]) -> None: for bar in batch: await self.tell( NewMarketDataReceived( - self.symbol, self.timeframe, bar.ohlcv, bar.closed + self.symbol, self.timeframe, bar ) ) await asyncio.sleep(0.0001) diff --git a/feed/_realtime.py b/feed/_realtime.py index 5cf60a99..3ab4ef7c 100644 --- a/feed/_realtime.py +++ b/feed/_realtime.py @@ -101,6 +101,6 @@ async def _process_bars(self, bars: List[Bar]): await self.tell( NewMarketDataReceived( - self.symbol, self.timeframe, bar.ohlcv, bar.closed + self.symbol, self.timeframe, bar ) ) diff --git a/risk/_actor.py b/risk/_actor.py index 9cc418cf..3d2e7670 100644 --- a/risk/_actor.py +++ b/risk/_actor.py @@ -151,15 +151,16 @@ async def _process_market( self, event: NewMarketDataReceived, position: Optional[Position] ): next_position = position + curr_bar = event.bar.ohlcv if position and not position.has_risk: prev_bar = next_position.risk_bar next_bar = await self.ask(NextBar(self.symbol, self.timeframe, prev_bar)) - next_bar = next_bar or event.ohlcv + next_bar = next_bar or curr_bar attempts = 0 - diff = event.ohlcv.timestamp - next_bar.timestamp + diff = curr_bar.timestamp - next_bar.timestamp while diff < 0 and attempts < MAX_ATTEMPTS: new_prev_bar = await self.ask( @@ -168,7 +169,7 @@ async def _process_market( attempts += 1 if new_prev_bar: - diff = event.ohlcv.timestamp - new_prev_bar.timestamp + diff = curr_bar.timestamp - new_prev_bar.timestamp prev_bar = new_prev_bar bars = [next_bar] diff --git a/strategy/_actor.py b/strategy/_actor.py index a69198c0..bcc1f3da 100644 --- a/strategy/_actor.py +++ b/strategy/_actor.py @@ -44,7 +44,7 @@ def pre_receive(self, event: NewMarketDataReceived): async def on_receive(self, event: NewMarketDataReceived): signal_event = self.strategy_ref.next( - self.symbol, self.timeframe, self.strategy, event.ohlcv + self.symbol, self.timeframe, self.strategy, event.bar.ohlcv ) if signal_event: