本文档详细介绍如何使用xlt_api进行交易和行情接收。
初始化
创建API实例
使用 x1::XLTApi::create() 创建全局唯一的API实例:
using namespace x1;
XLTApi *api = XLTApi::create();
注意:API实例只能创建一次,在整个程序生命周期内使用同一个实例。
配置API
创建 x1::XLTApiConfig 对象并设置必要的配置参数。
配置项说明
以下是 x1::XLTApiConfig 类提供的所有配置接口:
注意:行情接收配置的三个方法( x1::XLTApiConfig::receive_quote_in_single_thread() 、 x1::XLTApiConfig::receive_quote_in_snap_tick_thread() 、 x1::XLTApiConfig::receive_quote_in_channel_per_thread() )调用其中一个即可,若都调用以最后一次调用为准。
配置示例
using namespace x1;
"192.168.5.155",
"192.168.5.155",
"192.168.5.155"
);
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
void set_request_timeout(uint16_t timeout)
设置请求超时时间,单位秒,建议不小于5秒
定义 xlt_api_config.h:99
void set_order_timeout(uint16_t timeout)
设置订单超时时间,单位秒,建议不小于10秒
定义 xlt_api_config.h:105
void set_log_level(ApiLogLevel level)
设置日志级别
定义 xlt_api_config.h:61
void set_path(const char *path)
设置API生成文件存放路径,如日志文件等
定义 xlt_api_config.h:56
实现回调类
继承 x1::XLTTradeSpi 类实现交易回调:
using namespace x1;
public:
void on_login(uint64_t session_id, uint64_t request_id,
}
void on_order_response(uint64_t session_id,
}
void on_trade_report(uint64_t session_id,
}
void on_order_end(uint64_t session_id,
}
};
错误信息
定义 xlt_data_type.h:173
订单结束通知
定义 xlt_trade_struct.h:43
新订单申报成功响应
定义 xlt_trade_struct.h:54
成交回报
定义 xlt_trade_struct.h:87
如果需要接收行情,还需要继承 x1::XLTQuoteSpi 或 x1::EFHQuoteSpi 类。
初始化API
调用 x1::XLTApi::initialize() 方法初始化API:
using namespace x1;
MyTradeSpi trade_spi;
if (!api->
initialize(&config, &trade_spi, quote_spi)) {
printf("初始化失败: %s\n", error_info.error_msg);
return -1;
}
virtual xlt_error_info_t get_last_error()=0
获取错误信息
virtual bool initialize(XLTApiConfig *config, XLTTradeSpi *trade_spi, XLTQuoteSpi *quote_spi)=0
初始化API,登录之前必须调用此函数,只能初始化一次 @config 配置参数
行情回调接口 此类用于接收行情数据回调,以及行情接收启动结果回调,目前仅包含Level1行情回调。若使用Level2行情,请使用EFHQuoteSpi类。 用户需要继承此类,并实现相应的回调函数,然后将...
定义 xlt_api.h:23
注意:API只能初始化一次,必须在登录之前调用。
登录
调用 x1::XLTApi::login() 方法登录交易账户:
using namespace x1;
uint64_t request_id = 1;
uint16_t client_id = 1;
const char *account_name = "00700000010001";
const char *password = "12345678";
const char *pub_key = "XXXXXXXXXXXXXX";
if (!api->
login(request_id, client_id, account_name, password, pub_key)) {
printf("登录请求失败: %s\n", error_info.error_msg);
return -1;
}
virtual bool login(uint64_t request_id, uint16_t client_id, const char *account_name, const char *password, const char *pub_key)=0
用户登请求
登录响应通过 x1::XLTTradeSpi::on_login() 回调函数异步返回。登录成功后,会返回一个 session_id,后续所有接口调用都需要使用此 session_id。
交易
订阅交易数据
登录成功后,需要订阅交易数据才能收到订单回报, x1::XLTApi::subscribe_report() :
using namespace x1;
virtual bool subscribe_report(uint64_t session_id, TradeResumeType resume_type, uint64_t start_sequence)=0
请求推送交易数据 每个session_id,仅第一次调用有效。
下单
调用 x1::XLTApi::insert_order() 方法下单:
using namespace x1;
order_info.
price = 100000;
order_info.
side = Side::BUY;
if (xid == 0) {
printf("下单失败: %s\n", error_info.error_msg);
}
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
撤单
调用 x1::XLTApi::cancel_order() 方法撤单:
using namespace x1;
uint64_t cancel_xid = api->
cancel_order(session_id, &cancel_info);
if (cancel_xid == 0) {
printf("撤单失败: %s\n", error_info.error_msg);
}
virtual uint64_t cancel_order(uint64_t session_id, xlt_cancel_order_info_t *cancel_order, uint64_t algo_mid=0)=0
撤单
撤单请求数据结构
定义 xlt_trade_struct.h:31
uint64_t origin_xid
原始订单标识
定义 xlt_trade_struct.h:33
回报
订单的回报通过以下回调函数接收:
交易消息流
委托全部成交
- 调用 x1::XLTApi::insert_order() 发送报单请求
- 收到 x1::XLTTradeSpi::on_order_response() 回调,表示订单申报成功
- 订单成交时,会多次收到 x1::XLTTradeSpi::on_trade_report() 回调(每笔成交一次)
- 订单全部成交后,收到 x1::XLTTradeSpi::on_order_end() 回调
委托失败
- 调用 x1::XLTApi::insert_order() 发送报单请求
- 收到 x1::XLTTradeSpi::on_order_error_response() 回调,包含错误信息
委托全部撤单
- 调用 x1::XLTApi::cancel_order() 发送撤单请求
- 收到 x1::XLTTradeSpi::on_cancel_response() 回调,表示撤单成功
- 原订单到达终结状态,收到 x1::XLTTradeSpi::on_order_end() 回调
委托部分撤单
- 调用 x1::XLTApi::cancel_order() 发送撤单请求
- 收到 x1::XLTTradeSpi::on_cancel_response() 回调,表示撤单成功
- 原订单到达终结状态,收到 x1::XLTTradeSpi::on_order_end() 回调
撤单失败
- 调用 x1::XLTApi::cancel_order() 发送撤单请求
- 收到 x1::XLTTradeSpi::on_order_error_response() 回调,包含错误信息
查询
查询资金
调用 x1::XLTApi::query_assets() 方法查询资金信息:
using namespace x1;
uint64_t request_id = next_request_id();
printf("查询资金失败: %s\n", error_info.error_msg);
}
virtual bool query_assets(uint64_t session_id, uint64_t request_id, uint64_t algo_mid=0)=0
请求查询资产(暂未启用)
查询结果通过 x1::XLTTradeSpi::on_query_assets() 回调函数返回。
查询持仓
调用 x1::XLTApi::query_positions() 方法查询持仓信息:
using namespace x1;
char security_code[CONST_STR_SECURITY_CODE_LEN] = "";
uint64_t request_id = next_request_id();
ExchangeIndex::INIT, 0)) {
printf("查询持仓失败: %s\n", error_info.error_msg);
}
virtual bool query_positions(uint64_t session_id, uint64_t request_id, char *security_code, ExchangeIndex exchange_index=ExchangeIndex::INIT, uint64_t algo_mid=0)=0
请求查询投资者持仓(暂未启用)
查询结果通过 x1::XLTTradeSpi::on_query_positions() 回调函数返回。
查询订单
调用 x1::XLTApi::query_orders() 方法查询订单:
using namespace x1;
uint64_t request_id = next_request_id();
if (!api->
query_orders(session_id, request_id, &query_param)) {
printf("查询订单失败: %s\n", error_info.error_msg);
}
virtual bool query_orders(uint64_t session_id, uint64_t request_id, const xlt_order_query_param_t *order_query_param, uint64_t algo_mid=0)=0
请求查询订单(暂未启用)
订单查询请求-条件查询
定义 xlt_data_type.h:183
uint64_t xid
需要查询的委托编号,如果为0则根据后续条件进行查询,如果不为0,则只查询指定订单,忽略后续查询条件
定义 xlt_data_type.h:184
char security_code[CONST_STR_SECURITY_CODE_LEN]
证券代码,可以为空,如果不为空,请不带空格,并以'\0'结尾,则默认查询时间段内的所有成交回报
定义 xlt_data_type.h:185
查询结果通过 x1::XLTTradeSpi::on_query_orders() 回调函数返回。
分页查询订单
调用 x1::XLTApi::query_orders_by_page() 方法分页查询订单:
using namespace x1;
uint64_t request_id = next_request_id();
printf("分页查询订单失败: %s\n", error_info.error_msg);
}
virtual bool query_orders_by_page(uint64_t session_id, uint64_t request_id, const xlt_query_by_page_param_t *page_query_param, uint64_t algo_mid=0)=0
分页请求查询报单
分页查询请求参数
定义 xlt_data_type.h:194
uint64_t req_count
分页查询条数,若填写小于1的值,则默认查询1条
定义 xlt_data_type.h:195
uint64_t reference
上一次收到的查询结果中带回来的索引,如果是从头查询,请置0
定义 xlt_data_type.h:196
查询结果通过 x1::XLTTradeSpi::on_query_orders_by_page() 回调函数返回。
查询成交
调用 x1::XLTApi::query_trades() 方法查询成交:
using namespace x1;
uint64_t xid = 12345;
uint64_t request_id = next_request_id();
printf("查询成交失败: %s\n", error_info.error_msg);
}
virtual bool query_trades(uint64_t session_id, uint64_t request_id, uint64_t xid, uint64_t algo_mid=0)=0
请求查询成交回报
查询结果通过 x1::XLTTradeSpi::on_query_trades() 回调函数返回。
行情
行情配置
若需要使用行情,请确保在初始化API时, x1::XLTApiConfig 已配置行情接收, 以下三个之一:
参见 配置API 和 行情线程
实现回调类
如果需要接收Level1行情,继承 x1::XLTQuoteSpi 类:
using namespace x1;
public:
}
}
};
上交所L1快照行情
定义 xlt_quote_struct.h:200
深交所L1快照行情数据结构体
定义 xlt_quote_struct.h:81
如果需要接收Level2行情,继承 x1::EFHQuoteSpi 类:
using namespace x1;
public:
void on_report_efh_sse_lev2_snap(
const sse_hpf_lev2 *p_snap)
override {
}
}
};
盛立 行情回调接口 此类是XLTQuoteSpi子类,包含XLTQuoteSpi回调类的所有回调函数,同时扩展了盛立Level2行情回调函数。 用户若需要使用盛立Level2行情数据,需要继承此类,并实...
定义 xlt_api.h:67
行情代码订阅
订阅行情时可以设置订阅代码, x1::XLTApi::subscribe_quote() 或者 x1::XLTApi::subscribe_all_quote()
using namespace x1;
virtual bool subscribe_quote(ExchangeIndex exchange_index, char *security_code)=0
订阅指定代码行情
virtual bool subscribe_all_quote(ExchangeIndex exchange_index)=0
订阅全市场代码行情
启动行情接收
登录成功后,调用 x1::XLTApi::start_quote() 启动行情接收:
using namespace x1;
printf("启动行情接收失败: %s\n", error_info.error_msg);
}
virtual bool start_quote(uint64_t session_id)=0
启动行情接收
行情接收启动结果通过 x1::XLTQuoteSpi::on_start_quote() 回调函数返回。