易达期货交易系统探索(一)

论坛 期权论坛 期权     
期权匿名问答   2022-9-9 02:51   8086   0
在正式编写ydServer交易接口前,需要先准备好需要的环境,以及对CMake有一个基本的了解,具体方法可参考易达期货交易系统探索(零) - 知乎 (zhihu.com)和CMake学习笔记 - 知乎 (zhihu.com)。
准备好环境后,打开易达官方网站,点击文档,研究一下官方资料:
文档 – 易达交易系统 (hanlinit.com)


研究发现当前最新的api版本是1_188_78_0,下载下来研究研究


由官方文档可知,客户端应用编程接口 – 易达交易系统 (hanlinit.com),易达提供了原生API,裸协议接口和CTP模拟接口,裸协议接口和CTP模拟接口是什么暂时看不懂,先研究原生API。
易达原生API提供Linux版本和Windows版本两种,其中Linux版本的ydApi有大量针对Linux平台的优化,使得其性能相对Windows版本较为突出,因此Windows版本在高频低延迟量化交易中没有实际的使用价值,我们应选择放弃Windows版本而重点研究学习Linux版本。
客户端与ydServer(柜台服务器)的通信主要包括上行和下行两个部分。上行部分由客户端向ydServer发送请求,比如系统登录、报撤单请求、修改口令和上行心跳信息等。下行部分由ydServer向客户端主动推送交易状态的变化,比如日初静态初始化数据、报单/成交回报、行情等内容;其中日初静态初始化数据将同步到本地的初始数据库;初始化完成后或收到报单/成交回报或行情后会调用客户端的回调函数。客户端程序可使用本地调用YDApi::getX系列函数可获得日初静态初始化数据,但客户需根据报单/成交回报计算自己的保证金、交易费用、可用资金和持仓数据。
ydApi提供C++接口。如下图所示,我们仅需通过两个类就可以完成交易功能:一个是YDApi,用于处理上行信息;一个是YDListener,用于处理下行信息,维护本地交易数据,并调用客户端程序提供的回调函数。


结合易达官方文档,再观察刚刚下载的最新api文件,其一级目录下有3个文件夹,其中ydAPI是我们现在需要的易达原生api,ydClient是交易和管理客户端程序,暂时用不到,ydCTP是CTP模拟接口,暂时也用不到。


打开ydAPI文件夹,可以看到里面有5个文件夹,其中example中是一些例程,include中是ydApi的头文件,linux64、win32、win64中是Linux操作系统和windows操作系统的动态链接库。


注:此处需了解c++静态链接库与动态链接库的概念
静态链接库和动态链接库都是在不愿意分享源码的情况下实现代码共享的方式。在windows系统中,若使用静态链接的方式,连接器将从.lib库文件直接取得所需的代码,复制到生成的.exe可执行文件中,.lib文件中直接包含函数编译后生成的指令。若使用动态链接的方式,函数编译后生成的指令位于一个.dll文件中,.lib文件中包含的是每个函数在.dll文件中的位置索引,运行时函数实现代码由加载在进程空间中的.dll文件提供,.exe文件执行时可以“动态”地引用和卸载这个与.exe文件独立的.dll文件,更加节省内存,.dll文件与.exe文件独立也可以提高可维护性和可扩展性。.so文件是Linux系统下的动态链接库,其作用和windows系统下的.dll和.lib加起来类似。
ydServer是非开源的,不对外公布其源码,类和函数的声明都放在include文件夹下的.h头文件中,这些类和函数的实现源代码不公开,但其动态链接库放在linux64、win32、win64这三个文件夹中,分别对应linux、32位windows和64位windows操作系统。
因此,我们需要的是include和linux64这两个文件夹。新建一个文件夹,把include和linux64这两个文件夹复制过来,把yd.so改名为libyd.so,再新建一个src文件夹用于存放自己编写的c++程序,新建一个CMakeLists.txt文件写入用Cmake编译执行此工程的方式,用VSCode打开此文件夹


开始编写CMakeLists.txt
# cmake_minimum_required(VERSION 3.0.0)
# project(yd_demo VERSION 0.1.0)

# include(CTest)
# enable_testing()

# add_executable(yd_demo main.cpp)

# set(CPACK_PROJECT_NAME ${PROJECT_NAME})
# set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
# include(CPack)

cmake_minimum_required(VERSION 3.0.0)
project(yubao_yd_Demo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)
# 头文件目录
include_directories(include)
# 库文件目录
link_directories(linux64)
# 源文件列表存储进SRC变量
aux_source_directory(src SRC)
# 生成可执行文件
add_executable(yd_demo ${SRC})
# 链接动态库
target_link_libraries(yd_demo yd)
# 将资源文件目录config_files中的文件拷贝至bulid/config_files目录下
# add_custom_command(TARGET main_linux POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/config_files ${CMAKE_BINARY_DIR}/config_files)之后在src文件夹中创建main.cpp文件,写点简单的c++程序看看能不能编译运行。
#include<iostream>
#include<ydApi.h>
#include<ydDataStruct.h>
#include<ydDataType.h>
#include<ydError.h>
#include<ydUtil.h>

using namespace std;

int main(){
    cout << "hello world" << endl;
    return 0;
}如果报错说bits/c++config.h找不到,打开WSL root权限,安装gcc-<v>-multilib和g++-<v>-multilib,<v>代表gcc的版本,我这里是11
$ apt install gcc-11-multilib
$ apt install g++-11-multilib运行程序,成功输出hello world,说明头文件和库配置成功


接下来可以依次实现易达接口。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP