vn.py量化社区
By Traders, For Traders.
Administrator
avatar
加入于:
帖子: 2125
声望: 96

操作流程

不多废话先上结论(操作流程图):

description

下面是步骤说明,只要照着做100%可以搞定!!!

 

第一步:申请穿透式接入

电话联系你的客户经理,向期货公司申请进行穿透式接入测试。如果期货公司服务质量较好,可能已经主动联系你邀请测试了。

 

第二步:填表提交AppID

填写申请表,每家期货公司有所区别,但整体上需要提供的信息可能包括:

  • CPU序列号
  • 硬盘序列号
  • 硬盘主分区盘符和大小
  • 网卡MAC地址
  • 内网IP和外网IP
  • 交易程序的AppID

以上多条信息的获取,就需要用到cmd中的系统命令工具了。

输入以下命令获取CPU序列号:

wmic cpu get processorid

逐条输入以下命令,获取硬盘序列号、主分区盘符和大小:

diskpart
select disk 0
detail disk

输入以下命令,“以太网适配器”下的“物理地址”就是MAC地址,“IPv4地址”就是内网IP:

ipconfig /all

访问www.ip138.com获取你的外网IP,或者直接百度搜索“IP”也行。

最后的AppID,是一个由用户提供的交易程序代码,以个人身份申请时,格式为:

client_xxxx_yyyy

其中xxxx是你的软件名称,yyyy是版本号,这两个字段都是客户自己填的信息(没有固定规则),以vn.py的v2.0版本为例,AppID可能为:

client_vnpy888_2.0

其中888的部分,是自定义的一个字符串,主要为了避免你的AppID和其他人重复,你可以选择随意选择:姓名拼音缩写、某个数字、幸运词......

 

第三步:拿到AuthCode

提交申请表后,一般当天或者第二天就能拿到期货公司针对你的这个AppID提供的测试账号信息,包括:

  • 用户名、密码
  • 经纪商代码、仿真测试服务器地址(交易、行情)
  • 产品名称(你填的AppID)、授权编码(AuthCode)

 

第四步:仿真测试

我们这里测试环节以最新版的VN Studio为例,如果没有的话请点击下载:VNStudio-2.0.3。同样你也可以选择使用任何其他的软件程序来操作,如果不幸掉坑后爬不出来的话再回到VN Station好了。

双击桌面的VN Station图标,启动后会弹出登录框。如果是第一次使用,请点击“微信登录”按钮,扫描二维码后注册VN Station账号(同样也是vn.py官方社区论坛www.vnpy.com的登录账号),如果已经有账号了可以直接输入后点击“登录”。

description

登录完成后会看到VN Station主界面,此时请点击底部的“VN Trader Pro”,并在弹出的目录选择对话框中直接点“选择文件夹”按钮(即在默认的Windows用户目录下启动VN Station):

description

随后会弹出配置VN Treader的对话框,注意此时请一定只勾选加载CTPTEST接口,千万不要同时勾选加载CTP接口,会因为dll冲突导致后续测试失败!!!!

description

在VN Trader主界面上,点击左上角的“系统”->“连接CTPTEST”,在弹出的登录配置对话框中输入期货公司提供的测试账号信息(产品名称就是AppID),点击连接按钮后登录CTP穿透式测试用服务器:

description

当VN Trader左下角的日志监控组件中,刷新出熟悉的日志信息,看到“合约信息获取成功”的时候,就意味着我们已经完成测试了!

 

第五步:期货公司校验

搞定上面的测试服务器连接登录后,就可以联系期货公司进行校验工作了,通常可以一次性直接通过,如果遇到不通过的情况请查看本文最后的常见问题来解决。

 

第六步:实盘接入

期货公司校验通过后,会将客户申请的AppID和AuthCode添加到实盘CTP的服务器上,此时只要把启动VN Trader Pro时,加载的接口由CTPTEST改为CTP,就可以连接上实盘交易环境,和以往一样进行量化交易了。

description

 
 

名词解释

穿透式监管

新的监管模式主要是明确了期货公司对于其客户交易行为的管理责任,因此需要对所有接入交易柜台系统的交易终端软件进行认证管理,防止坏人耍流氓后一走了之,难以追查。

穿透式API

