| Xlight API用户手册 v1.5.1.2 Xlight极速柜台接口文档

载入中...
搜索中...
未找到
快速开始

# Demo编译运行说明

SDK包含了Demo样例代码， 编译方式如下:

cd cpp/demo
mkdir build
cd build
cmake ..
make
make install

构建完成后，Demo可执行文件位于`target/bin`目录下，名称为`XLTApiDemo`。

# API使用基本步骤

使用xlt_api的基本流程如下：

1. 创建API实例 ：使用 x1::XLTApi::create() 创建全局唯一的API实例
2. 配置API ：创建 x1::XLTApiConfig 对象，设置交易日、网卡地址、网关地址等参数
3. 实现回调类 ：继承 x1::XLTTradeSpi 类（交易回调）和 x1::XLTQuoteSpi 类（行情回调），实现各种回调函数
4. 初始化API ：调用 x1::XLTApi::initialize() 方法初始化API
5. 登录 ：调用 x1::XLTApi::login() 方法登录交易账户
6. 订阅交易数据 ：调用 x1::XLTApi::subscribe_report() 订阅订单回报
7. 执行交易操作 ：调用 x1::XLTApi::insert_order() 报单、x1::XLTApi::cancel_order() 撤单等
8. 查询数据 ：调用 x1::XLTApi::query_assets() 、x1::XLTApi::query_positions() 、x1::XLTApi::query_orders() 等查询方法

详细的使用说明请参考 使用指南。

以下是一个完整的示例程序，演示了API的基本使用流程：

## 头文件和全局变量

#include "xlt_api.h"
#include <atomic>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <unistd.h>
#include <cstdio>
#include <cstring>
using namespace x1;
// 创建API实例（全局唯一）
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};
x1::XLTApi
接口类
定义 xlt_api.h:350
xlt_api.h
本接口定义XLT的主要接口类，包括交易和行情回调接口类。

## 实现交易回调类

