1.58K 浏览
0

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