我想使用tqsdk过滤掉成交量很小的期权,于是我写了一段这样的代码:
# 过滤ls
def filter_ls(_ls_all):
_ls = []
_ls_err = []
for _idx in range(len(_ls_all)):
print(_idx)
print(_ls_all[_idx])
try:
klines = api.get_kline_serial(_ls_all[_idx], duration_seconds=86400, data_length=3) # 日线
if klines.iloc[-2].volume > def_volume_limit: # 倒数第二根k线是昨日K线
_ls.append(_ls_all[_idx])
except TqTimeoutError as _err: # 请求k线数据超时,一般是没有交易记录的合约才会报这个,这个太慢了
print(_err)
_ls_err.append(_ls_all[_idx])
return _ls, _ls_err
ls = api.query_quotes(ins_class="OPTION", exchange_id="DCE", expired=False) # 大连商品交易所 ls1, ls2 = filter_ls(ls) 但是运行起来发现,对于无成交记录的在市期权,会报错TqTimeoutError,而且响应很慢很慢,程序运行完要很久很久。看官方tqsdk接口文档,也是说这个api.get_kline_serial是这种处理。 请问有没有办法绕过TqTimeoutError超时等待的问题,或者官方优化一下这种情形的处理呢?比如在api.query_quotes里增加过滤条件,或者期权无成交记录时尽快返回,而不是使用超时
李思恒 已回答的问题 2021年11月8日