穿透式监管的主要实现工具,支持对交易终端机器的信息采集功能(即采集之前提到的CPU序列号、MAC地址等信息),并在加密后直接上传期货市场监控中心。除了本文中用到的CTP穿透式API外,其他的柜台也都提供了对应的穿透式API版本:恒生、易盛、飞创等,操作方法基本类似。

执行日期

在6月14日当天,所有期货公司的柜台系统全部强制升级为穿透式监管版本,老的非穿透式柜台会全部下线,没有所谓的“过渡期”,现在就已经是“过渡期”了!!!还有不到两周的时间,所有通过API接入交易的用户请赶紧吧,不要到了那天没法交易才着急,而且普遍的拖拉习惯,目前在申请接入测试的客户与日俱增,也对期货公司每天繁忙的后台IT部门表示感谢。

6.3.13

CTP穿透式柜台的仿真测试版本,也是CTPTEST接口中使用的API版本,所有客户的仿真接入认证测试都必须使用该版本!主要因为该版API采集客户的信息是没有加密的,期货公司可以在后台查看来进行认证工作。

6.3.15

CTP穿透式柜台的实盘交易版本,也是CTP接口中使用的API版本,完成仿真接入测试后,必须使用该版本才能连接实盘交易的CTP柜台。该版本的采集信息是安全加密的,期货公司的IT用后台系统也看不到。

直连模式

指的是所有用交易程序直接使用CTP的API连接CTP柜台,进行行情获取和委托交易的情况,几乎所有自主开发或者使用开源框架的量化交易客户都属于这种情况,直接使用穿透式监管版本的API进行开发就行(带_se后缀的)。

中继模式

指的是:交易客户端->中继服务器->CTP柜台,采用这种连接模式主要包括商业量化交易软件(比如文华财经)以及机构量化资管系统(比如O32),只有中继模式才需要用到那个DataCollect.dll文件。

 
 

API内部工作流程

同样以CTP为例:

  1. 调用Init,开始连接
  2. 收到OnFrontConnected,确认连接成功
  3. 调用ReqAuthenticate,这一步填入AppID和AuthCode,进行认证
  4. 收到OnRspAuthenticate,确认认证成功
  5. 调用ReqUserLogin,这一步同样需要填入AppID,进行登录
  6. 收到OnRspUserLogin,确认登录成功

只有交易接口TD需要进行认证,MD直接登录就行。每一步出错的话都会有相应的报错输出提示,查看错误信息内容后照着修改就行。

 
 

常见问题

哪个版本的vn.py目前支持穿透式API?

最新的v2.0.3发布版本(Py3 64位),和v1.9.2-LTS版本(Py2 32位),都支持了穿透式API,推荐使用Windows进行相关测试工作(Linux上需要自己调整链接库做编译)。

更新后SimNow环境连不上了!

截止目前的2019年6月1日,SimNow上的交易测试环境(包括第一套和第二套)依旧为非穿透式的老版本,因此用穿透式版本的API都是连不上的。

SimNow的终端厂商测试环境连上后没有行情!

SimNow所提供的6.3.13测试环境,目前仅仅为了满足用户的穿透式版本测试需求(也就是能成功登录上来查询一下合约信息等),尚未提供第一套或者第二套环境中的仿真行情以及仿真交易功能,所以:就是没有行情的~

报错4097,cmd有输出Decrypt handshake data failed

这是因为你的API版本和服务器的版本不一致导致的,请按照以下流程排查:

  1. 是否同时import了CTP(CtpGateway)和CTPTEST(CtptestGateway)接口,如有请移除另一个(两个同时加载会冲突)
  2. 确保使用CtptestGateway来连接6.3.13穿透式测试环境,用CtpGateway来连接6.3.15穿透式实盘环境
  3. v2.0.3以及v1.9.2-LTS(最新Github代码)都已升级到穿透式API,因此无法用于连接SimNow的老版本环境

UserProductInfo字段是用来干嘛的?

该字段是之前非穿透式API时,用来进行客户认证的产品名称字段(配合AuthCode一起)。穿透式版本接入的方案文档并没有对该字段的强制要求,目前我们这边已经对接了的5家期货公司也均未要求使用,但听说某些公司需要:如中信建投等,如果有了解其他公司情况的请在评论中分享。

