TradeXPlus / ctpgo

上海期货信息技术有限公司 (http://www.sfit.com.cn) (由上海期货交易所投资) ctp 接口 Golang版 (for linux64)。 可连接国内五大交易所(中金所,上期所,郑商所,大商所,能源所)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

github.com/TradeXPlus/ctpgo

上海期货信息技术有限公司 (由上海期货交易所投资) ctp 接口 Golang版 (for linux64)。 可连接国内五大交易所(中金所,上期所,郑商所,大商所,能源中心) 接口相关资料,可参阅官方相关说明:期货期权api

环境要求

操作系统:Linux x86_64 (Centos, Red Hat, debian , ubuntu等)
软件环境(将安装位置添加进PATH列表):

以上操作能正常显示各自版本,代表安装成功!

实现原理

第一步、 通过使用swig工具为go语言与c++(ctp 接口库和头文件是C++)进行交互,生成ctpgo_wrap.cxx、ctpgo_wrap.h、lib.go文件;

第二步、 使用Cmake,将ctpgo_wrap.cxx ctpgo_wrap.h编译成 libctpgo.so文件,此文件是lib.go,libctpgo.go调用CTP API的桥梁文件;

第三步、 编写Go语言程序,调用 lib.go 中相关接口属性,实现调用 ctp 接口库的目的。

调用过程:Go -> lib.go(配合libctpgo.go) -> libctpgo.so -> libthostmduserapi_se.so 和 libthosttraderapi_se.so

依赖库

  • 使用 github.com/axgle/mahonia包
    ctp Api 默认使用 gbk 编码,需要用到开源库转换为 utf8
  • 使用github.com/tidwall/gjson包
    使用json格式的配置文件,文件保存服务器,账户配置等信息

手动构建过程

第一步、 下载项目到本地(以/home/godev/ctpgo为例)

git clone https://github.com/TradeXPlus/ctpgo.git    
cd ctpgo  
go get -u github.com/axgle/mahonia  
go get -u github.com/tidwall/gjson  

第二步、 通过swig工具,生成C++转化为C的封装和go语言项目接口文件

这部分知识可以参考使用swig工具为go语言与c++进行交互

项目目录中的sdk目录是 期货期权api官网 下载的文件,对应的so库和头文件:

下载http://www.sfit.com.cn/DocumentDown/api_3/5_2_2/v6.6.5_tradeapi.zip包;  
解压后复制v6.6.5_20210924_api_tradeapi_linux64.tar\v6.6.5_20210924_api\下目录,至lib目录;  
目录改名为linux64即可。  

注意1:为了匹配Go语言字符串方式,头文件有几处需要将单引号改为双引号:

ThostFtdcUserApiDataType.h 2723行 至 2729行; 4609行 至 4615行

注意2:为了使so链接库符合linux命名规则,需要在两个so文件名前添加lib:

修改后的文件名:libthosttraderapi_se.so libthostmduserapi_se.so

本项目可直接执行如下命令进行构建:

[提示符]# pwd

/home/godev/ctpgo

[提示符]# cd lib

/home/godev/ctpgo/lib

[提示符]# make swig
该命令调用cmake目录下 Makefile 的 swig部分,并执行(执行会报Warning 514,是因为没有构造函数的原因,不用管他);
执行完毕,系统将生成(/home/godev/ctpgo/lib)如下三个文件:
lib.go
linux64/ctpgo_wrap.cxx
linux64/ctpgo_wrap.h

这些文件 会在第三步 cmake 生成 so文件中用到

第三步、 通过cmake工具,将ctpgo_wrap.cxx ctpgo_wrap.h 编译成 libctpgo.so文件

这部分知识可以.cxx文件_我们需要懂得CMake文件 这篇文章。

执行如下命令进行构建:

[提示符]# cd cmake

/home/godev/ctpgo/lib/cmake

[提示符]# cmake .

......

[提示符]# make

......
[提示符]# mv libctpgo.so ../linux64/libctpgo.so

执行完上述命令,将在lib/linux64/目录生成 libctpgo.so,该文件可以被Go语言通过cgo模式调用。

第四步、 编译Go源程序,生成可执行程序

执行如下命令进行构建(这个编译过程非常漫长,请耐心等待):  

[提示符]# cd /home/godev/ctpgo
make ctpgo

编译完成后,将在bin目录生成ctpgo可执行文件

执行程序:
[提示符]# ./bin/ctpgo [test|dev|prod]  
相关账户配置在bin/cnf.json文件"USERS" -> [test|dev|prod] -> {}。  

自动构建过程

上述过程能很清晰了解本项目构建原理和具体过程,可以通过下面简单指令(在项根目录下Makefile中all目标),一键编译构建。
构建前,需要克隆项目,同时把账户密码信息填写在src/ctpgo.go文件中。

$ git clone https://github.com/TradeXPlus/ctpgo.git
$ cd ctpgo
$ make all

运行demo图

感谢:goctpgo-talib 项目提供的参考

量化交易程序定制开发和国内期货开户业务

低佣金开户,资金量大可做到交易所+1分的交易手续费,开户及程序咨询请添加WX:vip-1fen
交流QQ群:777501115(入群密码:投机普拉斯)

About

上海期货信息技术有限公司 (http://www.sfit.com.cn) (由上海期货交易所投资) ctp 接口 Golang版 (for linux64)。 可连接国内五大交易所(中金所,上期所,郑商所,大商所,能源所)


Languages

Language:Go 89.9%Language:C 9.3%Language:C++ 0.8%Language:SWIG 0.0%Language:Makefile 0.0%Language:CMake 0.0%