def run_downloading(self, vt_symbol: str, interval: str, start: datetime, end: datetime): """ Query bar data from RQData. """ self.write_log( f"{vt_symbol}-{interval} start downloading historical data ") symbol, exchange = extract_vt_symbol(vt_symbol) req = HistoryRequest(symbol=symbol, exchange=exchange, interval=Interval(interval), start=start, end=end) contract = self.main_engine.get_contract(vt_symbol) try: # If history data provided in gateway, then query if contract and contract.history_data: data = self.main_engine.query_history(req, contract.gateway_name) # Otherwise use RQData to query data else: data = rqdata_client.query_history(req) if data: database_manager.save_bar_data(data) self.write_log( f"{vt_symbol}-{interval} historical data download is complete " ) else: self.write_log( f" data download failed , unable to get {vt_symbol} historical data " ) except Exception: msg = f" data download failed , trigger abnormal :\n{traceback.format_exc()}" self.write_log(msg) # Clear thread object handler. self.thread = None
def run_downloading(self, vt_symbol: str, interval: str, start: datetime, end: datetime): """ Query bar data from RQData. """ self.write_log(f"{vt_symbol}-{interval}开始下载历史数据") try: symbol, exchange = extract_vt_symbol(vt_symbol) except ValueError: self.write_log(f"{vt_symbol}解析失败,请检查交易所后缀") self.thread = None return req = HistoryRequest(symbol=symbol, exchange=exchange, interval=Interval(interval), start=start, end=end) contract = self.main_engine.get_contract(vt_symbol) try: # If history data provided in gateway, then query if contract and contract.history_data: data = self.main_engine.query_history(req, contract.gateway_name) # Otherwise use RQData to query data else: data = rqdata_client.query_history(req) if data: database_manager.save_bar_data(data) self.write_log(f"{vt_symbol}-{interval}历史数据下载完成") else: self.write_log(f"数据下载失败,无法获取{vt_symbol}的历史数据") except Exception: msg = f"数据下载失败,触发异常:\n{traceback.format_exc()}" self.write_log(msg) # Clear thread object handler. self.thread = None
def query_bar_from_rq( symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime ): """ Query bar data from RQData. """ if not rqdata_client.inited: rqdata_client.init() req = HistoryRequest( symbol=symbol, exchange=exchange, interval=interval, start=start, end=end ) data = rqdata_client.query_history(req) return data
def download_bar_data( self, symbol: str, exchange: Exchange, interval: str, start: datetime ) -> int: """ Query bar data from RQData. """ req = HistoryRequest( symbol=symbol, exchange=exchange, interval=Interval(interval), start=start, end=datetime.now() ) vt_symbol = f"{symbol}.{exchange.value}" contract = self.main_engine.get_contract(vt_symbol) # If history data provided in gateway, then query if contract and contract.history_data: data = self.main_engine.query_history( req, contract.gateway_name ) # Otherwise use RQData to query data else: if not rqdata_client.inited: rqdata_client.init() data = rqdata_client.query_history(req) if data: database_manager.save_bar_data(data) return(len(data)) return 0
def _query_history(self, vt_symbol: str, interval: Interval, start: datetime, end: datetime) -> None: """""" contract: ContractData = self.main_engine.get_contract(vt_symbol) req = HistoryRequest(symbol=contract.symbol, exchange=contract.exchange, interval=interval, start=start, end=end) if contract.history_data: data = self.main_engine.query_history(req, contract.gateway_name) else: data = rqdata_client.query_history(req) if not data: data = database_manager.load_bar_data(symbol=contract.symbol, exchange=contract.exchange, interval=interval, start=start, end=end) event = Event(EVENT_CHART_HISTORY, data) self.event_engine.put(event)
def load_data(req): data = rqdata_client.query_history(req) database_manager.save_bar_data(data) print(f"{req.symbol}历史数据下载完成")
start_t = start_date else: start_t = datetime.datetime(year=year, month=1, day=1) if i == count: end_t = end_date else: end_t = datetime.datetime(year=year + 1, month=1, day=1) - datetime.timedelta(seconds=1) schedule = calendar.schedule(start_t, end_t) pair.append((schedule.market_open[0], schedule.market_close[-1])) return pair data = rqdata_client.query_history(req) ds = [from_bar(i) for i in data] df = pd.DataFrame(ds) df.set_index(['index'], inplace=True) start = df.index[0] end = df.index[-1] pair = get_date_range(start, end) # row_data = list(map(lambda x: {'index':x.datetime.astimezone(pytz.utc), 'open':x.open_price, 'high':x.high_price,'low':x.low_price,'close':x.close_price,'volume':x.volume},data)) # # index = list(map(lambda x: x.datetime.astimezone(pytz.utc),data)) # df = pd.DataFrame(row_data) # df.set_index(['index'], inplace=True) for p in pair: year = p[0].year trun_data = df.truncate(p[0], p[1])
def load_bar_data( self, symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime, ) -> Sequence[BarData]: req = HistoryRequest(symbol, start=start, end=end, interval=interval, exchange=exchange) data = rqdata_client.query_history(req) _start = int(time.mktime(start.timetuple())) _end = int(time.mktime(end.timetuple())) rq_interval = INTERVAL_VT2RQ.get(interval) if not rq_interval: return [] # For adjust timestamp from bar close point (RQData) to open point (VN # Trader) adjustment = INTERVAL_ADJUSTMENT_MAP[interval] # For querying night trading period data if rq_interval == "1d": if symbol[:2] == "15" or symbol[:2] == "51": ls = [ x for x in self.db_client["quantaxis"]["index_day"].find( { "code": symbol, "date_stamp": { "$gte": _start, "$lte": _end } }, sort=[('date_stamp', 1)]) ] df = pd.DataFrame(ls) else: ls = [ x for x in self.db_client["quantaxis"]["stock_day"].find( { "code": symbol, "date_stamp": { "$gte": _start, "$lte": _end } }, sort=[('date_stamp', 1)]) ] df = pd.DataFrame(ls) else: if symbol[:2] == "15" or symbol[:2] == "51": ls = [ x for x in self.db_client["quantaxis"]["index_min"].find( { "code": symbol, "type": rq_interval, "time_stamp": { "$gte": _start, "$lte": _end } }, sort=[('time_stamp', 1)]) ] df = pd.DataFrame(ls) else: ls = [ x for x in self.db_client["quantaxis"]["stock_min"].find( { "code": symbol, "type": rq_interval, "time_stamp": { "$gte": _start, "$lte": _end } }, sort=[('time_stamp', 1)]) ] df = pd.DataFrame(ls) data: List[BarData] = [] if df is not None: for ix, row in df.iterrows(): if rq_interval == "1d": d = datetime.fromtimestamp(row["date_stamp"]) else: d = datetime.fromtimestamp(row["time_stamp"]) bar = BarData(symbol=symbol, exchange=exchange, interval=interval, datetime=d - adjustment, open_price=row["open"], high_price=row["high"], low_price=row["low"], close_price=row["close"], volume=row["vol"], gateway_name="MongoDB") data.append(bar) return data