如下代码:
tq_api = tqsdk.TqApi(
auth=tqsdk.TqAuth(username, password),
backtest=tqsdk.TqBacktest(
start_dt=date(2026, 1, 1),
end_dt=date(2026, 1, 9)
)
)
klines = tq_api.get_kline_serial(
symbol='SSE.510500',
duration_seconds=86400,
data_length=2,
)
try:
while True:
tq_api.wait_update()
if tq_api.is_changing(klines) and klines.iloc[-1]['volume'] != 0:
pre_kline = klines.iloc[-2]
last_kline = klines.iloc[-1]
last_kline_dt = datetime.fromtimestamp(last_kline['datetime']/1e9)
instrument_date = last_kline_dt.date()
base_price = pre_kline['close']
underlying_symbol = 'SSE.510500'
itm_symbols, atm_symbols, otm_symbols = tq_api.query_all_level_finance_options(
underlying_symbol,
base_price,
'CALL',
nearbys=0,
has_A=False,
)
print(f'{instrument_date=}')
print(f'{base_price=}')
print(f'{itm_symbols=}')
print(f'{atm_symbols=}')
print(f'{otm_symbols=}')
except tqsdk.BacktestFinished as e:
print('Backtest Finished...')
finally:
tq_api.close()
输出的结果如下,都无法获取到合约列表:
instrument_date=datetime.date(2026, 1, 5)
base_price=np.float64(7.588)
itm_symbols=[]
atm_symbols=[]
otm_symbols=[]
instrument_date=datetime.date(2026, 1, 6)
base_price=np.float64(7.792)
itm_symbols=[]
atm_symbols=[]
otm_symbols=[]
instrument_date=datetime.date(2026, 1, 7)
base_price=np.float64(7.961)
itm_symbols=[]
atm_symbols=[]
otm_symbols=[]
instrument_date=datetime.date(2026, 1, 8)
base_price=np.float64(7.999)
itm_symbols=[]
atm_symbols=[]
otm_symbols=[]
instrument_date=datetime.date(2026, 1, 9)
base_price=np.float64(8.024)
itm_symbols=[]
atm_symbols=[]
otm_symbols=[]
这个不符合实际情况,当日如果有 A 系列的合约,就肯定有已经加挂的 M 系列的标准合约,也是应该能取到合约列表的,应该是bug。