ricequant / rqalpha-mod-vnpy

RQAlpha 对接 vnpy 的扩展 Mod。通过启用该 Mod 来实现期货策略的实盘交易
Apache License 2.0
298 stars 59 forks source link

获取当前持仓的市场行情出错 #22

Open handsomu opened 7 years ago

handsomu commented 7 years ago

账户中有股指期货的仓位。在早晨9点商品开盘的时候,获取股指行情出错。 ` [2017-05-05 09:00:45.451757] ERROR: system_log: Cannot find such tick whose order_book_id is IF1705 Traceback (most recent call last): File "/media/psf/Home/rqalpha/rqalpha/main.py", line 209, in run env.portfolio = broker.get_portfolio() │ └ <rqalpha_mod_vnpy.vnpy_broker.VNPYBroker object at 0x7fe49f38eb50> └ <rqalpha.environment.Environment object at 0x7fe4ad1ed410> File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/vnpy_broker.py", line 68, in get_portfolio return self._gateway.get_portfolio() └ <rqalpha_mod_vnpy.vnpy_broker.VNPYBroker object at 0x7fe49f38eb50> File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/gateway.py", line 93, in get_portfolio future_account = self._cache.account └ <rqalpha_mod_vnpy.ctp.gateway.CtpGateway object at 0x7fe49f38b150> File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/data_cache.py", line 115, in account holding_pnl = sum(position.holding_pnl for position in six.itervalues(ps)) │ └ {'CU1705': FuturePosition({'sell_old_quantity': 1, 'contract_multiplier': 5.0, 'last_price': 44960.0, 'buy_pnl': -3850.0, 'buy_r... └ <module 'six' from '/home/cui/anaconda2/envs/rqa/lib/python2.7/site-packages/six.pyc'> File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/data_cache.py", line 115, in holding_pnl = sum(position.holding_pnl for position in six.itervalues(ps)) │ │ └ <module 'six' from '/home/cui/anaconda2/envs/rqa/lib/python2.7/site-packages/six.pyc'> │ └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... File "/media/psf/Home/rqalpha/rqalpha/model/position/future_position.py", line 133, in holding_pnl return self.buy_holding_pnl + self.sell_holding_pnl │ └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... File "/media/psf/Home/rqalpha/rqalpha/model/position/future_position.py", line 105, in buy_holding_pnl return (self.last_price - self.buy_avg_holding_price) self.buy_quantity self.contract_multiplier │ │ │ └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... │ │ └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... │ └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... └ FuturePosition({'sell_old_quantity': 0, 'contract_multiplier': 300.0, 'last_price': 3383.4, 'buypnl': -8039.999999999918, 'buy... TypeError: unsupported operand type(s) for -: 'NoneType' and 'float' 2017-05-05 09:00:45.00 ERROR unsupported operand type(s) for -: 'NoneType' and 'float' [2017-05-05 09:00:45.725248] ERROR: system_log: 策略运行产生异常 Traceback (most recent call last): File "/media/psf/Home/rqalpha/rqalpha/main.py", line 209, in run env.portfolio = broker.get_portfolio() File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/vnpy_broker.py", line 68, in get_portfolio return self._gateway.get_portfolio() File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/gateway.py", line 93, in get_portfolio future_account = self._cache.account File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/data_cache.py", line 115, in account holding_pnl = sum(position.holding_pnl for position in six.itervalues(ps)) File "/media/psf/Home/rqalpha-mod-vnpy/rqalpha_mod_vnpy/ctp/data_cache.py", line 115, in holding_pnl = sum(position.holding_pnl for position in six.itervalues(ps)) File "/media/psf/Home/rqalpha/rqalpha/model/position/future_position.py", line 133, in holding_pnl return self.buy_holding_pnl + self.sell_holding_pnl File "/media/psf/Home/rqalpha/rqalpha/model/position/future_position.py", line 105, in buy_holding_pnl return (self.last_price - self.buy_avg_holding_price) self.buy_quantity self.contract_multiplier TypeError: unsupported operand type(s) for -: 'NoneType' and 'float' CThostFtdcUserApiImplBase::OnSessionDisconnected[0x7fe48c0008c8][-830341119][ 0] CThostFtdcUserApiImplBase::OnSessionDisconnected[0x7fe4900008c8][-830406655][ 0]

`

Cuizi7 commented 7 years ago

应该是多线程导致数据加载不同步导致出错,正在修复。

Cuizi7 commented 7 years ago

采取了措施应该能很大程度避免上述问题