def query_bar(self, symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime): """ Query bar data from RQData. """ rq_symbol = self.to_rq_symbol(symbol, exchange) if rq_symbol not in self.symbols: return None end += timedelta(1) # For querying night trading period data df = rqdata_get_price( rq_symbol, frequency=interval.value, fields=["open", "high", "low", "close", "volume"], start_date=start, end_date=end) data: List[BarData] = [] for ix, row in df.iterrows(): bar = BarData(symbol=symbol, exchange=exchange, interval=interval, datetime=row.name.to_pydatetime(), open_price=row["open"], high_price=row["high"], low_price=row["low"], close_price=row["close"], volume=row["volume"], gateway_name="RQ") data.append(bar) return data
def init(self, username: str = "", password: str = "") -> bool: """""" if self.inited: return True if username and password: self.username = username self.password = password if not self.username or not self.password: return False try: rqdata_init(self.username, self.password, ('rqdatad-pro.ricequant.com', 16011), use_pool=True, max_pool_size=3) df = rqdata_all_instruments() for ix, row in df.iterrows(): self.symbols.add(row['order_book_id']) temp = rqdata_get_price('000001.XSHE', start_date='2015-04-01', end_date='2015-04-01', frequency='15m') print('get_price', temp) except (RuntimeError, AuthenticationFailed): print('rqdata error') return False self.inited = True return True
def query_history(self, req: HistoryRequest) -> Optional[List[BarData]]: """ Query history bar data from RQData. """ symbol = req.symbol exchange = req.exchange interval = req.interval start = req.start end = req.end rq_symbol = self.to_rq_symbol(symbol, exchange) if rq_symbol not in self.symbols: return None rq_interval = INTERVAL_VT2RQ.get(interval) if not rq_interval: return None # For adjust timestamp from bar close point (RQData) to open point (VN Trader) adjustment = INTERVAL_ADJUSTMENT_MAP[interval] # For querying night trading period data end += timedelta(1) # Only query open interest for futures contract fields = ["open", "high", "low", "close", "volume"] if not symbol.isdigit(): fields.append("open_interest") df = rqdata_get_price( rq_symbol, frequency=rq_interval, fields=fields, start_date=start, end_date=end, adjust_type="none" ) data: List[BarData] = [] if df is not None: for ix, row in df.iterrows(): bar = BarData( symbol=symbol, exchange=exchange, interval=interval, datetime=row.name.to_pydatetime() - adjustment, open_price=row["open"], high_price=row["high"], low_price=row["low"], close_price=row["close"], volume=row["volume"], open_interest=row.get("open_interest", 0), gateway_name="RQ" ) data.append(bar) return data
def download_stock(order_book_id, engine, tbname): print('download ' + order_book_id) interval = '30m' df = rqdata_get_price( order_book_id, start_date='2010-04-15', end_date='2020-04-15', frequency=interval, fields=['open', 'close', 'high', 'low', 'volume', 'total_turnover']) df['interval'] = df.apply(lambda x: interval, axis=1) df['order_book_id'] = df.apply(lambda x: order_book_id, axis=1) df.to_sql(tbname, engine, if_exists='append') print('download ' + order_book_id + ' success')
def query_tick_history(self, req: HistoryRequest) -> Optional[List[TickData]]: """ Query history bar data from RQData. """ if self.symbols is None: return None symbol = req.symbol exchange = req.exchange start = req.start end = req.end rq_symbol = self.to_rq_symbol(symbol, exchange) if rq_symbol not in self.symbols: return None # For querying night trading period data end += timedelta(1) # Only query open interest for futures contract fields = [ "open", "high", "low", "last", "prev_close", "volume", "limit_up", "limit_down", "b1", "b2", "b3", "b4", "b5", "a1", "a2", "a3", "a4", "a5", "b1_v", "b2_v", "b3_v", "b4_v", "b5_v", "a1_v", "a2_v", "a3_v", "a4_v", "a5_v", ] if not symbol.isdigit(): fields.append("open_interest") df = rqdata_get_price(rq_symbol, frequency="tick", fields=fields, start_date=start, end_date=end, adjust_type="none") data: List[TickData] = [] if df is not None: for ix, row in df.iterrows(): dt = row.name.to_pydatetime() dt = CHINA_TZ.localize(dt) tick = TickData(symbol=symbol, exchange=exchange, datetime=dt, open_price=row["open"], high_price=row["high"], low_price=row["low"], pre_close=row["prev_close"], last_price=row["last"], volume=row["volume"], open_interest=row.get("open_interest", 0), limit_up=row["limit_up"], limit_down=row["limit_down"], bid_price_1=row["b1"], bid_price_2=row["b2"], bid_price_3=row["b3"], bid_price_4=row["b4"], bid_price_5=row["b5"], ask_price_1=row["a1"], ask_price_2=row["a2"], ask_price_3=row["a3"], ask_price_4=row["a4"], ask_price_5=row["a5"], bid_volume_1=row["b1_v"], bid_volume_2=row["b2_v"], bid_volume_3=row["b3_v"], bid_volume_4=row["b4_v"], bid_volume_5=row["b5_v"], ask_volume_1=row["a1_v"], ask_volume_2=row["a2_v"], ask_volume_3=row["a3_v"], ask_volume_4=row["a4_v"], ask_volume_5=row["a5_v"], gateway_name="RQ") data.append(tick) return data