能否使用云服务器或者虚拟机进行测试认证?

虚拟机和云服务器,对于本文开头部分提到的CPU序列号、硬盘序列号等信息,有可能获取不全或者部分字段不符合规定。目前有些期货公司要求严格,必须全部能正确获取到,且和第二部申请表中填写的内容一致,才能算认证测试成功;另一些公司则是十分宽松,表也不用填,采集信息也不看,只要登录上来就算测试通过。

所以,能否使用云服务器和虚拟机,完全取决于你开户的这家期货公司了。

如果使用v1.9.2之前老版本的vn.py怎么办?

请将v1.9.2的以下内容复制到你的老版本对应的目录下:

  • vnpy/api/ctp
  • vnpy/trader/gateway/ctpGateway
  • vnpy/trader/gateway/ctptestGateway

并采用上文提到的方式去做认证。

6.3.15的穿透式实盘API,想进行下测试怎么办?

目前只发现中信期货提供了6.3.15的仿真测试环境(忍不住竖起大拇指,不愧是中信),但最近估计申请人数过多,新的申请处理非常缓慢,如果大家发现别家提供6.3.15的测试环境也欢迎在评论里告知。

为什么期货公司一定要用6.3.13和6.3.15两个版本,接下来是否会合并都使用6.3.15?

为了满足穿透式监管认证要求,期货公司认证时要看到客户机器采集的信息,就只能通过6.3.13版本的CTP API。而实盘交易的环境中,期货监控中心要求直接上报采集信息,禁止期货公司查看和修改,就必须通过6.3.15版本。

所以目前来看仿真和实盘使用两个版本的API,是监管中心比较放心得过的方案吧,也就意味着交易客户端必须要两套API都对接准备好了。

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

vnpy 已通过宏源期货的穿透式测试啦,操作流程和群主大大的一样。接下来好好学习Vnpy啦。陈老师这是您杭州的线下培训吗?
https://mp.weixin.qq.com/s?__biz=MzUyNDQ3MTEwNg==&mid=2247483754&idx=1&sn=ba9092799a15f996e98cbd5fabb8be83&chksm=fa2d9f47cd5a1651f7c5b004f8bb9485cfbd875f359a29cfe8a410482c15a3fdc7a4c41d7c5b&mpshare=1&scene=1&srcid=0527fyNoCZN2EtV2lCCb45Pc&pass_ticket=FIzYi463WDd7jDwpDfpR5nRYug1mKGFPu%2B41t2E3LVWb9ztl94KaBc43QSs77iu7#rd

Administrator
avatar
加入于:
帖子: 2125
声望: 96

chasing_time wrote:

vnpy 已通过宏源期货的穿透式测试啦,操作流程和群主大大的一样。接下来好好学习Vnpy啦。陈老师这是您杭州的线下培训吗?
https://mp.weixin.qq.com/s?__biz=MzUyNDQ3MTEwNg==&mid=2247483754&idx=1&sn=ba9092799a15f996e98cbd5fabb8be83&chksm=fa2d9f47cd5a1651f7c5b004f8bb9485cfbd875f359a29cfe8a410482c15a3fdc7a4c41d7c5b&mpshare=1&scene=1&srcid=0527fyNoCZN2EtV2lCCb45Pc&pass_ticket=FIzYi463WDd7jDwpDfpR5nRYug1mKGFPu%2B41t2E3LVWb9ztl94KaBc43QSs77iu7#rd

这次是个和浙江省金融人才协会一起弄的培训呢,有认证证书的

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

谢谢,陈老师,在组团中.......

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

按照老师的方法所有的信息都采集了,但是(dadi)期货公司说必须要要有userproductinfo这个,煎熬了好久不晓得哪里填写。json文件也找不到这选项啊,最后两天了好捉急求老师赐教

Administrator
avatar
加入于:
帖子: 2125
声望: 96

wedo1024 wrote:

按照老师的方法所有的信息都采集了,但是(dadi)期货公司说必须要要有userproductinfo这个,煎熬了好久不晓得哪里填写。json文件也找不到这选项啊,最后两天了好捉急求老师赐教

目前2.0.3没有这个字段,下周发布的2.0.4我们会加上

Member
avatar
加入于:
帖子: 3
声望: 1

wedo1024 wrote:

按照老师的方法所有的信息都采集了,但是(dadi)期货公司说必须要要有userproductinfo这个,煎熬了好久不晓得哪里填写。json文件也找不到这选项啊,最后两天了好捉急求老师赐教

在ctptest_gateway.py中从639行开始的authenticate 函数和login函数中req变量中添加"UserProductInfo"即可。东航期货也要求,根据我测试通过的经验,只需要在 authenticate 函数中增加即可,login中可有可无。如下:

    def authenticate(self):
        """
        Authenticate with auth_code and appid.
        """
        req = {
            "UserID": self.userid,
            "BrokerID": self.brokerid,
            "AuthCode": self.auth_code,
            "AppID": self.appid,
            "UserProductInfo": "随便写点啥就好"
        }

        self.reqid += 1
        self.reqAuthenticate(req, self.reqid)

    def login(self):
        """
        Login onto server.
        """
        if self.login_failed:
            return

        req = {
            "UserID": self.userid,
            "Password": self.password,
            "BrokerID": self.brokerid,
            "AppID": self.appid,
            "UserProductInfo": "随便写点啥就好"
        }

        self.reqid += 1
        self.reqUserLogin(req, self.reqid)
Member
avatar
加入于:
帖子: 30
声望: 0

中信期货那边一定要 ctp test交易了几笔才能给通过接实盘。但是为什么我用vnpy登录中信的模拟账户虽然显示了连接成功,但就是不能订阅行情也不能下单

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

我在国金证券
说明材料上说的是:自开发交易终端:非国金期货有限责任公司提供标准终端,由客户自行开发、租赁或购买的交易终端(标准终端以我司官网发布为准);非我公司提供的标准终端如通达信、同花顺期货下单、无限易 Infini Trader交易终端、云燕交易员、红璟程序化交易平台、鼎砥期货量化交易平台(CTP版)、鹰翼期货套利助手、超八交易系统、騛操盘交易终端等,因未与我司有合作协议,请客户自行联系终端厂商与我司技术部门对接测试,我司不对最终对接效果及安全性负责。
要这么说的话,其实不需要一个个单独去申请啊,直接vnpy申请个总的,我们直接用不就成了。毕竟他也不限制你在哪台机器上用,只是要证明能顺利抓取到信息就完了(想来文华之类的,也是这样弄的,申请个总的appid,就完了)

Member
加入于:
帖子: 1
声望: 0

老师,我使用v1.9.2-LTS版本(Py2 32位)。根据永安期货提供的信息和老师的方法,成功登陆的,但是显示不了行情和交易不了。
日记显示的信息是:

交易服务器连接成功
行情服务器连接成功
结算信息确认完成
交易合约信息获取完成

当输入期货代码:日记出现错误
内容 接口
接口不存在: MAIN_ENGINE

这是什么情况?

Member
加入于:
帖子: 9
声望: 0

ubuntu1.9.1 替换了,运行bash install.sh
在ctp_connect.json里加上appid和authcode了
但连接ctp没反应
vnpy/api/ctp
vnpy/trader/gateway/ctpGateway

Administrator
avatar
加入于:
帖子: 2125
声望: 96

tradergogo wrote:

老师,我使用v1.9.2-LTS版本(Py2 32位)。根据永安期货提供的信息和老师的方法,成功登陆的,但是显示不了行情和交易不了。
日记显示的信息是:

交易服务器连接成功
行情服务器连接成功
结算信息确认完成
交易合约信息获取完成

当输入期货代码:日记出现错误
内容 接口
接口不存在: MAIN_ENGINE

这是什么情况?

你只是链接上了,没有登录上,检查用户名和密码吧

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

看了下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)   
Member
avatar
加入于:
帖子: 90
声望: 13

ty wrote:

看了下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)

只要在tdapi里面修改login和authenticate函数

Member
avatar
加入于:
帖子: 14
声望: 5

东航和华安的 没影响 ..... 具体报错没有吗

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

请问ubuntu有类似wmic命令查看采集的信息么?否则自己都不确定采集的对不对,完整不完整

Member
加入于:
帖子: 1
声望: 0

按照教程安装并配置,报错4097,对比了下安装的API文件和上交所的API文件的大小不同,不知道是什么原因。

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