要加上这个吗?
if trade.vtTradeID in self.tradeSet:
return
self.tradeSet.add(trade.vtTradeID)
说错了,一直用的1.4老版
我用的是1.4版本,一直用新版,这次穿透式监管也只是升级了ctpgateway。老版本大家都没碰到这种情况吗?
总是隔上十来次交易就来一次这种bug,这次是两个品种的self.pos同时出现多一倍的情况。没有全程人工盯盘,我一直没有抓住现场。就是ctpengine里的这点代码,怎么就出错呢?
def processTradeEvent(self, event):
"""处理成交推送"""
trade = event.dict_['data']
if trade.vtOrderID in self.orderStrategyDict:
strategy = self.orderStrategyDict[trade.vtOrderID]
# 计算策略持仓
if trade.direction == DIRECTION_LONG:
strategy.pos += trade.volume
else:
strategy.pos -= trade.volume
self.callStrategyFunc(strategy, strategy.onTrade, trade)
# 更新持仓缓存数据
if trade.vtSymbol in self.tickStrategyDict:
posBuffer = self.posBufferDict.get(trade.vtSymbol, None)
if not posBuffer:
posBuffer = PositionBuffer()
posBuffer.vtSymbol = trade.vtSymbol
self.posBufferDict[trade.vtSymbol] = posBuffer
posBuffer.updateTradeData(trade)
#----------------------------------------------------------------------
还有一个问题,主界面上的期货持仓量是不是应该和交易该品种的唯一策略的持仓量时刻保持一致呢?
以前单独跑一个策略时没碰到过这种情况,现在一起跑多个策略(每个策略对应一个品种)才碰到的,一直没找到原因。
好奇怪呀,确实发生一次正好是两倍的情况导致策略平不了仓,当时在持仓过程中发生过这个连接中断以为是这个原因,现在看来是其它的原因了
self.pos应该是在策略收到成交回报后才会更新,如果策略收到成交回报以后,发生onsession disconnected的状况,是不是恢复连接后策略会再收到一次成交回报导致self.pos增加一倍呢?
看了下1.9.2LTS里面的ctpGateway代码,ReqUserLogin这一步并没有填入appID啊?
def login(self):
"""连接服务器"""
# 如果之前有过登录失败,则不再进行尝试
if self.loginFailed:
return
# 如果填入了用户名密码等,则登录
if self.userID and self.password and self.brokerID:
req = {}
req['UserID'] = self.userID
req['Password'] = self.password
req['BrokerID'] = self.brokerID
self.reqID += 1
self.reqUserLogin(req, self.reqID)
@iostream同求分享,1216505182@qq.com
很好,其实还有个问题,就是以后你自己交易时换成其他版本软件的话,只要能正常采集到信息应该也是没人管的吧?至少不能是换个机子就要期货公司认证一把吧?这样监管也真是神了,可还是免不了大家还是可以刷bios,确实不懂这样监管的目的何在。
组装机是不可以的,我的也是这种情况,wmic 命令也没有的都不行。
我的是仿真账户,期货公司要求先仿真通过才行,是不是1.9.2下载下来后不能直接测试仿真交易。还要把vnmaster下的ctptest文件夹拿过去用,然后
在run文件中分别修改下面两项?:
from vnpy.trader.gateway import ctpGateway
me.addGateway(ctpGateway)
我这些都做了,奇怪就是在ctptest_gateway.py里的
default_setting = {
"用户名": "",
"密码": "",
"经纪商代码": "",
"交易服务器": "",
"行情服务器": "",
"产品名称": "",
"授权编码": ""
}
添加了所需的登录信息后出现这样的报错(“setting 后面的冒号”):
line 147:
def connect(self,setting: dict):
p.s:对了,之前提示ctptest_gateway.py没有encoding,加了# encoding: UTF-8 就出现上面的报错。
2.7.12 、32位版本的python
再度补充,是直接安装的,没用vnconda。按照系统提示把上面的报错都修改了后,最后又提示:“from.vnctpmd import MaApi DLL load failed: 不是有效的win32应用程序”
下错版本了,不用关注了。
哪里有CTPTEST_connect.json?不是直接把那个CTP_connect.json给改了吗?不过我也是没连上,一直连接断开连接断开
是指的ctpGateway文件夹里所有的东西都拷过去吗?
写个步骤过程吧,给大家个帮助。
请问2.02版本里说“加回了对mongdodb数据库的支持”,那么在回测和交易时可以“选择”采用来自mongodb的数据吗?
之前花了很多精力让数据可以自动维护都是基于之前的mongdodb数据库,而且里面还有很多数据,一下子不能用了很麻烦。
从逻辑上来讲,变动手数的策略也是一定不行。如果你知道何时胜率*盈亏比之积高以及何时低,那你应该在高时做而在低时不做,仍然是固定手数。
@上弦之月,那意思就是不用管软件商ID和加密密匙的事,监管上默认允许自编的软件是在已等记(即有了软件商ID和加密传输功能的)的软件上改造而来,然后 我们自己直接去申请AppID测试就好了?
谢谢哈,看了监管的要求,加密密匙和交易软件厂商ID是捆绑的。社区成员们可以采用自编软件身份自己申请AppID,但是这和监管上要求用统一的交易软件厂商ID是不是矛盾呢?监管上会不会有有什么问题呢?难道让大家自己去搞交易软件厂商ID?真是头疼啊
已经用VNPY实盘两年多了,一直闭门造车,只关注测略算法方面,是vnpy的受益者,还在用着1.X的版本,一直还跑的不错。今天突然接到通知说要来看穿式监管,看了下期货公司的通知,好像要补充动态链接库来进行信息采集和认证等步骤。不知道交易员大佬们怎么处理这个问题呢?是(1)统一打补丁?还是(2)发一个开源补丁,让使用者以自编客户端身份自己去认证?不知道第一个选项,是不是需要交易员承担额外成本呢?这个选择对于将来vnpy的发展应该是更有利的。使用者成员也可以考虑进行适当的支持。
还有个问题,之前的维恩的派是不是不用了啊?好像之前的账户登不上去了。