今天在回测中我发现通过get_quote来获取主力连续合约映射的具体合约时,下午14:56映射的具体合约就切换了(如在KQ.m@CFFEX.IF 的2022-03-16 14:56:00映射的具体合约就切换到了CFFEX.IF2204,但是get_kline_serial的数据直到2022-03-17 09:28:00才切换),同时通过
if intial == True:
underlaying_symbol = quote.underlying_symbol
initial = False
elif quote.datetime[10:19] == ‘ 09:28:00’:
underlaying_symbol = quote.underlying_symbol
else:
pass
也无法解决这个问题,请问能不能帮我看看,谢谢。
import warnings warnings.filterwarnings("ignore") from tqsdk import * from tqsdk.tafunc import * from datetime import * SYMBOL = "KQ.m@CFFEX.IF" # 合约代码 period = 8*60#s api = TqApi(backtest=TqBacktest(start_dt=date(2021, 12, 1), end_dt=date(2023, 4, 25)), auth=TqAuth("A", "B")) klines = api.get_kline_serial(SYMBOL, duration_seconds=period, data_length=5) quote = api.get_quote(SYMBOL) train_df = pd.DataFrame() test_df = pd.DataFrame() last_date = None train_test_split = datetime(2023, 2, 1) underlaying_symbol = None intial = True try: while True: T1 = datetime.now() api.wait_update() if api.is_changing(klines) and klines.datetime.iloc[-1] != last_date: if intial == True: underlaying_symbol = quote.underlying_symbol initial = False elif quote.datetime[10:19] == ' 09:28:00': underlaying_symbol = quote.underlying_symbol else: pass print(quote.datetime, underlaying_symbol) last_date = klines.datetime.iloc[-1] tmp_df = pd.DataFrame() tmp_df = klines.iloc[-2] tmp_df.datetime = time_to_datetime(tmp_df.datetime) tmp_df['underlaying_symbols'] = underlaying_symbol if tmp_df.datetime > train_test_split: test_df = test_df.append(tmp_df) else: train_df = train_df.append(tmp_df) T2 = datetime.now() print('数据处理耗时:%s毫秒' % (T2 - T1)) #print('总延迟:', (T2 - T1)) print('--------------------------End--------------------------') print('') else: pass except BacktestFinished: train_df.to_csv('IF_8min_train.csv') test_df.to_csv('IF_8min_test.csv') api.close() print("回测结束")
李思恒 已回答的问题 2023年5月12日