Esempio n. 1
0
    def __init__(self, *args, **kwargs):
        # name of the context. Good practice is to match the algo name
        # this will be used to tag orders where supported
        self._name = kwargs.get("name", blueshift_run_get_name())
        self.__timestamp = None
        self.__recored_vars = pd.DataFrame()

        # get the broker object and mark initialize
        self.__broker_initialized = False
        self.__clock = None
        self.__asset_finder = None
        self.__broker_api = None
        self.__data_portal = None
        self.__auth = None
        self.__broker_tuple = None
        self._reset_broker_tuple(*args, **kwargs)  # set initialize True

        # object to track performance
        self.__tracker_initialized = False
        self.__calendar = None
        self.__account = None
        self.__portfolio = None

        # if broker is initialized we can update these
        self._reset_trackers()

        # initialize the performance tracker
        # TODO: this perhaps need to go and replaced by _reset_performance
        self.__performance = kwargs.get("perf", None)

        # in case the algo is part of a Algostack add parent
        self.parent = None
        self._reset_parent(*args, **kwargs)

        self._perf_initialized = False
Esempio n. 2
0
 def __init__(self, *args, **kwargs):
     '''
         init method can pass a `timeout` and a `tz` arg. The tz
         arg is necessary for proper management, but missing this
         is not deemed to be catastrophic. If the API call raises
         invalid token, another handshake can be triggered.
     '''
     self._name = kwargs.get("name", blueshift_run_get_name())
     self._type = None
     self._timeout = kwargs.get("timeout", None)
     self._tz = kwargs.get("tz", None)
     self._last_login = None
     self._valid_till = None
Esempio n. 3
0
    def _create(self, *args, **kwargs):
        logger = get_logger()
        if logger:
            self.logger = logger
        else:
            self.logger = BlueShiftLogger(*args, **kwargs)

        self.error_rules = {}
        self.callbacks = []
        self.publisher = None
        self.cmd_listener = None

        self.set_error_handling()

        topic = kwargs.get("topic", blueshift_run_get_name())
        self.set_up_publisher(topic)
        self.set_up_cmd_listener()
Esempio n. 4
0
 def __init__(self, *args, **kwargs):
     self._name = kwargs.get("name", blueshift_run_get_name())
     self._trading_calendar = kwargs.get("trading_calendar", None)
     self._api = kwargs.get("api", None)
     self._auth = kwargs.get("auth", None)
     self._asset_finder = kwargs.get("asset_finder", None)
Esempio n. 5
0
 def __init__(self, *args, **kwargs):
     self._name = kwargs.get("name", blueshift_run_get_name())
Esempio n. 6
0
    def __init__(self, *args, **kwargs):
        self.name = kwargs.pop("name", blueshift_run_get_name())
        self.mode = kwargs.pop("mode", MODE.BACKTEST)
        self._paused = False

        transitions = [{
            'trigger': 'fsm_initialize',
            'source': 'STARTUP',
            'dest': 'INITIALIZED'
        }, {
            'trigger': 'fsm_before_trading_start',
            'source': 'HEARTBEAT',
            'dest': 'BEFORE_TRADING_START'
        }, {
            'trigger': 'fsm_before_trading_start',
            'source': 'INITIALIZED',
            'dest': 'BEFORE_TRADING_START'
        }, {
            'trigger': 'fsm_before_trading_start',
            'source': 'AFTER_TRADING_HOURS',
            'dest': 'BEFORE_TRADING_START'
        }, {
            'trigger': 'fsm_handle_data',
            'source': 'BEFORE_TRADING_START',
            'dest': 'TRADING_BAR'
        }, {
            'trigger': 'fsm_handle_data',
            'source': 'HEARTBEAT',
            'dest': 'TRADING_BAR'
        }, {
            'trigger': 'fsm_handle_data',
            'source': 'TRADING_BAR',
            'dest': 'TRADING_BAR'
        }, {
            'trigger': 'fsm_after_trading_hours',
            'source': 'TRADING_BAR',
            'dest': 'AFTER_TRADING_HOURS'
        }, {
            'trigger': 'fsm_after_trading_hours',
            'source': 'HEARTBEAT',
            'dest': 'AFTER_TRADING_HOURS'
        }, {
            'trigger': 'fsm_heartbeat',
            'source': 'AFTER_TRADING_HOURS',
            'dest': 'HEARTBEAT'
        }, {
            'trigger': 'fsm_heartbeat',
            'source': 'BEFORE_TRADING_START',
            'dest': 'HEARTBEAT'
        }, {
            'trigger': 'fsm_heartbeat',
            'source': 'INITIALIZED',
            'dest': 'HEARTBEAT'
        }, {
            'trigger': 'fsm_heartbeat',
            'source': 'HEARTBEAT',
            'dest': 'HEARTBEAT'
        }, {
            'trigger': 'fsm_heartbeat',
            'source': 'TRADING_BAR',
            'dest': 'HEARTBEAT'
        }, {
            'trigger': 'fsm_analyze',
            'source': '*',
            'dest': 'STOPPED'
        }, {
            'trigger': 'fsm_pause',
            'source': '*',
            'dest': 'PAUSED'
        }]

        self.machine = Machine(model=self,
                               states=AlgoStateMachine.states,
                               transitions=transitions,
                               initial="STARTUP")

        self.machine.add_transition('fsm_pause',
                                    '*',
                                    'PAUSED',
                                    conditions='is_running',
                                    after='set_pause')
        self.machine.add_transition('fsm_resume',
                                    'PAUSED',
                                    'STARTUP',
                                    before='reset_pause')
        self.machine.add_transition('fsm_stop', '*', 'STOPPED')