启动后报错,提示缺乏部分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做了对齐。
甚至还有这种看不懂的情况
如题,CTP五分钟策略实盘运行,portfolio bar generator通过1分钟bar数据的datetime对指定window取模的逻辑存在不确定性。
如下图所示,取模的操作是在循环外,具体取到哪个品种的bar存在不确定性,由bars的dict里面的顺序决定。
具体来说,会造成如下的情况,同一个时段的on bar因不同品种的时间差异被触发两次。
解决方法想了一下:1. CTP服务端保证所有品种的datetime与推送时间一致;2. 使用原来的bargenerator对各品种逐个处理;
正常了,可能跟最大会话数量的限制有关系,sleep时间也从十秒增加到了三十秒。
在main_engine.connect(ctp_setting, "CTP")之后sleep了10秒钟。
是不是不太够?
郭易燔 wrote:
是不是交易服务器还没有连接成功你就已经尝试在获取来,用sleep等一等再试试呢
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的问题解决了就好了
状态信息里面的instrument是品种的代码,就是没有期数的,例如“sp”。tick里面的是有期数的,例如“sp2205”。之前的代码里面相当于都统一成了“sp.SHFE”的形式。
duke wrote:
大神,增加函数定义后,继续报错
然后我直接用instrument = tick.symbol,跑通了,所以搞不懂left_alphas(tick.symbol)这个语句的作用是什么?求解惑
大佬求教,行情数据应该是在vnpy_ctp.gateway.ctp_gateway.CtpMdApi.onRtnDepthMarketData进来的,为什么不在ctp_gateway这里处理呢?