// 实现交易回调类
class MyTradeSpi : public XLTTradeSpi {
public:
void on_login(uint64_t session_id, uint64_t request_id,
xlt_error_info_t *error_info) override {
std::unique_lock<std::mutex> lock(login_mutex);
if (error_info && error_info->error_code != 0) {
printf("登录失败: error_code=%lu, sub_error_code=%lu, error_msg=%s\n",
error_info->error_code, error_info->sub_error_code, error_info->error_msg);
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,
xlt_order_response_t *order_response) override {
printf("订单申报成功，xid: %lu\n", order_response->xid);
}
void on_trade_report(uint64_t session_id,
xlt_trade_report_t *trade_report) override {
printf("收到成交回报，xid: %lu, 成交数量: %lu\n",
trade_report->xid, trade_report->quantity);
}
void on_order_end(uint64_t session_id,
xlt_order_end_t *order_end) override {
printf("订单结束，xid: %lu\n", order_end->xid);
}
};
x1::XLTTradeSpi
交易回调类
定义 xlt_api.h:131
x1::xlt_error_info_t
错误信息
定义 xlt_data_type.h:173
x1::xlt_error_info_t::error_msg
char error_msg[CONST_ERROR_MSG_LEN]
错误信息
定义 xlt_data_type.h:176
x1::xlt_error_info_t::error_code
uint64_t error_code
错误代码
定义 xlt_data_type.h:174
x1::xlt_error_info_t::sub_error_code
uint64_t sub_error_code
错误子代码
定义 xlt_data_type.h:175
x1::xlt_order_end_t
订单结束通知
定义 xlt_trade_struct.h:43
x1::xlt_order_end_t::xid
uint64_t xid
报单标识
定义 xlt_trade_struct.h:47
x1::xlt_order_response_t
新订单申报成功响应
定义 xlt_trade_struct.h:54
x1::xlt_order_response_t::xid
uint64_t xid
报单标识
定义 xlt_trade_struct.h:58
x1::xlt_trade_report_t
成交回报
定义 xlt_trade_struct.h:87
x1::xlt_trade_report_t::xid
uint64_t xid
报单标识
定义 xlt_trade_struct.h:91
x1::xlt_trade_report_t::quantity
quantity_t quantity
成交数量，该笔成交回报的成交数量
定义 xlt_trade_struct.h:94

## main函数 - 初始化和登录

int main() {
// 1. 配置API
XLTApiConfig config;
config.set_trading_day(20240320); // 设置交易日
config.set_local_addr("192.168.5.155", // AGW网卡IP
"192.168.5.155", // 交易网卡IP
"192.168.5.155"); // 行情网卡IP
config.add_agw_addr("222.71.197.227", 60601); // 添加网关地址
// 2. 创建回调实例
MyTradeSpi trade_spi;
// 3. 初始化API
if (!api->initialize(&config, &trade_spi, nullptr)) {
printf("初始化失败\n");
return -1;
}
// 4. 登录并同步等待回调
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")) {
auto error_info = api->get_last_error();
printf("登录请求发送失败: %s\n", error_info.error_msg);
return -1;
}
// 同步等待登录回调
{
std::unique_lock<std::mutex> lock(login_mutex);
// 等待登录回调，最多等待30秒
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;
}
// 获取登录成功后的 session_id
uint64_t session_id = g_session_id.load();
printf("获取到 session_id: %lu，可以继续后续操作\n", session_id);
x1::XLTApiConfig
API配置类 此类用于配置XLT API的各项参数，如日志路径、日志级别、交易日、网卡地址、网关地址、行情接收配置等。 用户需要在调用XLTApi::initialize方法前，创建此类实例，并设置相应...
定义 xlt_api_config.h:49
x1::XLTApiConfig::set_local_addr
bool set_local_addr(const char *agw, const char *trade, const char *quote)
设置本地网卡IP地址
x1::XLTApiConfig::add_agw_addr
bool add_agw_addr(const char *ip_addr, uint16_t port)
添加网关地址
x1::XLTApiConfig::set_trading_day
void set_trading_day(uint64_t trading_day)
设置交易日，格式YYYYMMDD，如20230901
定义 xlt_api_config.h:67
x1::XLTApi::get_last_error
virtual xlt_error_info_t get_last_error()=0
获取错误信息
x1::XLTApi::login
virtual bool login(uint64_t request_id, uint16_t client_id, const char *account_name, const char *password, const char *pub_key)=0
用户登请求
x1::XLTApi::initialize
virtual bool initialize(XLTApiConfig *config, XLTTradeSpi *trade_spi, XLTQuoteSpi *quote_spi)=0
初始化API，登录之前必须调用此函数，只能初始化一次 @config 配置参数

## main函数 - 交易操作

// 5. 订阅交易数据
if (!api->subscribe_report(session_id, TradeResumeType::QUICK, 0)) {
auto error_info = api->get_last_error();
printf("订阅交易数据失败: %s\n", error_info.error_msg);
return -1;
}
// 6. 下单
xlt_order_insert_info_t order_info = {};
strcpy(order_info.security_code, "600010");
order_info.exchange_index = ExchangeIndex::SH;
order_info.price = 100000; // 价格放大1万倍
order_info.quantity = 100;
order_info.order_type = OrderType::LIMIT_PRICE;
order_info.side = Side::BUY;
order_info.business_type = BusinessType::CASH;
uint64_t xid = api->insert_order(session_id, &order_info);
if (xid == 0) {
auto error_info = api->get_last_error();
printf("下单请求发送失败: %s\n", error_info.error_msg);
} else {
printf("下单请求已发送，xid: %lu\n", xid);
}
// 7. 保持程序运行以接收回调
while (true) {
usleep(1000000);
}
return 0;
}
x1::XLTApi::subscribe_report
virtual bool subscribe_report(uint64_t session_id, TradeResumeType resume_type, uint64_t start_sequence)=0
请求推送交易数据 每个session_id，仅第一次调用有效。
x1::XLTApi::insert_order
virtual uint64_t insert_order(uint64_t session_id, xlt_order_insert_info_t *order, uint64_t algo_mid=0)=0
委托
x1::xlt_order_insert_info_t
新订单请求数据结构
定义 xlt_trade_struct.h:17
x1::xlt_order_insert_info_t::side
Side side
买卖方向
定义 xlt_trade_struct.h:24
x1::xlt_order_insert_info_t::security_code
char security_code[CONST_STR_SECURITY_CODE_LEN]
证券代码，不带空格，并以'\0'结尾
定义 xlt_trade_struct.h:21
x1::xlt_order_insert_info_t::exchange_index
ExchangeIndex exchange_index
交易市场
定义 xlt_trade_struct.h:22
x1::xlt_order_insert_info_t::order_type
OrderType order_type
报单价格类型
定义 xlt_trade_struct.h:23
x1::xlt_order_insert_info_t::quantity
quantity_t quantity
数量
定义 xlt_trade_struct.h:20
x1::xlt_order_insert_info_t::business_type
BusinessType business_type
业务类型
定义 xlt_trade_struct.h:25
x1::xlt_order_insert_info_t::price
price_t price
价格放大10000倍
定义 xlt_trade_struct.h:19