VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 42
声望: 0

ROHON接口,在主界面出现一个什么Keyerr的错误(具体错误我没有记录下来就关掉了,因为那时候我不知道真的出错,大概有印象是这么个名字)

然后我发现账户的实际持仓和我程序记录的不一样,我就打开LOG,发现如下问题:

在正常情况下,一个单子完全成交后,既有推送OrderData过来,也有推送TradeData过来.并且,OrderData状态会更新为"完全成交"

但是,这次,完全成交完后,只有推送几条TradeData,没有推送OrderData过来

并且,在盘后,我的代码有主动调用main_engine.get_order(vt_orderid)打印出来的order信息仍然为"未成交"

Member
avatar
加入于:
帖子: 42
声望: 0

完整的LOG如下:

20230421_20:45:41.673695:('策略启动,初始化参数',)

20230421_21:00:00.146116:('定单号:1682079061_101_16,合约:SPD RM308&RM309,卖平数量:3,价格:24.00',)

20230421_21:00:00.208397:('order触发,trading值:', True)
20230421_21:00:00.208397:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD RM308&RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=24.0, volume=3.0, traded=0, status=<Status.SUBMITTING: '提交中'>, datetime=None, reference='CtaStrategy_RM308309_zhang_02'),)

20230421_21:00:02.692924:('order触发,trading值:', True)
20230421_21:00:02.692924:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD RM308&RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=24.0, volume=3, traded=0, status=<Status.NOTTRADED: '未成交'>, datetime=datetime.datetime(2023, 4, 21, 21, 0, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai')), reference=''),)

20230424_08:20:20.450230:('order触发,trading值:', True)
20230424_08:20:20.450230:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD RM308&RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=24.0, volume=3, traded=0, status=<Status.NOTTRADED: '未成交'>, datetime=datetime.datetime(2023, 4, 21, 21, 0, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai')), reference=''),)

20230424_09:07:48.507890:('trade触发,trading值:', True)
20230424_09:07:48.507890:(TradeData(gateway_name='ROHON', extra=None, symbol='RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', tradeid=' 1407', direction=<Direction.LONG: '多'>, offset=<Offset.CLOSE: '平'>, price=2786.0, volume=1, datetime=datetime.datetime(2023, 4, 24, 9, 7, 48, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
20230424_09:07:48.507890:('trade触发,trading值:', True)
20230424_09:07:48.507890:(TradeData(gateway_name='ROHON', extra=None, symbol='RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', tradeid=' 1408', direction=<Direction.LONG: '多'>, offset=<Offset.CLOSE: '平'>, price=2786.0, volume=1, datetime=datetime.datetime(2023, 4, 24, 9, 7, 48, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
20230424_09:07:48.586168:('trade触发,trading值:', True)
20230424_09:07:48.586168:(TradeData(gateway_name='ROHON', extra=None, symbol='RM308', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', tradeid=' 1409', direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=2810.0, volume=2, datetime=datetime.datetime(2023, 4, 24, 9, 7, 48, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
20230424_09:07:48.586168:('trade触发,trading值:', True)
20230424_09:07:48.586168:(TradeData(gateway_name='ROHON', extra=None, symbol='RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', tradeid=' 1410', direction=<Direction.LONG: '多'>, offset=<Offset.CLOSE: '平'>, price=2786.0, volume=1, datetime=datetime.datetime(2023, 4, 24, 9, 7, 48, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)
20230424_09:07:48.586168:('trade触发,trading值:', True)
20230424_09:07:48.586168:(TradeData(gateway_name='ROHON', extra=None, symbol='RM308', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', tradeid=' 1411', direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=2810.0, volume=1, datetime=datetime.datetime(2023, 4, 24, 9, 7, 48, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))),)

20230424_10:16:01.999447:('更新order信息:',)
20230424_10:16:01.999447:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD RM308&RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=24.0, volume=3, traded=0, status=<Status.NOTTRADED: '未成交'>, datetime=datetime.datetime(2023, 4, 21, 21, 0, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai')), reference=''),)
20230424_10:16:01.999447:('order信息更新完毕:',)

20230424_11:31:01.726556:('更新order信息:',)
20230424_11:31:01.726556:(OrderData(gateway_name='ROHON', extra=None, symbol='SPD RM308&RM309', exchange=<Exchange.CZCE: 'CZCE'>, orderid='1682079061_101_16', type=<OrderType.LIMIT: '限价'>, direction=<Direction.SHORT: '空'>, offset=<Offset.CLOSE: '平'>, price=24.0, volume=3, traded=0, status=<Status.NOTTRADED: '未成交'>, datetime=datetime.datetime(2023, 4, 21, 21, 0, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai')), reference=''),)
20230424_11:31:01.726556:('order信息更新完毕:',)

20230424_14:26:47.286601:('策略停止',)

Member
avatar
加入于:
帖子: 42
声望: 0

根据LOG信息里,20230424_09:07:48这个时间的5条TradeData,成交数量已经达到6手(我是开仓3手套利合约,单边是6手)

然后根据记录,一直都没有推送OrderData过来,并且在20230424_10:16:01和20230424_11:31:01,我的代码主动调用查询order信息,发现状态一直为"未成交"

Member
avatar
加入于:
帖子: 1448
声望: 102

请检查下vnpy_rohon版本号是否为目前新的6.5.1.7

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

如果vnpy_rohon版本比较老的话,可能是委托状态映射里没有THOST_FTDC_OST_NoTradeNotQueueing和THOST_FTDC_OST_PartTradedNotQueueing,我之前遇到过类似的问题

Member
avatar
加入于:
帖子: 42
声望: 0

MTF wrote:

请检查下vnpy_rohon版本号是否为目前新的6.5.1.7

我是官网主页下载的安装包安装的,4月14日刚下载安装的VerghNa-3.6.0.

在site-packages文件夹下面,有vnpy_rohon-6.5.1.7.dist-info和vnpy_rohon这2个文件夹.

从文件夹名字看,是您说的版本(我不懂得哪里查版本号,从文件夹名字看的)

Member
avatar
加入于:
帖子: 42
声望: 0

miro wrote:

如果vnpy_rohon版本比较老的话,可能是委托状态映射里没有THOST_FTDC_OST_NoTradeNotQueueing和THOST_FTDC_OST_PartTradedNotQueueing,我之前遇到过类似的问题

要如何解决呢?我是官网下载的安装包安装的.

Member
avatar
加入于:
帖子: 1448
声望: 102

那就是6.5.1.7了,你的版本没问题,要找期货公司融航系统的运维IT,做下联合调试来排查了

Member
avatar
加入于:
帖子: 42
声望: 0

MTF wrote:

那就是6.5.1.7了,你的版本没问题,要找期货公司融航系统的运维IT,做下联合调试来排查了

今天这个问题又出现了,结合上次的时间点,我发现都是在周一开盘后出现这个问题.是不是因为周末放假期间,有啥问题导致的这个?

出现的错误提示如下:

2023-05-05 20:47:50 --------------------------------------------------
2023-05-05 20:47:50 VeighNa Trader进程启动
2023-05-05 20:47:55 找不到数据服务驱动vnpy_,使用默认的RQData数据服务
2023-05-08 09:00:01 KeyError: (('2', '\x03', '1'),)

At:
C:\veighna_studio\lib\site-packages\vnpy_rohon\gateway\rohon_gateway.py(669): onRtnOrder

2023-05-08 09:00:21 KeyError: (('2', '\x03', '1'),)

At:
C:\veighna_studio\lib\site-packages\vnpy_rohon\gateway\rohon_gateway.py(669): onRtnOrder

2023-05-08 09:00:21 KeyError: (('2', '\x03', '1'),)

At:
C:\veighna_studio\lib\site-packages\vnpy_rohon\gateway\rohon_gateway.py(669): onRtnOrder

KeyError: (('2', '\x03', '1'),)

Member
avatar
加入于:
帖子: 42
声望: 0

我分析了一下这个问题,不知道是不是这样:
限价,也就是OrderType.LIMIT,对应的ROHON信号为:(THOST_FTDC_OPT_LimitPrice, THOST_FTDC_TC_GFD, THOST_FTDCVC$),也就是 (('2', '3', '1'),)
但是现在推送过来的却是(('2', '\x03', '1'),),本来是十进制的字符串'3',推送成了十六进制的'\x03'过来
导致在委托类型映射表找不到这个委托类型,从而出现错误

另外请问:假设是我说的这个原因,那么,出现错误之后,onRtnOrder接下来后面的语句就都不再执行了吗?如果有新的onRtnOrder过来,还会执行吗?

Member
avatar
加入于:
帖子: 1448
声望: 102

18650802653 wrote:

我分析了一下这个问题,不知道是不是这样:
限价,也就是OrderType.LIMIT,对应的ROHON信号为:(THOST_FTDC_OPT_LimitPrice, THOST_FTDC_TC_GFD, THOST_FTDCVC$),也就是 (('2', '3', '1'),)
但是现在推送过来的却是(('2', '\x03', '1'),),本来是十进制的字符串'3',推送成了十六进制的'\x03'过来
导致在委托类型映射表找不到这个委托类型,从而出现错误

另外请问:假设是我说的这个原因,那么,出现错误之后,onRtnOrder接下来后面的语句就都不再执行了吗?如果有新的onRtnOrder过来,还会执行吗?

对于这个字符串的分析是对的,如果回调函数中某处抛出异常后,后续内容都不会执行了。

新的onRtnOrder可能还会执行,取决于解释器有没有彻底挂掉

这个情况建议联系下融航客服和VeighNa企业微信上的维护团队排查下

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】