购买了米筐的数据后,开始正式实盘。如果此时再想同时启动例外一台PC去回测或者调试,会提示rqdata连接出问题。
如何利用RpcService实现米筐数据共享,可行吗 ?请有经验的分享下经验吧,先谢谢了!!!
购买了米筐的数据后,开始正式实盘。如果此时再想同时启动例外一台PC去回测或者调试,会提示rqdata连接出问题。
如何利用RpcService实现米筐数据共享,可行吗 ?请有经验的分享下经验吧,先谢谢了!!!
RQData每个账号,应该最少允许3个连接的,如果确定只有1个请联系米筐那边开通下吧,否则也太不方便了
import rqdatac as rq
>>> rq.init('xxxxx','*****',("rqdatad-pro.ricequant.com",16011)) # 其中的xxxxx是用户名称,*****是账户米筐
>>> rq.get_price("AG2101")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\decorators.py", line 131, in wrap
return func(*args, **kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\services\get_price.py", line 103, in get_price
order_book_ids, market
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\services\get_price.py", line 220, in classify_order_book_ids
ins_list = ensure_instruments(order_book_ids, market=market)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\validators.py", line 168, in ensure_instruments
all_instruments = _all_instruments_dict(market)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\decorators.py", line 111, in wrapper
value = user_function(*args, **kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\services\basic.py", line 120, in _all_instruments_dict
ins = _all_cached_instruments_list(market)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\decorators.py", line 111, in wrapper
value = user_function(*args, **kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\services\basic.py", line 115, in _all_cached_instruments_list
return _all_instruments_list(market)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\services\basic.py", line 110, in _all_instruments_list
return [Instrument(i) for i in get_client().execute("all_instruments", market=market)]
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\decorators.py", line 59, in wrap
return func(*args, **kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\thread_local.py", line 42, in execute
return self._execute(self._get_connection(), method, args, kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\thread_local.py", line 38, in _execute
raise e
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\thread_local.py", line 33, in _execute
return conn.execute(method, *args, **kwargs)
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\connection.py", line 117, in execute
msg_type, body = self._read_one_packet()
File "D:\ProgramFiles\VnStudio\lib\site-packages\rqdatac\connection.py", line 87, in _read_one_packet
raise get_error(code)(msg)
rqdatac.share.errors.QuotaExceeded: connection number exceeds
结果显示是连接数量超额了。说明确实是给了3个连接。
当我的策略中使用到米筐接口获取诸如合约的交易时段之类的时候,然后使用了CTA回测研究模块。当进行多线程优化的时候,发现提示connection number exceeds的错误。
主要是多线程优化的时候,vnpy根据电脑的CPU核数同时启动多个线程,使用多个不同的步进回测参数同时运行同一个策略。这时,如果策略中有用到读取rqdatac接口中的函数,就出现了连接数超额的错误,回测就出错停止了。
3.1 如果使用一个模块接口管理对象,将vnpy系统中对模块接口的访问进行统一排队,使得不同的线程可以分时共享访问rqdatac,这样应该能够解决此问题。
3.2 就算你不是遇到与我同样的访问米筐接口的情况,分时访问也是很有意义的,因为接口就一个,线程配额不可以超过三个。你可能在运行策略的时候,同时运行数据下载模块什么的,也是可能遇到系统对模块接口的连接超额的错误问题。
3.3 米筐数据现在也是vnpy的战略合作伙伴,官方推荐大家使用米筐数据。挖掘米筐数据的更多使用价值对vnpy系统也是锦上添花,有很多意想不到的的好处。可是这样增加了连接接口的线程额度超标的可能性。所以有必要考虑米筐接口共享使用的问题。这个问题的解决应该不难!
嗯,其实用RPC创建一个独立的查询服务进程就行了
也遇到同类问题,有帖子有解决示例吗,想学习一下