我想使用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日