def do_hq_api_call(self, method_name, *args, **kwargs): """ 代理发送请求到实际的客户端 :param method_name: 调用的方法名称 :param args: 参数 :param kwargs: kv参数 :return: 调用结果 """ try: result = getattr(self.api, method_name)(*args, **kwargs) if result is None: log.info("api(%s) call return None" % (method_name, )) except Exception as e: log.info("api(%s) call failed, Exception is %s" % (method_name, str(e))) result = None # 如果无法获取信息,则进行重试 if result is None: if self.api_call_retry_times >= self.api_call_max_retry_times: log.info("(method_name=%s) max retry times(%d) reached" % (method_name, self.api_call_max_retry_times)) raise TdxHqApiCallMaxRetryTimesReachedException( "(method_name=%s) max retry times reached" % method_name) old_api_ip = self.api.ip new_api_ip = None if self.hot_failover_api: new_api_ip = self.hot_failover_api.ip log.info( "api call from init client (ip=%s) err, perform rotate to (ip =%s)..." % (old_api_ip, new_api_ip)) self.api.disconnect() self.api = self.hot_failover_api log.info("retry times is " + str(self.api_call_max_retry_times)) # 从池里再次获取备用ip new_ips = self.ippool.get_ips() choise_ip = None for _test_ip in new_ips: if _test_ip[0] == old_api_ip or _test_ip[0] == new_api_ip: continue choise_ip = _test_ip break if choise_ip: self.hot_failover_api = self.hq_cls(multithread=True, heartbeat=True) self.hot_failover_api.connect(*choise_ip) else: self.hot_failover_api = None # 阻塞0.2秒,然后递归调用自己 time.sleep(self.api_retry_interval) result = self.do_hq_api_call(method_name, *args, **kwargs) self.api_call_retry_times += 1 else: self.api_call_retry_times = 0 return result
def do_hq_api_call(self, method_name, *args, **kwargs): """ 代理发送请求到实际的客户端 :param method_name: 调用的方法名称 :param args: 参数 :param kwargs: kv参数 :return: 调用结果 """ try: result = getattr(self.api, method_name)(*args, **kwargs) if result is None: log.info("api(%s) call return None" % (method_name,)) except Exception as e: log.info("api(%s) call failed, Exception is %s" % (method_name, str(e))) result = None # 如果无法获取信息,则进行重试 if result is None: if self.api_call_retry_times >= self.api_call_max_retry_times: log.info("(method_name=%s) max retry times(%d) reached" % (method_name, self.api_call_max_retry_times)) raise TdxHqApiCallMaxRetryTimesReachedException("(method_name=%s) max retry times reached" % method_name) old_api_ip = self.api.ip new_api_ip = None if self.hot_failover_api: new_api_ip = self.hot_failover_api.ip log.info("api call from init client (ip=%s) err, perform rotate to (ip =%s)..." %(old_api_ip, new_api_ip)) self.api.disconnect() self.api = self.hot_failover_api log.info("retry times is " + str(self.api_call_max_retry_times)) # 从池里再次获取备用ip new_ips = self.ippool.get_ips() choise_ip = None for _test_ip in new_ips: if _test_ip[0] == old_api_ip or _test_ip[0] == new_api_ip: continue choise_ip = _test_ip break if choise_ip: self.hot_failover_api = self.hq_cls(multithread=True, heartbeat=True) self.hot_failover_api.connect(*choise_ip) else: self.hot_failover_api = None # 阻塞0.2秒,然后递归调用自己 time.sleep(self.api_retry_interval) result = self.do_hq_api_call(method_name, *args, **kwargs) self.api_call_retry_times += 1 else: self.api_call_retry_times = 0 return result
data = pd.concat([self.to_df(self.get_security_bars(9, __select_market_code( code), code, (9 - i) * 800, 800)) for i in range(10)], axis=0) data = data.assign(date=data['datetime'].apply(lambda x: str(x)[0:10])).assign(code=str(code))\ .set_index('date', drop=False, inplace=False)\ .drop(['year', 'month', 'day', 'hour', 'minute', 'datetime'], axis=1)[start_date:end_date] return data.assign(date=data['date'].apply(lambda x: str(x)[0:10])) if __name__ == '__main__': import pprint api = TdxHq_API() if api.connect('101.227.73.20', 7709): log.info("获取股票行情") # stocks = api.get_security_quotes([(0, "000001"), (1, "600300")]) # stocks = api.to_df(stocks) # pprint.pprint(stocks) # log.info("获取k线") # data = api.get_security_bars(9, 0, '000001', 4, 3) # pprint.pprint(data) # log.info("获取 深市 股票数量") # pprint.pprint(api.get_security_count(0)) # log.info("获取股票列表") # stocks = api.get_security_list(1, 255) # pprint.pprint(stocks) # log.info("获取指数k线") # data = api.get_index_bars(9, 1, '000001', 1, 2) # pprint.pprint(data) # log.info("查询分时行情")
data = self.to_df(data) data['date'] = data['datetime'].apply(lambda x: x[0:10]) data['date'] = pd.to_datetime(data['date']) data = data.set_index('date') data = data.drop( ['year', 'month', 'day', 'hour', 'minute', 'datetime'], axis=1) return data[start_date:end_date] if __name__ == '__main__': import pprint api = TdxHq_API() if api.connect('101.227.73.20', 7709): log.info("获取股票行情") stocks = api.get_security_quotes([(0, "000001"), (1, "600300")]) pprint.pprint(stocks) log.info("获取k线") data = api.get_security_bars(9, 0, '000001', 4, 3) pprint.pprint(data) log.info("获取 深市 股票数量") pprint.pprint(api.get_security_count(0)) log.info("获取股票列表") stocks = api.get_security_list(1, 255) pprint.pprint(stocks) log.info("获取指数k线") data = api.get_index_bars(9, 1, '000001', 1, 2) pprint.pprint(data) log.info("查询分时行情") data = api.get_minute_time_data(TDXParams.MARKET_SH, '600300')
@update_last_ack_time def get_minute_time_data(self, market, code): cmd = GetMinuteTimeData(self.client) cmd.setParams(market, code) return cmd.call_api() def do_heartbeat(self): self.get_instrument_count() if __name__ == '__main__': import pprint api = TdxExHq_API() with api.connect('121.14.110.210', 7727): log.info("获取市场代码") #pprint.pprint(api.to_df(api.get_markets())) log.info("查询市场中商品数量") #pprint.pprint(api.get_instrument_count()) log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) #pprint.pprint(api.get_instrument_quote(31, "00020")) log.info("查询分时行情") #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IF1709"))) #pprint.pprint(api.get_minute_time_data(8, "10000889")) #pprint.pprint(api.get_minute_time_data(31, "00020")) log.info("查询k线") #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843"))) pprint.pprint(
data = pd.concat([self.to_df(self.get_security_bars(9, __select_market_code( code), code, (9 - i) * 800, 800)) for i in range(10)], axis=0) data = data.assign(date=data['datetime'].apply(lambda x: str(x)[0:10])).assign(code=str(code))\ .set_index('date', drop=False, inplace=False)\ .drop(['year', 'month', 'day', 'hour', 'minute', 'datetime'], axis=1)[start_date:end_date] return data.assign(date=data['date'].apply(lambda x: str(x)[0:10])) if __name__ == '__main__': import pprint api = TdxHq_API() if api.connect('101.227.73.20', 7709): log.info("获取股票行情") stocks = api.get_security_quotes([(0, "000001"), (1, "600300")]) pprint.pprint(stocks) log.info("获取k线") data = api.get_security_bars(9, 0, '000001', 4, 3) pprint.pprint(data) log.info("获取 深市 股票数量") pprint.pprint(api.get_security_count(0)) log.info("获取股票列表") stocks = api.get_security_list(1, 255) pprint.pprint(stocks) log.info("获取指数k线") data = api.get_index_bars(9, 1, '000001', 1, 2) pprint.pprint(data) log.info("查询分时行情") data = api.get_minute_time_data(TDXParams.MARKET_SH, '600300')
api = TdxExHq_API() with api.connect('182.131.7.196', 7709): # log.info("获取市场代码") # pprint.pprint(api.to_df(api.get_markets())) # log.info("查询市场中商品数量") # pprint.pprint(api.get_instrument_count()) # log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) #pprint.pprint(api.get_instrument_quote(31, "00020")) # log.info("查询分时行情") #api.get_minute_time_data(47, "IFL0") #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IFL0"))) #pprint.pprint(api.to_df(api.get_minute_time_data(8, "10000889")).tail()) #pprint.pprint(api.get_minute_time_data(31, "00020")) log.info("查询历史分时行情") pprint.pprint( api.to_df(api.get_history_minute_time_data(31, "00020", 20170811)).tail()) log.info("查询分时成交") pprint.pprint(api.to_df(api.get_transaction_data(31, "00020")).tail()) log.info("查询历史分时成交") pprint.pprint( api.to_df(api.get_history_transaction_data(31, "00020", 20170811)).tail()) #data = api.get_history_minute_time_data(47, 'IFL0', 20170811) # pprint.pprint(data) # log.info("查询k线") #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843")))
# pprint.pprint(data) # log.info("查询分时行情") # data = api.get_minute_time_data(TDXParams.MARKET_SH, '600300') # pprint.pprint(data) # log.info("查询历史分时行情") # data = api.get_history_minute_time_data( # TDXParams.MARKET_SH, '600300', 20161209) # pprint.pprint(data) # log.info("查询分时成交") # data = api.get_transaction_data(TDXParams.MARKET_SZ, '000001', 0, 30) # pprint.pprint(data) # log.info("查询历史分时成交") # data = api.get_history_transaction_data( # TDXParams.MARKET_SZ, '000001', 0, 10, 20170209) # pprint.pprint(data) log.info("查询公司信息目录") data = api.get_company_info_category(TDXParams.MARKET_SZ, '000001') pprint.pprint(data) # log.info("读取公司信息-最新提示") # data = api.get_company_info_content(0,'000001','000001.txt',8367,43379) # print(data) # log.info("读取除权除息信息") # data = api.get_xdxr_info(1, '600300') # pprint.pprint(data) # log.info("读取财务信息") # data = api.get_finance_info(0, '000001') # pprint.pprint(data) # log.info("日线级别k线获取函数") # data = api.get_k_data('000001', '2017-07-01', '2017-07-10') # pprint.pprint(data)
# pprint.pprint(api.get_instrument_count()) # log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) #pprint.pprint(api.get_instrument_quote(31, "00020")) # log.info("查询分时行情") #api.get_minute_time_data(47, "IFL0") #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IFL0"))) #pprint.pprint(api.to_df(api.get_minute_time_data(8, "10000889")).tail()) #pprint.pprint(api.get_minute_time_data(31, "00020")) # log.info("查询历史分时行情") # pprint.pprint(api.to_df(api.get_history_minute_time_data(31, "00020", 20170811)).tail()) # log.info("查询分时成交") # pprint.pprint(api.to_df(api.get_transaction_data(31, "00020")).tail()) log.info("查询历史分时成交") pprint.pprint( api.to_df(api.get_history_transaction_data(47, "IFL0", 20200222)).tail()) #data = api.get_history_minute_time_data(47, 'IFL0', 20170811) # pprint.pprint(data) # log.info("查询k线") #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843"))) #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 31, "00700"))) # log.info("查询代码列表") #pprint.pprint(api.to_df(api.get_instrument_info(10000, 98))) # x = api.to_df(api.get_history_instrument_bars_range(47, "IFL0", 20210201, 20210210)) # pprint.pprint(x.tail()) # log.info("查询k线") # pprint.pprint(api.to_df(api.get_instrument_bars(9, 8, "10000843")))
return cmd.call_api() def do_heartbeat(self): self.get_instrument_count() if __name__ == '__main__': import pprint api = TdxExHq_API() if api.connect('16.152.107.141', 7727): # log.info("获取市场代码") # pprint.pprint(api.to_df(api.get_markets())) # log.info("查询市场中商品数量") # pprint.pprint(api.get_instrument_count()) log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) pprint.pprint(api.get_instrument_quote(31, "00020")) # log.info("查询分时行情") #api.get_minute_time_data(47, "IFL0") #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IFL0"))) #pprint.pprint(api.to_df(api.get_minute_time_data(8, "10000889")).tail()) #pprint.pprint(api.get_minute_time_data(31, "00020")) #log.info("查询历史分时行情") #pprint.pprint(api.to_df(api.get_history_minute_time_data(31, "00020", 20170811)).tail()) #log.info("查询分时成交") #pprint.pprint(api.to_df(api.get_transaction_data(31, "00020")).tail()) # log.info("查询历史分时成交") #pprint.pprint(api.to_df(api.get_history_transaction_data(31, "00020", 20170811)).tail())
return cmd.call_api() def get_instrument_count(self): cmd = GetInstrumentCount(self.client) return cmd.call_api() def get_instrument_quote(self, market, code): cmd = GetInstrumentQuote(self.client) cmd.setParams(market, code) return cmd.call_api() def get_minute_time_data(self, market, code): cmd = GetMinuteTimeData(self.client) cmd.setParams(market, code) return cmd.call_api() if __name__ == '__main__': import pprint api = TdxExHq_API() with api.connect('61.152.107.141', 7727): log.info("获取市场代码") pprint.pprint(api.get_markets()) log.info("查询市场中商品数量") pprint.pprint(api.get_instrument_count()) log.info("查询行情") pprint.pprint(api.get_instrument_quote(47, "IF1709")) log.info("查询分时行情") pprint.pprint(api.get_minute_time_data(47, "IF1709"))
api = TdxExHq_API() with api.connect('121.14.110.210', 7727): # log.info("获取市场代码") # pprint.pprint(api.to_df(api.get_markets())) # log.info("查询市场中商品数量") # pprint.pprint(api.get_instrument_count()) # log.info("查询五档行情") #pprint.pprint(api.to_df(api.get_instrument_quote(47, "IF1709"))) #pprint.pprint(api.get_instrument_quote(8, "10000889")) #pprint.pprint(api.get_instrument_quote(31, "00020")) # log.info("查询分时行情") #api.get_minute_time_data(47, "IFL0") #pprint.pprint(api.to_df(api.get_minute_time_data(47, "IFL0"))) #pprint.pprint(api.to_df(api.get_minute_time_data(8, "10000889")).tail()) #pprint.pprint(api.get_minute_time_data(31, "00020")) log.info("查询历史分时行情") pprint.pprint(api.to_df(api.get_history_minute_time_data(31, "00020", 20170811)).tail()) log.info("查询分时成交") pprint.pprint(api.to_df(api.get_transaction_data(31, "00020")).tail()) log.info("查询历史分时成交") pprint.pprint(api.to_df(api.get_history_transaction_data(31, "00020", 20170811)).tail()) #data = api.get_history_minute_time_data(47, 'IFL0', 20170811) # pprint.pprint(data) # log.info("查询k线") #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 8, "10000843"))) #pprint.pprint(api.to_df(api.get_instrument_bars(TDXParams.KLINE_TYPE_DAILY, 31, "00700"))) # log.info("查询代码列表") #pprint.pprint(api.to_df(api.get_instrument_info(10000, 98)))