Ejemplo n.º 1
0
    def delete_bar_data(self, symbol: str, exchange: Exchange,
                        interval: Interval) -> int:
        """"""
        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
            "interval": interval.value
        }

        # Query data count
        query1 = ("select count(close_price) from bar_data"
                  " where vt_symbol=$vt_symbol"
                  " and interval=$interval")
        result = self.client.query(query1, bind_params=bind_params)
        points = result.get_points()

        for d in points:
            count = d["count"]

        # Delete data
        query2 = ("drop series from bar_data"
                  " where vt_symbol=$vt_symbol"
                  " and interval=$interval")
        self.client.query(query2, bind_params=bind_params)

        # Delete overview
        f = shelve.open(self.overview_filepath)
        vt_symbol = generate_vt_symbol(symbol, exchange)
        key = f"{vt_symbol}_{interval.value}"
        if key in f:
            f.pop(key)
        f.close()

        return count
Ejemplo n.º 2
0
    def delete_bar_data(self, symbol: str, exchange: "Exchange",
                        interval: "Interval") -> int:
        """
        Delete all bar data with given symbol + exchange + interval.
        """
        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
            "interval": interval.value
        }

        # Query data count
        query1 = ("select count(close_price) from bar_data"
                  " where vt_symbol=$vt_symbol"
                  " and interval=$interval")
        result = influx_client.query(query1, bind_params=bind_params)
        points = result.get_points()

        for d in points:
            count = d["count"]

        # Delete data
        query2 = ("drop series from bar_data"
                  " where vt_symbol=$vt_symbol"
                  " and interval=$interval")
        influx_client.query(query2, bind_params=bind_params)

        return count
Ejemplo n.º 3
0
    def get_oldest_bar_data(self, symbol: str, exchange: "Exchange",
                            interval: "Interval") -> Optional["BarData"]:
        query = ("select first(close_price), * from bar_data"
                 " where vt_symbol=$vt_symbol"
                 " and interval=$interval")

        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
            "interval": interval.value
        }

        result = influx_client.query(query, bind_params=bind_params)
        points = result.get_points()

        bar = None
        for d in points:
            dt = datetime.strptime(d["time"], "%Y-%m-%dT%H:%M:%SZ")

            bar = BarData(symbol=symbol,
                          exchange=exchange,
                          interval=interval,
                          datetime=dt.replace(tzinfo=DB_TZ),
                          open_price=d["open_price"],
                          high_price=d["high_price"],
                          low_price=d["low_price"],
                          close_price=d["close_price"],
                          volume=d["volume"],
                          open_interest=d["open_interest"],
                          gateway_name="DB")

        return bar
Ejemplo n.º 4
0
    def delete_tick_data(
        self,
        symbol: str,
        exchange: Exchange
    ) -> int:
        """"""
        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
        }

        # Query data count
        query1 = (
            "select count(last_price) from tick_data"
            " where vt_symbol=$vt_symbol"
        )
        result = self.client.query(query1, bind_params=bind_params)
        points = result.get_points()

        for d in points:
            count = d["count"]

        # Delete data
        query2 = (
            "drop series from tick_data"
            " where vt_symbol=$vt_symbol"
        )
        self.client.query(query2, bind_params=bind_params)

        return count
Ejemplo n.º 5
0
    def load_tick_data(self, symbol: str, exchange: Exchange, start: datetime,
                       end: datetime) -> List[TickData]:
        """"""
        query = ("select * from tick_data"
                 " where vt_symbol=$vt_symbol"
                 f" and time >= '{start.date().isoformat()}'"
                 f" and time <= '{end.date().isoformat()}';")

        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
        }

        result = self.client.query(query, bind_params=bind_params)
        points = result.get_points()

        ticks: List[TickData] = []
        for d in points:
            dt = datetime.strptime(d["time"], "%Y-%m-%dT%H:%M:%SZ")

            tick = TickData(symbol=symbol,
                            exchange=exchange,
                            datetime=dt.astimezone(DB_TZ),
                            name=d["name"],
                            volume=d["volume"],
                            turnover=d["turnover"],
                            open_interest=d["open_interest"],
                            last_price=d["last_price"],
                            last_volume=d["last_volume"],
                            limit_up=d["limit_up"],
                            limit_down=d["limit_down"],
                            open_price=d["open_price"],
                            high_price=d["high_price"],
                            low_price=d["low_price"],
                            pre_close=d["pre_close"],
                            bid_price_1=d["bid_price_1"],
                            bid_price_2=d["bid_price_2"],
                            bid_price_3=d["bid_price_3"],
                            bid_price_4=d["bid_price_4"],
                            bid_price_5=d["bid_price_5"],
                            ask_price_1=d["ask_price_1"],
                            ask_price_2=d["ask_price_2"],
                            ask_price_3=d["ask_price_3"],
                            ask_price_4=d["ask_price_4"],
                            ask_price_5=d["ask_price_5"],
                            bid_volume_1=d["bid_volume_1"],
                            bid_volume_2=d["bid_volume_2"],
                            bid_volume_3=d["bid_volume_3"],
                            bid_volume_4=d["bid_volume_4"],
                            bid_volume_5=d["bid_volume_5"],
                            ask_volume_1=d["ask_volume_1"],
                            ask_volume_2=d["ask_volume_2"],
                            ask_volume_3=d["ask_volume_3"],
                            ask_volume_4=d["ask_volume_4"],
                            ask_volume_5=d["ask_volume_5"],
                            localtime=d["localtime"],
                            gateway_name="DB")
            ticks.append(tick)

        return ticks
