Path: blob/master/ invest-robot-contest_tinkoffSDK-master/my_signal_executor.py
5925 views
import logging1from functools import singledispatchmethod23from tinkoff.invest.services import Services4from tinkoff.invest.strategies.base.errors import UnknownSignal5from tinkoff.invest.strategies.base.signal import (6CloseLongMarketOrder,7CloseShortMarketOrder,8OpenLongMarketOrder,9OpenShortMarketOrder,10Signal,11)12from tinkoff.invest.strategies.moving_average.strategy_settings import (13MovingAverageStrategySettings,14)15from tinkoff.invest.strategies.moving_average.strategy_state import (16MovingAverageStrategyState,17)1819import my_signal_executor_base20from my_signal_executor_base import SignalExecutor2122logger = logging.getLogger(__name__)232425class MovingAverageSignalExecutor(SignalExecutor):26def __init__(27self,28services: Services,29state: MovingAverageStrategyState,30settings: MovingAverageStrategySettings,31):32super().__init__(services, settings)33self._services = services34self._state = state3536@singledispatchmethod37def execute(self, signal: Signal) -> None:38raise UnknownSignal()3940@execute.register41def _execute_open_long_market_order(self, signal: OpenLongMarketOrder) -> None:42self.execute_open_long_market_order(signal)43self._state.long_open = True44self._state.position = signal.lots45logger.info("Signal executed %s", signal)4647@execute.register48def _execute_close_long_market_order(self, signal: CloseLongMarketOrder) -> None:49self.execute_close_long_market_order(signal)50self._state.long_open = False51self._state.position = 052logger.info("Signal executed %s", signal)5354@execute.register55def _execute_open_short_market_order(self, signal: OpenShortMarketOrder) -> None:56self.execute_open_short_market_order(signal)57self._state.short_open = True58self._state.position = signal.lots59logger.info("Signal executed %s", signal)6061@execute.register62def _execute_close_short_market_order(self, signal: CloseShortMarketOrder) -> None:63self.execute_close_short_market_order(signal)64self._state.short_open = False65self._state.position = 066logger.info("Signal executed %s", signal)676869