VeighNa量化社区
你的开源社区量化交易平台
warpgate's Avatar
Member
离线
46 帖子
声望: 1

启动后报错,提示缺乏部分dll文件,比如msvcp140.dll。目前解决方法是将缺乏的dll文件复制到3.6版根目录下,Windows11下system32目录内的dll文件可以适配。

.vntrader里的log没有报错,但会在下一个信号周期时因为cancel未成交订单而报“撤单失败”,所以觉得就是onrtnorder和onrtntrade没有收到。

这种情况一周可能出现一次,其他时间均正常,同步运行的simnow模拟盘一直正常,交易品种是螺纹钢。

这里说的枚举值支持是指什么?

xiaohe wrote:

底层有报错输出吗?
建议升级至最新版本之后再试试看,ctp增加了广期所支持,vnpy_ctp6.5.1.12及以上的版本才增加了枚举值的支持

连接国泰君安实盘和测试环境均不时出现下单后未收到订单信息返回和成交信息返回的现象,导致策略后续反复撤单,CTP接口返回撤单失败(实际上已经成交)。此现象出现的时机没有规律,与国泰君安的科技排查未果,可能需要vnpy官方协助。

vnpy版本:2.9
本地CTP版本:6.5.1
国泰君安CTP版本:6.6.1

我采取的是复用了ui的data recorder engine实例化recorder_engine = main_engine.add_app(DataRecorderApp),main engine获得全市场合约信息跟原配置文件比较后更新配置文件recorder_engine.remove_bar_recording(vt_symbol) recorder_engine.add_bar_recording(vt_symbol)
跑在生产CTP上绝大部分时间是正常的,现在发现的问题是,隔三岔五会出现收不到大商所品种的行情。而且只有大商所有这样的问题,都是在日盘出状况。
大佬知道什么情况吗?
郭易燔 wrote:

参考 https://www.vnpy.com/forum/topic/3046-quan-shi-chang-lu-zhi-xing-qing-shu-ju?page=1

感谢分享

simnow模拟盘从来没有出现这个问题,怀疑simnow在转发前把各品种的datetime做了对齐。

甚至还有这种看不懂的情况
description

如题,CTP五分钟策略实盘运行,portfolio bar generator通过1分钟bar数据的datetime对指定window取模的逻辑存在不确定性。

如下图所示,取模的操作是在循环外,具体取到哪个品种的bar存在不确定性,由bars的dict里面的顺序决定。

description

具体来说,会造成如下的情况,同一个时段的on bar因不同品种的时间差异被触发两次。

description

解决方法想了一下:1. CTP服务端保证所有品种的datetime与推送时间一致;2. 使用原来的bargenerator对各品种逐个处理;

正常了,可能跟最大会话数量的限制有关系,sleep时间也从十秒增加到了三十秒。

在main_engine.connect(ctp_setting, "CTP")之后sleep了10秒钟。

是不是不太够?

郭易燔 wrote:

是不是交易服务器还没有连接成功你就已经尝试在获取来,用sleep等一等再试试呢

get_all_accounts返回的也是空

郭易燔 wrote:

使用get_all_accounts()来获取所有账户信息看一下,可能是实盘用的是资金账户名而不是用户名。

get_all_accounts()同样也是返回空。

vn studio上倒是可以正常获得账户信息,版本号是2.9。

main_engine初始化之后,可以通过main_engine.get_account("CTP."+ctp_setting["用户名"]).balance来获得资金信息,在simnow已经经过了验证。但在实盘的时候就出现NoneType错误,大家是否知道其中的蹊跷?

之前习惯用typora,低版本的是免费的

教你一个刚学来的方法,判断的时候用格林尼治时间,统统减八小时。

duke wrote:

找到问题了,做如下修改即可,因为0点以后tick时间是小于 next_status.enter_time的,这个时候 curr_status.enter_time 是21:00:00,next_status.enter_time是1:00:00

        if curr_status.enter_time < next_status.enter_time:
            if curr_status.enter_time <= tick_time < next_status.enter_time:
                status = curr_status
            elif next_status.enter_time <= tick_time:
                status = next_status
        else:
            if curr_status.enter_time <= tick_time:
                status = curr_status
            if next_status.enter_time <= tick_time:
                status = next_status
          #DUKE 新增代码
            if next_status.enter_time > tick_time:
                status = curr_status

你把上面instrument的问题解决了就好了

left_alphas也可以自己写个正则

instrument = re.match(r"^[a-zA-Z]{1,3}", symbol).group()

warpgate wrote:

状态信息里面的instrument是品种的代码,就是没有期数的,例如“sp”。tick里面的是有期数的,例如“sp2205”。之前的代码里面相当于都统一成了“sp.SHFE”的形式。

duke wrote:

大神,增加函数定义后,继续报错
description
然后我直接用instrument = tick.symbol,跑通了,所以搞不懂left_alphas(tick.symbol)这个语句的作用是什么?求解惑

状态信息里面的instrument是品种的代码,就是没有期数的,例如“sp”。tick里面的是有期数的,例如“sp2205”。之前的代码里面相当于都统一成了“sp.SHFE”的形式。

duke wrote:

大神,增加函数定义后,继续报错
description
然后我直接用instrument = tick.symbol,跑通了,所以搞不懂left_alphas(tick.symbol)这个语句的作用是什么?求解惑

大佬求教,行情数据应该是在vnpy_ctp.gateway.ctp_gateway.CtpMdApi.onRtnDepthMarketData进来的,为什么不在ctp_gateway这里处理呢?

感谢

xiaohe wrote:

可参考template的get_pricetick函数

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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