Exemple #1
0
        def orders(sid, data):
            logger.info('RECEIVED: {}, {}'.format(EVENT_GET_ORDERS, data))

            if 'order_storage' not in data:
                return 'ERROR', {
                    'message': 'Missing "order_storage" field in request.'
                }

            order_storage = order_storage_plugins.get_order_storage(
                data['order_storage'])

            strategy_run_id = data[
                'strategy_run_id'] if 'strategy_run_id' in data else None

            result_orders = order_storage.find_by(
                data['market'],
                deserialize_pair(data['pair']),
                interval=deserialize_datetime_interval(data['interval']),
                strategy_run_id=strategy_run_id)

            result_data = serialize_orders(result_orders)

            if strategy_run_id is not None:
                # Todo: Make this configurable, see https://github.com/Achse/coinrat/issues/47
                portfolio_snapshot_storage = self._portfolio_snapshot_storage_plugins \
                    .get_portfolio_snapshot_storage('influx_db')

                snapshots = portfolio_snapshot_storage.get_for_strategy_run(
                    strategy_run_id)
                for row in result_data:
                    row['portfolio_snapshot'] = serialize_portfolio_snapshot(
                        snapshots[row[ORDER_FIELD_ORDER_ID]])

            return 'OK', result_data
Exemple #2
0
def deserialize_strategy_run(data: Dict) -> StrategyRun:
    return StrategyRun(
        UUID(data['strategy_run_id']),
        dateutil.parser.parse(
            data['run_at']).replace(tzinfo=datetime.timezone.utc),
        deserialize_pair(data['pair']),
        deserialize_strategy_run_markets(data['markets']),
        data['strategy_name'],
        data['strategy_configuration'],
        deserialize_datetime_interval(data['interval']),
        data['candle_storage_name'],
        data['order_storage_name'],
    )
Exemple #3
0
        def clear_orders(sid, data):
            logger.info('RECEIVED: {}, {}'.format(EVENT_CLEAR_ORDERS, data))

            if 'order_storage' not in data:
                return 'ERROR', {
                    'message': 'Missing "order_storage" field in request.'
                }

            order_storage = order_storage_plugins.get_order_storage(
                data['order_storage'])
            order_storage.delete_by(data['market'],
                                    deserialize_pair(data['pair']),
                                    interval=deserialize_datetime_interval(
                                        data['interval']))

            return 'OK'
Exemple #4
0
        def candles(sid, data):
            logger.info('RECEIVED: {}, {}'.format(EVENT_GET_CANDLES, data))

            if 'candle_storage' not in data:
                return 'ERROR', {
                    'message': 'Missing "candle_storage" field in request.'
                }

            candle_storage = candle_storage_plugins.get_candle_storage(
                data['candle_storage'])
            result_candles = candle_storage.find_by(
                data['market'],
                deserialize_pair(data['pair']),
                deserialize_datetime_interval(data['interval']),
                candle_size=deserialize_candle_size(data['candle_size']))

            return 'OK', serialize_candles(result_candles)
Exemple #5
0
 def process_reply_strategy(self, data: Dict) -> None:
     logger.info("[Rabbit] Processing task: %s | %r", TASK_REPLY_STRATEGY, data)
     interval = deserialize_datetime_interval(data)
     strategy_run = StrategyRun(
         uuid.uuid4(),
         self._date_time_factory.now(),
         deserialize_pair(data['pair']),
         [StrategyRunMarket(data['market_plugin_name'], data['market'], data['market_configuration'])],
         data['strategy_name'],
         data['strategy_configuration'],
         interval,
         data['candles_storage'],
         data['orders_storage']
     )
     self._strategy_run_storage.insert(strategy_run)
     self._event_emitter.emit_new_strategy_run(strategy_run)
     self._strategy_replayer.run(strategy_run)
     logger.info("[Rabbit] Finished task: %s | %r", TASK_REPLY_STRATEGY, data)
Exemple #6
0
        def on_subscribe(session_id, data):
            if data['event'] == EVENT_LAST_CANDLE_UPDATED:
                subscription = LastCandleSubscription(
                    session_id, data['storage'], data['market'],
                    deserialize_pair(data['pair']),
                    deserialize_candle_size(data['candle_size']))
            elif data['event'] == EVENT_NEW_ORDER:
                subscription = NewOrderSubscription(
                    session_id, data['storage'], data['market'],
                    deserialize_pair(data['pair']),
                    deserialize_datetime_interval(data['interval']))
            elif data['event'] == EVENT_NEW_STRATEGY_RUN:
                subscription = NewStrategyRunSubscription(session_id)
            else:
                raise ValueError('Event "{}" not supported'.format(
                    data['event']))

            self._subscription_storage.subscribe(subscription)
            return 'OK'