def query_range_contracts( self, start_timestamp: int, finish_timestamp: int, interval: str, standard: bool = False, due_timestamp: int = 0, # 辅助参数 ): conn = Conn(self.db_name) params = (start_timestamp, finish_timestamp, self.symbol, self.exchange, interval) candles = conn.query( "SELECT * FROM {} WHERE timestamp >= ? AND timestamp < ? AND symbol = ? AND exchange = ?" " AND `interval` = ? ORDER BY timestamp, due_timestamp LIMIT 100".format(self.table_name), params, ) if due_timestamp: tmp_candles = conn.query( "SELECT * FROM {} WHERE timestamp = ? AND symbol = ? AND exchange = ? AND `interval` = ?" " AND due_timestamp > ? ORDER BY due_timestamp".format(self.table_name), (start_timestamp, self.symbol, self.exchange, interval, due_timestamp) ) candles = tmp_candles + candles conn.close() # 手动关闭链接。 for candle in candles: yield self.__standard_candle(candle) if standard else candle if len(candles) >= 100: yield from self.query_range_contracts( candles[-1]["timestamp"] + 1000, finish_timestamp, interval, standard=standard, due_timestamp=candles[-1].get("due_timestamp") or 0, )
def query_range( self, start_timestamp: int, finish_timestamp: int, interval: str, standard: bool = False ): conn = Conn(self.db_name) params = (self.symbol, self.exchange, interval, start_timestamp, finish_timestamp) if self.trade_type == TRADE_TYPE_FUTURE: params = (self.symbol, self.exchange, self.contract_type, interval, start_timestamp, finish_timestamp) candles = conn.query(self.sql, params) conn.close() # 手动关闭链接。 for candle in candles: yield self.__standard_candle(candle) if standard else candle if len(candles) == 100: yield from self.query_range(candles[-1]["timestamp"] + 1000, finish_timestamp, interval, standard=standard)