在做一个期权策略时,当处于回测模式下,买一卖一量一直都是1,但是非回测模式下,实时打印的买一卖一量又是正常的.
策略结构大致是这样的:
api = TqApi(acc,backtest=TqBacktest(start_dt=date(2022,7,2),end_dt=date(2022,7,31),),auth=TqAuth('账号', '密码'))
#第一步 #通过get_kline_serial获取标的指数前日日期及收盘价 klines = api.get_kline_serial(index_code, 86400) date = klines['datetime'].tolist()[-1]/1e9 pre_close = klines['close'].tolist()[-1]
#第二步 #通过前日日期与收盘价获取对应price_level的看涨看跌期权代码 exercise_year, exercise_month = get_strike_date(date) co_code = api.query_atm_options(index_code, pre_close, -price_level, "CALL", exercise_year=exercise_year, exercise_month=exercise_month) co_code = co_code[0] po_code = api.query_atm_options(index_code, pre_close, price_level, "PUT", exercise_year=exercise_year, exercise_month=exercise_month) po_code = po_code[0]
#第三步 #根据代码获取行情数据 quote_co = api.get_quote(co_code) quote_po = api.get_quote(po_code)
while True: api.wait_update() #根据即时行情获取当前日期 curren_date=pd.to_datetime(quote_fu['datetime']).timestamp() if curren_date相对于前一时间戳跨日: 重新调用第一、二、三步,对代码进行切换并重新获取行情数据 print(quote_po) print(quote_co) trade(co_code, po_code, quote_po,quote_co,quote_fu) 最终打印出来的看跌、看涨期权行情数据中的ask_volume1、bid_volume1一直都是1(下图中对应的期权代码是IO2207-P-4500、IO2207-C-4500) <img src="https://www.shinnytech.com/wp-content/uploads/anspress-temp/3e54b15dc16aea8d6e966d072692d5201a985b23_4879.png" />
但如果不是回测模式,捕获的实时打印数据又是正常的(下图中对应的期权代码是IO2209-P-4150、IO2209-C-4150) <img src="https://www.shinnytech.com/wp-content/uploads/anspress-temp/6f6796bae2a2b188cf1defae872ec7cbd5875770_4879.png" />
李思恒 已回答的问题 2022年8月29日