importtimefromtqsdkimportTqApi,TqAuthfromtqsdk.tafuncimporttime_to_datetimeimportdatetimeimportpandasimportreimportosimportwarningswarnings.filterwarningspandas.set_optionpandas.set_optionfromtqz_extern.json_operatorimportTQZJsonOperatorTIME_GAP=8*60*60*1000000000classTQZTianQinClient:"""天勤接口每次只能拉取单一合约的数据!"""__tq_futures=Nonedef__init__:self.api=TqApi)ifTQZTianQinClient.__tq_futuresisNone:TQZTianQinClient.__tq_futures=self.api.query_quotesdefquery_history_ticks:asserttq_futureinTQZTianQinClient.__tq_futures,f"badtq_future:{tq_future}"tq_result=self.api.get_tick_serialself.api.closetq_result["datetime_format"]=tq_result["datetime"].applyreturntq_resultdefquery_single_quote->dict:result=self.api.get_quoteself.api.closereturnresult#noqadefquery_history_bars:asserttq_futureinTQZTianQinClient.__tq_futures,f"badtq_future:{tq_future}"tq_result=self.api.get_kline_serialself.api.closetq_result["datetime"]=pandas.to_datetimetq_result["datetime"]=tq_result["datetime"].apply)#%f是毫秒returntq_resultdefload_all_tq_futures:self.api.closereturnTQZTianQinClient.__tq_futuresdefload_all_tq_main_futures:tq_main_contracts=self.api.query_quotesmain_vt_symbols=[][main_vt_symbols.append.underlying_symbol)formain_contractintq_main_contracts]self.api.closereturnmain_vt_symbols@staticmethoddefrecord_data:api=TqApi)#如果启用了此备用方案,将instruments换成全品种instruments=["SHFcu2305","DCi2309"]today=str).replacetrading_time_json=TQZJsonOperator.tqz_load_jsonfilequote_map={}data_map={}#之后考虑写共享内存里forinstrumentininstruments:quote_map[instrument]=api.get_quotedata_map[instrument]=pandas.DataFramewhileapi.wait_update:forinstrumentininstruments:ifapi.is_changing:#printdata_map[instrument].append,ignore_index=True)close_time=trading_time_json[f"{instrument.split[0]}.{re.match).group}"]["day"][-1][-1]cur_time=quote_map[instrument]["datetime"].splitifcur_time>=close_time:csv_path=f"./config/{instrument.replace}_{today}.csv"ifos.path.existsisFalse:data_map[instrument].to_csv#以国债进行收尾判断,根据本地时间来进行二次确认;ifdatetime.datetime.now.hour==15anddatetime.datetime.now.minute>=14:forinstrumentininstruments:csv_path=f"./config/{instrument.replace}_{today}.csv"data_map[instrument].to_csvbreak#当前脚本,每天晚盘前需要手工启动脚本defget_lastDay_mainFuturesList->:tq_futures=self.api.query_quotesself.api.closefuture_instruments_map={}fortq_futureintq_futures:simple_future=f"{tq_future.split[0]}.{re.match).group}"ifsimple_futurenotinfuture_instruments_map.keys:future_instruments_map[simple_future]=[]future_instruments_map[simple_future].appendtime.sleepmain_futures_list=[]last_day:str=""forfuture,instrumentsinfuture_instruments_map.items:api=TqApi)klines=api.get_kline_serialklines_filter=klines.loc[klines["id"]>=0]klines_filter["datetime_format"]=klines_filter["datetime"].applysymbol_maxVolume_map={}foriinrange):ifi==0:symbol_maxVolume_map["symbol"]=klines_filter.iloc[0]["symbol"]symbol_maxVolume_map["volume"]=klines_filter.iloc[0]["volume"]else:ifklines_filter.iloc[0][f"volume{i}"]>symbol_maxVolume_map["volume"]:symbol_maxVolume_map["symbol"]=klines_filter.iloc[0][f"symbol{i}"]symbol_maxVolume_map["volume"]=klines_filter.iloc[0][f"volume{i}"]main_futures_list.appendiflast_day=="":last_day=str).split[0]api.closetime.sleepreturnlast_day,main_futures_listif__name__=="__main__":#ret_df=TQZTianQinClient.query_history_bars#print)#ret_df=TQZTianQinClient.query_history_ticks#print)#TQZTianQinClient.record_dataret=TQZTianQinClient.get_lastDay_mainFuturesListprint)
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点