今天在回测中我发现通过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日