646 浏览
0

如下代码:

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=[]

chaos 已回答的问题 5天 前
0

query_all_level_finance_options 的 入参 has_A=False 这里把可用的合约过滤掉了,把这个参数改成none

quantalon 发表新评论 2天 前

这个不符合实际情况,当日如果有 A 系列的合约,就肯定有已经加挂的 M 系列的标准合约,也是应该能取到合约列表的,应该是bug。

今天后台老师反馈了这段时间内其他的 M 期权都被标记为了已到期,我们再复核一下是否已到期

我们查了一下主要是因为回测没有历史合约信息截面的,比如SSE.10010731 期权转成A系列合约后,不知道之前哪个时间是M系列的

转为 A 系列合约后,交易所就会上新的 M 系列的合约,所以是肯定有M系列的合约的

您正在查看1个答案中的1个,单击此处查看所有答案。