Ejemplo n.º 6
0
    def load_bar_data(
        self,
        symbol: str,
        exchange: Exchange,
        interval: Interval,
        start: datetime,
        end: datetime,
    ) -> Sequence[BarData]:
        if isinstance(start, datetime):
            start = start.date()

        if isinstance(end, datetime):
            end = end.date()

        query = ("select * from bar_data"
                 " where vt_symbol=$vt_symbol"
                 " and interval=$interval"
                 f" and time >= '{start.isoformat()}'"
                 f" and time <= '{end.isoformat()}';")

        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
            "interval": interval.value
        }

        result = influx_client.query(query, bind_params=bind_params)
        points = result.get_points()

        data = []
        for d in points:
            dt = datetime.strptime(d["time"], "%Y-%m-%dT%H:%M:%SZ")

            bar = BarData(symbol=symbol,
                          exchange=exchange,
                          interval=interval,
                          datetime=dt.replace(tzinfo=DB_TZ),
                          open_price=d["open_price"],
                          high_price=d["high_price"],
                          low_price=d["low_price"],
                          close_price=d["close_price"],
                          volume=d["volume"],
                          open_interest=d["open_interest"],
                          gateway_name="DB")
            data.append(bar)

        return data
Ejemplo n.º 7
0
    def load_bar_data(
        self,
        symbol: str,
        exchange: Exchange,
        interval: Interval,
        start: datetime,
        end: datetime
    ) -> List[BarData]:
        """"""
        query = (
            "select * from bar_data"
            " where vt_symbol=$vt_symbol"
            " and interval=$interval"
            f" and time >= '{start.date().isoformat()}'"
            f" and time <= '{end.date().isoformat()}';"
        )

        bind_params = {
            "vt_symbol": generate_vt_symbol(symbol, exchange),
            "interval": interval.value
        }

        result = self.client.query(query, bind_params=bind_params)
        points = result.get_points()

        bars: List[BarData] = []
        for d in points:
            dt = datetime.strptime(d["time"], "%Y-%m-%dT%H:%M:%SZ")

            bar = BarData(
                symbol=symbol,
                exchange=exchange,
                interval=interval,
                datetime=DB_TZ.localize(dt),
                open_price=d["open_price"],
                high_price=d["high_price"],
                low_price=d["low_price"],
                close_price=d["close_price"],
                volume=d["volume"],
                open_interest=d["open_interest"],
                gateway_name="DB"
            )
            bars.append(bar)

        return bars
Ejemplo n.º 8
0
    def new_child_order(self, message: fix.Message):
        """"""
        child_order = GenusChildOrder(
            cl_ord_id=get_field_value(message, fix.ClOrdID()),
            symbol=get_field_value(message, fix.Symbol()),
            side=get_field_value(message, fix.Side()),
            order_qty=get_field_value(message, fix.OrderQty()),
            price=get_field_value(message, fix.Price()),
            order_type=get_field_value(message, fix.OrdType()),
            ord_status="A",
            parent_orderid=get_field_value(message, fix.StringField(526)))

        # If parent offset not exist, then this child order should be ignored
        offset = self.client.get_parent_offset(child_order.parent_orderid)
        if not offset:
            return

        symbol, genus_exchange = child_order.symbol.split(".")
        exchange = EXCHANGE_GNS2VT[genus_exchange]
        direction = DIRECTION_GNS2VT[child_order.side]
        order_type = ORDERTYPE_GNS2VT[child_order.order_type]

        vt_symbol = generate_vt_symbol(symbol, exchange)

        child_order.order_id = self.client.send_order(
            vt_symbol,
            direction,
            offset,
            order_type,
            child_order.price,
            child_order.order_qty,
        )
        self.child_orders[child_order.order_id] = child_order
        self.genus_vt_map[child_order.cl_ord_id] = child_order.order_id

        msg = f"委托{direction.value}{vt_symbol}:{child_order.order_qty}@{child_order.price}"
        self.client.write_log(msg, algo_name=child_order.parent_orderid)