vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 197
声望: 44

购买了米筐的数据后,开始正式实盘。如果此时再想同时启动例外一台PC去回测或者调试,会提示rqdata连接出问题。
如何利用RpcService实现米筐数据共享,可行吗 ?请有经验的分享下经验吧,先谢谢了!!!

Administrator
avatar
加入于:
帖子: 4435
声望: 253

RQData每个账号,应该最少允许3个连接的,如果确定只有1个请联系米筐那边开通下吧,否则也太不方便了

Member
avatar
加入于:
帖子: 197
声望: 44

1 我刚才测试了米筐的rqdatac:分别开了4个cmd窗口,每个都输入如下命令:

import rqdatac as rq
>>> rq.init('xxxxx','*****',("rqdatad-pro.ricequant.com",16011))   # 其中的xxxxx是用户名称,*****是账户米筐
>>> rq.get_price("AG2101")

前3个窗口都可以正常读取ag2101的日线数据,到了第4个窗口时发出了出错提示:

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个连接。

2 我出错的地方在哪里?

当我的策略中使用到米筐接口获取诸如合约的交易时段之类的时候,然后使用了CTA回测研究模块。当进行多线程优化的时候,发现提示connection number exceeds的错误。
主要是多线程优化的时候,vnpy根据电脑的CPU核数同时启动多个线程,使用多个不同的步进回测参数同时运行同一个策略。这时,如果策略中有用到读取rqdatac接口中的函数,就出现了连接数超额的错误,回测就出错停止了。

3 解决问题的想法

3.1 如果使用一个模块接口管理对象,将vnpy系统中对模块接口的访问进行统一排队,使得不同的线程可以分时共享访问rqdatac,这样应该能够解决此问题。
3.2 就算你不是遇到与我同样的访问米筐接口的情况,分时访问也是很有意义的,因为接口就一个,线程配额不可以超过三个。你可能在运行策略的时候,同时运行数据下载模块什么的,也是可能遇到系统对模块接口的连接超额的错误问题。

3.3 米筐数据现在也是vnpy的战略合作伙伴,官方推荐大家使用米筐数据。挖掘米筐数据的更多使用价值对vnpy系统也是锦上添花,有很多意想不到的的好处。可是这样增加了连接接口的线程额度超标的可能性。所以有必要考虑米筐接口共享使用的问题。这个问题的解决应该不难!

Administrator
avatar
加入于:
帖子: 4435
声望: 253

嗯,其实用RPC创建一个独立的查询服务进程就行了

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号