def init_bar_overview(self) -> None: """ Init overview table if not exists. """ f = shelve.open(self.overview_filepath) query: str = "select count(close_price) from bar_data group by *" result = self.client.query(query) for k, v in result.items(): tags = k[1] data = list(v)[0] vt_symbol = tags["vt_symbol"] symbol, exchange = extract_vt_symbol(vt_symbol) interval = Interval(tags["interval"]) overview = BarOverview( symbol=symbol, exchange=exchange, interval=interval, count=data["count"] ) overview.start = self.get_bar_datetime(vt_symbol, interval, 1) overview.end = self.get_bar_datetime(vt_symbol, interval, -1) key = f"{vt_symbol}_{interval.value}" f[key] = overview f.close()
def get_bar_overview(self) -> List[BarOverview]: """查询数据库中的K线汇总信息""" c: Cursor = self.overview_collection.find() overviews = [] for d in c: d["exchange"] = Exchange(d["exchange"]) d["interval"] = Interval(d["interval"]) d.pop("_id") overview = BarOverview(**d) overviews.append(overview) return overviews
def get_bar_overview(self) -> List[BarOverview]: """查询数据库中的K线整体概况""" s = self.db.query(DbBarOverview).all() overviews = [] for overview in s: data = BarOverview( symbol=overview.symbol, exchange=Exchange(overview.exchange), interval=Interval(overview.interval), count=overview.count, start=overview.start, end=overview.end ) overviews.append(data) return overviews
def save_bar_data(self, bars: List[BarData]) -> bool: """""" json_body = [] bar = bars[0] vt_symbol = bar.vt_symbol interval = bar.interval for bar in bars: bar.datetime = convert_tz(bar.datetime) d = { "measurement": "bar_data", "tags": { "vt_symbol": vt_symbol, "interval": interval.value }, "time": bar.datetime.isoformat(), "fields": { "open_price": bar.open_price, "high_price": bar.high_price, "low_price": bar.low_price, "close_price": bar.close_price, "volume": bar.volume, "open_interest": bar.open_interest, } } json_body.append(d) self.client.write_points(json_body, batch_size=10000) # Update bar overview symbol, exchange = extract_vt_symbol(vt_symbol) key = f"{vt_symbol}_{interval.value}" f = shelve.open(self.overview_filepath) overview = f.get(key, None) if not overview: overview = BarOverview( symbol=symbol, exchange=exchange, interval=interval ) overview.count = len(bars) overview.start = bars[0].datetime overview.end = bars[-1].datetime else: overview.start = min(overview.start, bars[0].datetime) overview.end = max(overview.end, bars[-1].datetime) query = ( "select count(close_price) from bar_data" " where vt_symbol=$vt_symbol" " and interval=$interval" ) bind_params = { "vt_symbol": vt_symbol, "interval": interval.value } result = self.client.query(query, bind_params=bind_params) points = result.get_points() for d in points: overview.count = d["count"] f[key] = overview f.close()