fromtqsdkimportTqApi,TqAuthfromtqsdk.tafuncimporttime_to_datetimeimportdatetimefromdatetimeimportdatetimeimportpandasimportreimportosimportwarningswarnings.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=["SHFcu2305","DCi2309"]quote_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)ifdatetime.datetime.now.hour==15:today=str).replaceforinstrumentininstruments:csv_path=f"./config/{instrument.replace}_{today}.csv"ifos.path.existsisFalse:data_map[instrument].to_csvbreak#当前脚本,每天晚盘前需要手工启动脚本def__multi_symbols_day_bar:klines=self.api.get_kline_serialself.api.closeklines_filter=klines.loc[klines["id"]>=0]klines_filter["datetime_format"]=klines_filter["datetime"].applyprint)classTQZAutoMakeConfig:__trading_time_config="./config/trading_time.json"@classmethoddefauto_make_session_json:all_tq_main_futures=TQZTianQinClient.load_all_tq_main_futuresret={}fortq_main_futureinall_tq_main_futures:_tq_future=f"{tq_main_future.split[0]}.{re.match).group}"tq_main_future_data=TQZTianQinClient.query_single_quoteret[_tq_future]={"day":vars["day"],"night":vars["night"]}forinstrument,datainret.items:forsession_dataindata.values:foriinrange):forjinrange):hour=session_data[i][j].split[0]ifhour>="24":new_hour=str-int).zfillsession_data[i][j]=f"{new_hour}:{session_data[i][j].split}:{session_data[i][j].split}"TQZJsonOperator.tqz_write_jsonfile@classmethoddefauto_make_main_contracts_excel:"""根据所有合约的日线收盘数据,更新当日的所有品种的主力合约""""""eg:date|SHFrb|SHFag|...2023042SHFrb23SHFag230...2023042SHFrb23SHFag230...2023042SHFrb240SHFag231..."""passif__name__=="__main__":#ret_df=TQZTianQinClient.query_history_bars#print)#ret_df=TQZTianQinClient.query_history_ticks#print)#TQZTianQinClient.record_data#TQZAutoMakeConfig.auto_make_main_contracts_excelpass
文章为作者独立观点,不代表股票交易接口观点