本意是我希望用no_ui模式每天自动重启来开rpc_server,然后用rpc_client来管理策略,这样我就不用每天重新启动VNPY。
然后运行策略遇到类似的问题,单是正常下的,订单号也是对的,但就是无法管理了,无法触发成交后的动作,也无法撤单,失去管理。
策略是没问题的,我不用RPC的时候都是能够完整的执行,没有遇到过问题。
我发现TAP偶尔会遇到行情断开,错误2。
这个重启就能解决了,我看CTP是会断开自动重连的,是TAP没有实现这个功能吗,还是说需要在哪个模块自己写?
子账号不填就会提示12053,官方文档就是clientType不对。
换到下面还是不行。
b'#1#\xd7\x01#+1vO0Zo9JUiaSq0Zbfhegg=='
这个的问题并不是b'#1#''是后面跟着的 '\'这个不合符规则。但由于实际下单后'#'后面的'+1vO0Zo9JUiaSq0Zbfhegg=='才是实际的下单号,所以就不用管前面的,就直接找到#后面进行decode就没错了。
最终的解决:
1、子账号填写任何非空字符串。
2、对TAP_GATEWAY里面的send_order函数改了两处:
order_id = byte_id.decode() -> order_id = byte_id.decode(errors='ignore')
if self.client_id in order_id:
order_id = order_id.replace(f"#{self.client_id}#", "")的下一行增加:
order_id = order_id[order_id.find('#')+1:] #解决记录的订单号比实际订单号多了’#‘的问题
看看后续能不能update这个问题,不清楚是个别经纪商问题还是什么。
order_id = byte_id.decode(errors='ignore')
update一下,这个是不能改的,改了之后会导致订单号解析错误。
b'#1#\xd7\x01#+1vO0Zo9JUiaSq0Zbfhegg=='
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd7 in position 3: invalid continuation byte
这个应该就是加了子账户之后,不能解析‘#’字符串的问题。
vnpy-tap 9.3.9
整体我的解决流程是这样:
1、12053错误是说的 子账户input error。实际上我的账户没有子账户,我保留了空值就出错了。后面我是把登录信息的子账户改成‘1’,然后这个错误就消失了,后来测试只要非空都能用。
2、可以正常下单之后,但每次下单都会弹出order_id有一个decode的错误,所以我把tap_gateway里面send_order的function,把order_id = byte_id.decode()改为order_id = byte_id.decode(errors='ignore'),现在就是下单也没有报错了。
具体错误:
packages\vnpy_tap\gateway\tap_gateway.py", line 724, in send_order
order_id = byte_id.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 3: invalid start byte
我打印出来是这个东西decode有报错,b'#1#s\x02#UQcDibLqb0+Eg4FCmJg9UQ=='
但我刚刚又试了几次,并不是每一次都会报错,而且报错并不影响最终order_id的正确性。
账户有资金,客户端是可以下单的,但是API可以登录拿到行情,能取消订单,但是下单就会报错
。