Source code for algo_engine.strategy

import logging
from threading import Lock

from .. import LOGGER
from ..base import TradeInstruction
from ..engine import EVENT_ENGINE, TOPIC, MDS, MarketDataService, Balance, Inventory, DirectMarketAccess, RiskProfile, PositionManagementService

LOGGER = LOGGER.getChild('Strategy')

from .strategy_engine import StrategyEngine


[docs] class EventDMA(DirectMarketAccess):
[docs] def __init__(self, mds: MarketDataService, risk_profile: RiskProfile, event_engine=None, cool_down: float = None): self.event_engine = EVENT_ENGINE if event_engine is None else event_engine super().__init__(mds=mds, risk_profile=risk_profile, cool_down=cool_down)
def _launch_order_handler(self, order: TradeInstruction, **kwargs): self.event_engine.put(topic=TOPIC.launch_order(ticker=order.ticker), order=order, **kwargs) def _cancel_order_handler(self, order: TradeInstruction, **kwargs): self.event_engine.put(topic=TOPIC.cancel_order(ticker=order.ticker), order_id=order.order_id, **kwargs) def _reject_order_handler(self, order: TradeInstruction, **kwargs): raise NotImplementedError()
def set_logger(logger: logging.Logger): global LOGGER LOGGER = logger strategy_engine.LOGGER = logger.getChild('Strategy') REPLAY_LOCK = Lock() INVENTORY = Inventory() BALANCE = Balance(inventory=INVENTORY) # need to be registered RISK_PROFILE = RiskProfile(mds=MDS, balance=BALANCE) DMA = EventDMA(mds=MDS, risk_profile=RISK_PROFILE) POSITION_TRACKER = PositionManagementService(dma=DMA) STRATEGY_ENGINE = StrategyEngine(event_engine=EVENT_ENGINE, position_tracker=POSITION_TRACKER) # need to be registered, also register MDS BALANCE.add(strategy=STRATEGY_ENGINE, position_tracker=POSITION_TRACKER) __all__ = ['INVENTORY', 'BALANCE', 'RISK_PROFILE', 'DMA', 'POSITION_TRACKER', 'STRATEGY_ENGINE']