Demo编译运行说明
SDK包含了Demo样例代码, 编译方式如下:
cd cpp/demo
mkdir build
cd build
cmake ..
make
make install
构建完成后,Demo可执行文件位于target/bin目录下,名称为XLTApiDemo。
API使用基本步骤
使用xlt_api的基本流程如下:
- 创建API实例 :使用 x1::XLTApi::create() 创建全局唯一的API实例
- 配置API :创建 x1::XLTApiConfig 对象,设置交易日、网卡地址、网关地址等参数
- 实现回调类 :继承 x1::XLTTradeSpi 类(交易回调)和 x1::XLTQuoteSpi 类(行情回调),实现各种回调函数
- 初始化API :调用 x1::XLTApi::initialize() 方法初始化API
- 登录 :调用 x1::XLTApi::login() 方法登录交易账户
- 订阅交易数据 :调用 x1::XLTApi::subscribe_report() 订阅订单回报
- 执行交易操作 :调用 x1::XLTApi::insert_order() 报单、x1::XLTApi::cancel_order() 撤单等
- 查询数据 :调用 x1::XLTApi::query_assets() 、x1::XLTApi::query_positions() 、x1::XLTApi::query_orders() 等查询方法
详细的使用说明请参考 使用指南。
以下是一个完整的示例程序,演示了API的基本使用流程:
头文件和全局变量
#include <atomic>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <unistd.h>
#include <cstdio>
#include <cstring>
using namespace x1;
XLTApi *api = XLTApi::create();
std::mutex login_mutex;
std::condition_variable login_cv;
std::atomic<bool> login_done{false};
std::atomic<uint64_t> g_session_id{0};
std::atomic<bool> login_success{false};
本接口定义XLT的主要接口类,包括交易和行情回调接口类。
实现交易回调类
public:
void on_login(uint64_t session_id, uint64_t request_id,
std::unique_lock<std::mutex> lock(login_mutex);
printf("登录失败: error_code=%lu, sub_error_code=%lu, error_msg=%s\n",
login_success = false;
g_session_id = 0;
} else {
printf("登录成功,session_id: %lu\n", session_id);
login_success = true;
g_session_id = session_id;
}
login_done = true;
login_cv.notify_one();
}
void on_order_response(uint64_t session_id,
printf(
"订单申报成功,xid: %lu\n", order_response->
xid);
}
void on_trade_report(uint64_t session_id,
printf("收到成交回报,xid: %lu, 成交数量: %lu\n",
}
void on_order_end(uint64_t session_id,
printf(
"订单结束,xid: %lu\n", order_end->
xid);
}
};
错误信息
定义 xlt_data_type.h:173
char error_msg[CONST_ERROR_MSG_LEN]
错误信息
定义 xlt_data_type.h:176
uint64_t error_code
错误代码
定义 xlt_data_type.h:174
uint64_t sub_error_code
错误子代码
定义 xlt_data_type.h:175
订单结束通知
定义 xlt_trade_struct.h:43
uint64_t xid
报单标识
定义 xlt_trade_struct.h:47
新订单申报成功响应
定义 xlt_trade_struct.h:54
uint64_t xid
报单标识
定义 xlt_trade_struct.h:58
成交回报
定义 xlt_trade_struct.h:87
uint64_t xid
报单标识
定义 xlt_trade_struct.h:91
quantity_t quantity
成交数量,该笔成交回报的成交数量
定义 xlt_trade_struct.h:94
main函数 - 初始化和登录
int main() {
"192.168.5.155",
"192.168.5.155");
MyTradeSpi trade_spi;
if (!api->
initialize(&config, &trade_spi,
nullptr)) {
printf("初始化失败\n");
return -1;
}
uint64_t request_id = 1;
uint16_t client_id = 1;
login_done = false;
login_success = false;
g_session_id = 0;
if (!api->
login(request_id, client_id,
"00700000010001",
"12345678", "XXXXXXXXXXXXXX")) {
printf(
"登录请求发送失败: %s\n", error_info.
error_msg);
return -1;
}
{
std::unique_lock<std::mutex> lock(login_mutex);
if (!login_cv.wait_for(lock, std::chrono::seconds(30),
[] { return login_done.load(); })) {
printf("登录超时\n");
return -1;
}
}
if (!login_success) {
printf("登录失败,无法继续\n");
return -1;
}
uint64_t session_id = g_session_id.load();
printf("获取到 session_id: %lu,可以继续后续操作\n", session_id);
API配置类 此类用于配置XLT API的各项参数,如日志路径、日志级别、交易日、网卡地址、网关地址、行情接收配置等。 用户需要在调用XLTApi::initialize方法前,创建此类实例,并设置相应...
定义 xlt_api_config.h:49
bool set_local_addr(const char *agw, const char *trade, const char *quote)
设置本地网卡IP地址
bool add_agw_addr(const char *ip_addr, uint16_t port)
添加网关地址
void set_trading_day(uint64_t trading_day)
设置交易日,格式YYYYMMDD,如20230901
定义 xlt_api_config.h:67
virtual xlt_error_info_t get_last_error()=0
获取错误信息
virtual bool login(uint64_t request_id, uint16_t client_id, const char *account_name, const char *password, const char *pub_key)=0
用户登请求
virtual bool initialize(XLTApiConfig *config, XLTTradeSpi *trade_spi, XLTQuoteSpi *quote_spi)=0
初始化API,登录之前必须调用此函数,只能初始化一次 @config 配置参数
main函数 - 交易操作
printf(
"订阅交易数据失败: %s\n", error_info.
error_msg);
return -1;
}
order_info.
price = 100000;
order_info.
side = Side::BUY;
if (xid == 0) {
printf(
"下单请求发送失败: %s\n", error_info.
error_msg);
} else {
printf("下单请求已发送,xid: %lu\n", xid);
}
while (true) {
usleep(1000000);
}
return 0;
}
virtual bool subscribe_report(uint64_t session_id, TradeResumeType resume_type, uint64_t start_sequence)=0
请求推送交易数据 每个session_id,仅第一次调用有效。
virtual uint64_t insert_order(uint64_t session_id, xlt_order_insert_info_t *order, uint64_t algo_mid=0)=0
委托
新订单请求数据结构
定义 xlt_trade_struct.h:17
Side side
买卖方向
定义 xlt_trade_struct.h:24
char security_code[CONST_STR_SECURITY_CODE_LEN]
证券代码,不带空格,并以'\0'结尾
定义 xlt_trade_struct.h:21
ExchangeIndex exchange_index
交易市场
定义 xlt_trade_struct.h:22
OrderType order_type
报单价格类型
定义 xlt_trade_struct.h:23
quantity_t quantity
数量
定义 xlt_trade_struct.h:20
BusinessType business_type
业务类型
定义 xlt_trade_struct.h:25
price_t price
价格放大10000倍
定义 xlt_trade_struct.h:19