昨天已经编译成功封装API,那么接下来就是对封装API的测试。
SimNow环境介绍
行情接口初始化
首先需要创建API实例及SPI实例,然后将SPI实例注册给API实例(VN.Py中已封装进MdApi::createFtdcMdApi(string pszFlowPath)内),其中要给其传参(本地流文件生成的目录)。
CTP在初始化时会在本地生成一些流文件,这些流文件用来保存当日客户端接收到的公有流、对话流、私有流等报文的数量。对MdAPI而言,针对流文件有两点要注意:
1、客户端程序会对流文件进行大量的读写操作,如果客户端不对系统中的句柄数量进行管理的话,很可能出现句柄被用光的现象;
向API实例注册前置地址,前置地址的格式为:tcp://127.0.0.1:17001。tcp 字段是开始字符串(不表示通讯模式),127.0.0.1 是托管服务器的行情前置地址,17001 是该行情前置的端口号。
初始化行情接口的工作线程,初始化之后,线程自动启动,并使用注册好的前置地址向服务器请求无身份验证的连接。
小编重载了SPI的虚函数以具体处理各种回报等,在最后的测试展示中,将会呈现小编为了可读性所做的重载。
若是连接断开的话,会通过onFrontDisconnect返回具体原因并自动重连,VN.Py在连接断开时并不区分断开原因,仅仅是writeLog,毕竟能自动重连,客户端可不做处理。客户端与服务端连接断开的原因无法就是:网络原因导致的连接断开与服务端主动断开连接,而服务端之所以会主动断开连接,有两种可能:要么客户端长时间没有从服务端接收报文,时间超时;要么客户端建立的连接数超过限制。
CTP前置连接有个心跳机制,CTP采用心跳机制来确认客户端与服务端的连接是否正常,如果客户端没有从服务端接收报文,服务端会发送心跳,心跳机制目前仅在接口内部实现,并不会表现到客户端层面上来,即OnHeartBeatWarning并不会被调用。VN.Py对这块也是pass处理的。
登陆及订阅行情
与前置机建立连接后,通过传入brokerID、UserID、PassWord来请求登陆,模拟账户向simnow申请吧。说到行情订阅,CTP是支持单次请求单合约或批量合约订阅的,但是VN.Py在封装API时只支持向服务端单次仅能单合约订阅。
小编在下午17:25做了一次测试,此时已经无法与CTP服务器建立连接及登陆了,此时CTP在盘后维护吧,小编的测试输出如下,在请求登陆的时候,曝出因网络原因发送失败,即指登陆请求发送不成功,与此同时与前置机的连接也是不成功的。
完整测试输出
以下是完整的测试输出,从前置连接——>登陆——>行情订阅及推送——>退订行情,清楚地展示了全流程。
领取专属 10元无门槛券
私享最新 技术干货