一、前言
前面我们搞定了系统环境和账户登陆,写的有点乱所以这里我们先把前面的梳理一遍,然后试试下个单并获取订单的成交情况。
二、环境安装回顾
1、我们使用的是linux系统(centos6.5)
2、安装gcc和gcc-c++(编译和运行C++)
3、下载API包,iTapTradeApi是交易API,我们目前只需要交易API
4、在你的项目目录里新建代码文件test.c(比如/root)
5、在项目目录里新建一个API目录用于存放iTapTradeApi(交易API)的.so文件,并将其加入动态链接库
6、将iTapTradeApi(交易API)的.h文件放到项目目录中
7、新建一个MakeFile文件用以设置编译的参数
最后的结果应该是下面这样:
二、账户登录回顾
1、首先我们要继承ITapTradeAPINotify实现一个Trade类,这个类就是消息回调的接口。实现Trade类时需要按ITapTradeAPINotify的结构对所有消息回调接口进行实现。后面有消息触发就会执行对应消息接口内的代码,比如登陆成功就会执行OnRspLogin内的代码。
2、使用CreateITapTradeAPI创建API实例
3、将API实例与消息回调接口进行关联。
4、后面使用pAPI做操作,objTrade处理回调的消息,就形成了完美的闭环。
三、登陆后立即下单并周期性查询订单状态
1、状态判断
登陆成功后先是触发OnRspLogin,接着触发OnAPIReady,这时API才真正准备好了。此时我们就可以用pAPI来下单了,但是我们晓得有消息回调时触发的是objTrade所以如何通知pAPI可以下单是个问题,办法很多,这里我们可以简单使用一个FLAG来识别API是否准备好。
我在objTrade中定义了一个statusFlag,通过修改其值来记录当前的状态。
statusFlag = 0 默认情况
statusFlag = 1 API已准备好可以下单
statusFlag = 2 已下单等待委托的成交回报
statusFlag = 3 已成交
statusFlag = 4 啥也不做
statusFlag = -1 出现异常
接着在while循环中判断statusFlag的状态即可。
2、API准备就绪
在objTrade中新增了statusFlag用来记录状态,在API准备好时修改值为1,while循环中查询到值变为1时就会发送订单。
3、下单操作
为了便于操作,我将pAPI传递给了objTrade,然后objTrade里新增了一个下单的函数SendOrder
4、等待成交消息
为了确保成交,我设置的价格比较高。成交消息是OnRtnFill,在里面将statusFlag设置为3即可。
5、运行结果
我使用的是自己的模拟账号,你们也可以换用自己的账号。不过只有模拟账号可以用,实盘需要另外申请授权才行。
四、总结
从登录到下单其实都不难,真正有难度的是整个逻辑闭环如何整合起来,后面我会试试写一个完整的案例,从案例解析到代码实现搞一遍,这样大家搬运去用也不费力气了。本篇的完整代码可以关注公众号“零基础爱学习”回复“LH16”获得。