QuoteApi
目录
- 1. 接口
- 2. 示例代码
- 3. CreateQuoteApi
- 4. Release
- 5. GetTradingDay
- 6. GetApiVersion
- 7. GetApiLastError
- 8. SetUDPBufferSize
- 9. RegisterSpi
- 10. SetHeartBeatInterval
- 11. SetUDPRecvThreadAffinity
- 12. SetUDPRecvThreadAffinityArray
- 13. SetUDPParseThreadAffinity
- 14. SetUDPParseThreadAffinityArray
- 15. SetUDPSeqLogOutPutFlag
- 16. SubscribeMarketData
- 17. UnSubscribeMarketData
- 18. SubscribeOrderBook
- 19. UnSubscribeOrderBook
- 20. SubscribeTickByTick
- 21. UnSubscribeTickByTick
- 22. SubscribeAllMarketData
- 23. UnSubscribeAllMarketData
- 24. SubscribeAllOrderBook
- 25. UnSubscribeAllOrderBook
- 26. SubscribeAllTickByTick
- 27. UnSubscribeAllTickByTick
- 28. Login
- 29. Logout
- 30. QueryAllTickers
- 31. QueryTickersPriceInfo
- 32. QueryAllTickersPriceInfo
- 33. SubscribeAllOptionMarketData
- 34. UnSubscribeAllOptionMarketData
- 35. SubscribeAllOptionOrderBook
- 36. UnSubscribeAllOptionOrderBook
- 37. SubscribeAllOptionTickByTick
- 38. UnSubscribeAllOptionTickByTick
- 39. QueryAllTickersFullInfo
- 40. LoginToRebuildQuoteServer
- 41. LogoutFromRebuildQuoteServer
- 42. RequestRebuildQuote
- 43. QueryAllNQTickersFullInfo
QuoteApi类提供了行情api的初始化、登录、订阅等功能。
1. 接口
namespace XTP {
namespace API {
class MD_API_EXPORT QuoteApi
{
public:
///创建QuoteApi
///@param client_id (必须输入)用于区分同一用户的不同客户端,由用户自定义
///@param save_file_path (必须输入)存贮订阅信息文件的目录,请设定一个有可写权限的真实存在的路径,如果路径不存在的话,可能会因为写冲突而造成断线
///@param log_level 日志输出级别
///@return 创建出的UserApi
///@remark 如果一个账户需要在多个客户端登录,请使用不同的client_id,系统允许一个账户同时登录多个客户端,但是对于同一账户,相同的client_id只能保持一个session连接,后面的登录在前一个session存续期间,无法连接
static QuoteApi *CreateQuoteApi(uint8_t client_id, const char *save_file_path, XTP_LOG_LEVEL log_level=XTP_LOG_LEVEL_DEBUG);
///删除接口对象本身
///@remark 不再使用本接口对象时,调用该函数删除接口对象
virtual void Release() = 0;
///获取当前交易日
///@return 获取到的交易日
///@remark 只有登录成功后,才能得到正确的交易日
virtual const char *GetTradingDay() = 0;
///获取API的发行版本号
///@return 返回api发行版本号
virtual const char* GetApiVersion() = 0;
///获取API的系统错误
///@return 返回的错误信息,可以在Login、Logout、订阅、取消订阅失败时调用,获取失败的原因
///@remark 可以在调用api接口失败时调用,例如login失败时
virtual XTPRI *GetApiLastError() = 0;
///设置采用UDP方式连接时的单个队列接收缓冲区大小,目前可能最大使用4个缓冲区队列
///@remark 需要在Login之前调用,默认大小和最小设置均为64MB。此缓存大小单位为MB,请输入2的次方数,例如128MB请输入128。
virtual void SetUDPBufferSize(uint32_t buff_size) = 0;
///注册回调接口
///@param spi 派生自回调接口类的实例,请在登录之前设定
virtual void RegisterSpi(QuoteSpi *spi) = 0;
///设置心跳检测时间间隔,单位为秒
///@param interval 心跳检测时间间隔,单位为秒
///@remark 此函数必须在Login之前调用
virtual void SetHeartBeatInterval(uint32_t interval) = 0;
///使用UDP接收行情时,设置接收行情线程绑定的cpu,此版本不建议使用,只为跟之前的版本兼容,请替换使用SetUDPRecvThreadAffinityArray函数
///@param cpu_no 设置绑定的cpu,例如绑定cpu 0,可以设置0,绑定cpu 2,可以设置2,建议绑定后面的cpu
///@remark 此版本不建议使用,请替换使用SetUDPRecvThreadAffinityArray函数,如果调用则必须在Login之前调用,否则不会生效,与SetUDPRecvThreadAffinityArray一起使用时,仅第一个被调用的生效
virtual void SetUDPRecvThreadAffinity(int32_t cpu_no) = 0;
///使用UDP接收行情时,设置接收行情线程绑定的cpu集合
///@param cpu_no_array 设置绑定的cpu集合数组
///@param count cpu集合数组长度
///@remark 此函数可不调用,如果调用则必须在Login之前调用,否则不会生效。绑核时,将从数组前面的核开始使用
virtual void SetUDPRecvThreadAffinityArray(int32_t cpu_no_array[], int32_t count) = 0;
///使用UDP接收行情时,设置解析行情线程绑定的cpu,此版本不建议使用,只为跟之前的版本兼容,请替换使用SetUDPParseThreadAffinityArray函数
///@param cpu_no 设置绑定的cpu,例如绑定cpu 0,可以设置0,绑定cpu 2,可以设置2,建议绑定后面的cpu
///@remark 此版本不建议使用,请替换使用SetUDPParseThreadAffinityArray函数,如果调用则必须在Login之前调用,否则不会生效,与SetUDPParseThreadAffinityArray一起使用时,仅第一个被调用的生效
virtual void SetUDPParseThreadAffinity(int32_t cpu_no) = 0;
///使用UDP接收行情时,设置解析行情线程绑定的cpu集合
///@param cpu_no_array 设置绑定的cpu集合数组
///@param count cpu集合数组长度
///@remark 此函数可不调用,如果调用则必须在Login之前调用,否则不会生效。绑核时,将从数组前面的核开始使用
virtual void SetUDPParseThreadAffinityArray(int32_t cpu_no_array[], int32_t count) = 0;
///设定UDP收行情时是否输出异步日志
///@param flag 是否输出标识,默认为true,如果不想输出"udpseq"开头的异步日志,请设置此参数为false
///@remark 此函数可不调用,如果调用则必须在Login之前调用,否则不会生效
virtual void SetUDPSeqLogOutPutFlag(bool flag = true) = 0;
///订阅行情,包括股票、指数和期权。
///@return 订阅接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情
virtual int SubscribeMarketData(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///退订行情,包括股票、指数和期权。
///@return 取消订阅接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性取消订阅同一证券交易所的多个合约,需要与订阅行情接口配套使用
virtual int UnSubscribeMarketData(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///订阅行情订单簿。
///@return 订阅行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情订单簿的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情(仅支持深交所)
virtual int SubscribeOrderBook(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///退订行情订单簿。
///@return 取消订阅行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情订单簿的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性取消订阅同一证券交易所的多个合约,需要与订阅行情订单簿接口配套使用
virtual int UnSubscribeOrderBook(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///订阅逐笔行情。
///@return 订阅逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情订单簿的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情
virtual int SubscribeTickByTick(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///退订逐笔行情。
///@return 取消订阅逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要订阅/退订行情订单簿的合约个数
///@param exchange_id 交易所代码
///@remark 可以一次性取消订阅同一证券交易所的多个合约,需要与订阅逐笔行情接口配套使用
virtual int UnSubscribeTickByTick(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///订阅全市场的股票行情
///@return 订阅全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与全市场退订行情接口配套使用
virtual int SubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的股票行情
///@return 退订全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与订阅全市场行情接口配套使用
virtual int UnSubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///订阅全市场的股票行情订单簿
///@return 订阅全市场行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与全市场退订行情订单簿接口配套使用
virtual int SubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的股票行情订单簿
///@return 退订全市场行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与订阅全市场行情订单簿接口配套使用
virtual int UnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///订阅全市场的股票逐笔行情
///@return 订阅全市场逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与全市场退订逐笔行情接口配套使用
virtual int SubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的股票逐笔行情
///@return 退订全市场逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
///@remark 需要与订阅全市场逐笔行情接口配套使用
virtual int UnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///用户登录请求
///@return 登录是否成功,"0"表示登录成功,"-1"表示连接服务器出错,此时用户可以调用GetApiLastError()来获取错误代码,"-2"表示已存在连接,不允许重复登录,如果需要重连,请先logout,"-3"表示输入有错误
///@param ip 服务器ip地址,类似"127.0.0.1"
///@param port 服务器端口号
///@param user 登录用户名
///@param password 登录密码
///@param sock_type "1"代表TCP,"2"代表UDP
///@param local_ip 本地网卡地址,类似"127.0.0.1"
///@remark 此函数为同步阻塞式,不需要异步等待登录成功,当函数返回即可进行后续操作,此api只能有一个连接
virtual int Login(const char* ip, int port, const char* user, const char* password, XTP_PROTOCOL_TYPE sock_type, const char* local_ip = NULL) = 0;
///登出请求
///@return 登出是否成功,"0"表示登出成功,非"0"表示登出出错,此时用户可以调用GetApiLastError()来获取错误代码
///@remark 此函数为同步阻塞式,不需要异步等待登出,当函数返回即可进行后续操作
virtual int Logout() = 0;
///获取当前交易日合约部分静态信息
///@return 发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功
///@param exchange_id 交易所代码,必须提供 1-上海 2-深圳
virtual int QueryAllTickers(XTP_EXCHANGE_TYPE exchange_id) = 0;
///获取合约的最新价格信息
///@return 发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功
///@param ticker 合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
///@param count 要查询的合约个数
///@param exchange_id 交易所代码
virtual int QueryTickersPriceInfo(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
///获取所有合约的最新价格信息
///@return 发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功
virtual int QueryAllTickersPriceInfo() = 0;
///订阅全市场的期权行情
///@return 订阅全市期权场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与全市场退订期权行情接口配套使用
virtual int SubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的期权行情
///@return 退订全市场期权行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与订阅全市场期权行情接口配套使用
virtual int UnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///订阅全市场的期权行情订单簿(目前期权没有订单簿数据)
///@return 订阅全市场期权行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与全市场退订期权行情订单簿接口配套使用
virtual int SubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的期权行情订单簿(目前期权没有订单簿数据)
///@return 退订全市场期权行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与订阅全市场期权行情订单簿接口配套使用
virtual int UnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///订阅全市场的期权逐笔行情(目前期权没有逐笔行情数据)
///@return 订阅全市场期权逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与全市场退订期权逐笔行情接口配套使用
virtual int SubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///退订全市场的期权逐笔行情(目前期权没有逐笔行情数据)
///@return 退订全市场期权逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
///@param exchange_id 表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前新三板没有期权)
///@remark 需要与订阅全市场期权逐笔行情接口配套使用
virtual int UnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
///获取沪深两市所有合约的详细静态信息,包括指数等非可交易的
///@return 发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功
///@param exchange_id 交易所代码,必须提供 1-上海 2-深圳,不支持新三板
virtual int QueryAllTickersFullInfo(XTP_EXCHANGE_TYPE exchange_id) = 0;
///获取新三板所有合约的详细静态信息,包括指数等非可交易的
///@return 发送查询请求是否成功,“0”表示发送查询请求成功,非“0”表示发送查询请求不成功
virtual int QueryAllNQTickersFullInfo() = 0;
///用户登录回补服务器请求
///@return 登录是否成功,“0”表示登录成功,“-1”表示连接服务器出错,此时用户可以调用GetApiLastError()来获取错误代码,“-2”表示已存在连接,不允许重复登录,如果需要重连,请先logout,“-3”表示输入有错误
///@param ip 服务器ip地址,类似“127.0.0.1”
///@param port 服务器端口号
///@param user 登陆用户名
///@param password 登陆密码
///@param sock_type “1”代表TCP,“2”代表UDP
///@param local_ip 本地网卡地址,类似“127.0.0.1”
///@remark 此函数为同步阻塞式,不需要异步等待登录成功,当函数返回即可进行后续操作,此api只能有一个连接。回补服务器会在无消息交互后定时断线,请注意仅在需要回补数据时才保持连接,回补完成后请及时logout
virtual int LoginToRebuildQuoteServer(const char* ip, int port, const char* user, const char* password, XTP_PROTOCOL_TYPE sock_type, const char* local_ip = NULL) = 0;
///登出回补服务器请求
///@return 登出是否成功,“0”表示登出成功,非“0”表示登出出错,此时用户可以调用GetApiLastError()来获取错误代码
///@remark 此函数为同步阻塞式,不需要异步等待登出,当函数返回即可进行后续操作
virtual int LogoutFromRebuildQuoteServer() = 0;
///请求回补指定行情,包括快照和逐笔
///@return 请求回补指定频道的逐笔行情接口调用是否成功,“0”表示接口调用成功,非“0”表示接口调用出错
///@param rebuild_param 指定回补的参数信息,注意一次性回补最多1000个数据,超过1000需要分批次请求,一次只能指定一种类型的数据
///@remark 仅在逐笔行情丢包时或者确实快照行情时使用,回补的行情数据将从OnRebuildTickByTick或者OnRebuildMarketData()接口回调提供,与订阅的行情数据不在同一个线程内
virtual int RequestRebuildQuote(XTPQuoteRebuildReq* rebuild_param) = 0;
protected:
~QuoteApi() {};
};
}
}
2. 示例代码
以下是MyQuoteApi.h文件
#include "xtp_quote_api.h"
#include "MyQuoteSpi.h"
using namespace XTP::API;
class MyQuoteApi
{
public:
explicit MyQuoteApi();
~MyQuoteApi();
// 初始化
bool initialize();
private:
XTP::API::QuoteApi* user_quote_api_;
MyQuoteSpi* m_quote_spi;
};
以下是MyQuoteApi.cpp文件
#include "MyQuoteApi.h"
MyQuoteApi::MyQuoteApi()
{
user_quote_api_ = NULL;
m_quote_spi = NULL;
}
MyQuoteApi::~MyQuoteApi()
{
}
bool MyQuoteApi::initialize()
{
// 创建并初始化行情API
user_quote_api_ = XTP::API::QuoteApi::CreateQuoteApi(1, "./", XTP_LOG_LEVEL_DEBUG);
if (user_quote_api_)
{
// 注册行情回调接口
m_quote_spi = new MyQuoteSpi();
user_quote_api_->RegisterSpi(m_quote_spi);
// 登录前参数设置
user_quote_api_->SetHeartBeatInterval(15);
return true;
}
return false;
}
3. CreateQuoteApi
创建QuoteApi实例。
如果一个账户需要在多个客户端登录,请使用不同的client_id,系统允许一个账户同时登录多个客户端,但是对于同一账户,相同的client_id只能保持一个session连接,后面的登录在前一个session存续期间,无法连接。
2.2.33.5以上版本支持一个进程中创建多个QuoteApi实例,但是每个实例的。
1.函数原型
static QuoteApi *CreateQuoteApi(uint8_t client_id, const char *save_file_path, XTP_LOG_LEVEL log_level=XTP_LOG_LEVEL_DEBUG);
2.参数
client_id:(必须输入)客户端id,用于区分同一用户的不同客户端,由用户自定义,普通用户必须使用1-99之间的数值
save_file_path:(必须输入)存储行情api日志文件的目录,请设定一个真实存在的有可写权限的路径,如果路径不存在的话,可能会因为写冲突而造成断线
log_level:日志输出级别
3.返回
创建出的UserApi
4.调用示例
#include <iostream>
#include <cstdint>
typedef unsigned char uint8_t;
using namespace std;
// 初始化api,创建单例
uint8_t client_id_ = 1;
string stdstr_log_path("./");
// 开发调试时用XTP_LOG_LEVEL_DEBUG,稳定运行时用XTP_LOG_LEVEL_INFO
XTP_LOG_LEVEL log_level = XTP_LOG_LEVEL_DEBUG;
XTP::API::QuoteApi* user_quote_api_ = XTP::API::QuoteApi::CreateQuoteApi(client_id_, stdstr_log_path.c_str(), log_level);
if (user_quote_api_)
{
// 注册行情回调接口
MyQuoteSpi *spi = new MyQuoteSpi();
user_quote_api_->RegisterSpi(spi);
}
4. Release
删除接口对象本身。程序退出前,不再使用本接口对象时,可调用该函数删除接口对象。
1.函数原型
virtual void Release() = 0;
2.参数
无
3.返回
无
4.调用示例
// 注销当前会话并删除接口对象
if (user_quote_api_ != NULL)
{
user_quote_api_->Logout();
user_quote_api_->Release();
}
5. GetTradingDay
获取当前交易日。只有登录成功后,才能得到正确的交易日。
1.函数原型
virtual const char *GetTradingDay() = 0;
2.参数
无
3.返回
返回一个指向日期信息字符串的常量指针。
4.调用示例
// 获取当前交易日
if (user_quote_api_)
{
std::cout << "GetTradingDay : " << user_quote_api_->GetTradingDay() << std::endl;
}
6. GetApiVersion
获取API的发行版本号。
1.函数原型
virtual const char* GetApiVersion() = 0;
2.参数
无
3.返回
返回api发行版本号。
4.调用示例
// 获取API的发行版本号
if (user_quote_api_)
{
std::cout << "GetApiVersion : " << user_quote_api_->GetApiVersion() << std::endl;
}
7. GetApiLastError
获取API的系统错误。
可以在调用api接口失败时调用,例如login失败时。
1.函数原型
virtual XTPRI *GetApiLastError() = 0;
2.参数
无
3.返回
///错误信息的字符串长度
#define XTP_ERR_MSG_LEN 124
///响应信息
typedef struct XTPRspInfoStruct
{
///错误代码
int32_t error_id;
///错误信息
char error_msg[XTP_ERR_MSG_LEN];
} XTPRI;
4.调用示例
// 获取API的系统错误
if (user_quote_api_)
{
XTPRI* error_info = user_quote_api_->GetApiLastError();
std::cout << error_info->error_id << " : " << error_info->error_msg << std::endl;
}
8. SetUDPBufferSize
设置采用UDP方式连接时的单个队列接收缓冲区大小,目前可能最大使用4个缓冲区队列。
需要在Login之前调用,默认大小和最小设置均为64MB。此缓存大小单位为MB,请输入2的次方数,例如128MB请输入128,建议2.2.30.7以上版本设为256MB或者512MB。
1.函数原型
virtual void SetUDPBufferSize(uint32_t buff_size) = 0;
2.参数
无
3.返回
无
4.调用示例
// 设置采用UDP方式连接时的单个队列接收缓冲区大小为256MB
if (user_quote_api_)
{
user_quote_api_->SetUDPBufferSize(256);
}
9. RegisterSpi
注册回调接口。
1.函数原型
virtual void RegisterSpi(QuoteSpi *spi) = 0;
2.参数
spi:派生自回调接口类的实例,请在登录之前设定
3.返回
无
4.调用示例
// 注册行情回调接口
if (user_quote_api_)
{
MyQuoteSpi *spi = new MyQuoteSpi();
user_quote_api_->RegisterSpi(spi);
}
10. SetHeartBeatInterval
设置心跳检测时间间隔,单位为秒。此函数必须在Login之前调用。
1.函数原型
virtual void SetHeartBeatInterval(uint32_t interval) = 0;
2.参数
interval:心跳检测时间间隔,单位为秒
3.返回
无
4.调用示例
// 设定交易服务器超时时间为15秒,用户可自定义
if (user_quote_api_)
{
user_quote_api_->SetHeartBeatInterval(15);
}
11. SetUDPRecvThreadAffinity
使用UDP接收行情时,设置接收行情线程绑定的cpu。
2.2.30.7以上版本api请此函数,只为跟之前的版本兼容,请务必替换使用函数。 如果调用则必须在Login之前调用,否则不会生效,与SetUDPRecvThreadAffinityArray一起使用时,仅第一个被调用的生效。
1.函数原型
virtual void SetUDPRecvThreadAffinity(int32_t cpu_no) = 0;
2.参数
cpu_no:设置绑定的cpu,例如绑定cpu 1,可以设置1,绑定cpu 2,可以设置2,建议绑定后面的cpu,不要绑定cpu 0。
3.返回
无
4.调用示例
// 设置接收行情线程绑定核2
if (user_quote_api_)
{
user_quote_api_->SetUDPRecvThreadAffinity(2);
}
12. SetUDPRecvThreadAffinityArray
使用UDP接收行情时,设置接收行情线程绑定的cpu集合。
此函数可不调用,如果调用则必须在Login之前调用,否则不会生效。绑核时,将从数组前面的核开始使用。
1.函数原型
virtual void SetUDPRecvThreadAffinityArray(int32_t cpu_no_array[], int32_t count) = 0;
2.参数
cpu_no_array:设置绑定的cpu集合数组
count:cpu集合数组长度
3.返回
无
4.调用示例
// 设置接收行情线程绑定核1核2
if (user_quote_api_)
{
int32_t array[] = {1, 2};
user_quote_api_->SetUDPRecvThreadAffinityArray(array, 2);
}
13. SetUDPParseThreadAffinity
使用UDP接收行情时,设置解析行情线程绑定的cpu。
2.2.30.7以上版本api请此函数,只为跟之前的版本兼容,请务必使用函数。
如果调用则必须在Login之前调用,否则不会生效,与SetUDPParseThreadAffinityArray一起使用时,仅第一个被调用的生效。
1.函数原型
virtual void SetUDPParseThreadAffinity(int32_t cpu_no) = 0;
2.参数
cpu_no:设置绑定的cpu,例如绑定cpu 1,可以设置1,绑定cpu 2,可以设置2,建议绑定后面的cpu,不要绑定cpu 0。
3.返回
无
4.调用示例
// 设置解析行情线程绑定核3
if (user_quote_api_)
{
user_quote_api_->SetUDPParseThreadAffinity(3);
}
14. SetUDPParseThreadAffinityArray
使用UDP接收行情时,设置解析行情线程绑定的cpu集合。
此函数可不调用,如果调用则必须在Login之前调用,否则不会生效。绑核时,将从数组前面的核开始使用。
1.函数原型
virtual void SetUDPParseThreadAffinityArray(int32_t cpu_no_array[], int32_t count) = 0;
2.参数
cpu_no_array:设置绑定的cpu集合数组
count:cpu集合数组长度
3.返回
无
4.调用示例
// 设置解析行情线程绑定核3核4
if (user_quote_api_)
{
int32_t array[] = {3, 4};
user_quote_api_->SetUDPParseThreadAffinityArray(array, 2);
}
15. SetUDPSeqLogOutPutFlag
设定UDP收行情时是否输出异步日志。
此函数可不调用,如果调用则必须在Login之前调用,否则不会生效。
建议在调试和实盘初期时开启,稳定运行后可以关闭。
1.函数原型
virtual void SetUDPSeqLogOutPutFlag(bool flag = true) = 0;
2.参数
flag:是否输出标识,默认为true,如果不想输出"udpseq"开头的异步日志,请设置此参数为false
3.返回
无
4.调用示例
// 设定UDP接收行情不输出异步日志
if (user_quote_api_)
{
user_quote_api_->SetUDPSeqLogOutPutFlag(false);
}
16. SubscribeMarketData
订阅行情,包括股票、指数和期权。
可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int SubscribeMarketData(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订行情的合约个数
exchange_id:交易所代码
3.返回
订阅接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 订阅沪市的600000和600001两支股票的行情
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要订阅行情的证券代码数量,可根据实际订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//订阅沪市的600000、600001两只股票快照行情
user_quote_api_->SubscribeMarketData(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
// 释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnSubMarketData(XTPST *ticker, XTPRI *error_info, bool is_last) {};
6.通知函数
virtual void OnDepthMarketData(XTPMD *market_data, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count);
17. UnSubscribeMarketData
退订行情,包括股票、指数和期权。
可以一次性取消订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int UnSubscribeMarketData(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订行情的合约个数
exchange_id:交易所代码
3.返回
取消订阅接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 取消订阅沪市的600000和600001两支股票的行情
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要取消订阅行情的证券代码数量,可根据实际取消订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//取消订阅沪市的600000、600001两只股票快照行情
user_quote_api_->UnSubscribeMarketData(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
// 释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnUnSubMarketData(XTPST *ticker, XTPRI *error_info, bool is_last) {};
18. SubscribeOrderBook
订阅行情订单簿。
可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int SubscribeOrderBook(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订行情的合约个数
exchange_id:交易所代码,不支持新三板
3.返回
订阅行情订单簿是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 订阅沪市的600000和600001两支股票的行情订单簿
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要订阅行情的证券代码数量,可根据实际订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//订阅沪市的600000、600001两只股票订单簿行情
user_quote_api_->SubscribeOrderBook(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
// 释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnSubOrderBook(XTPST *ticker, XTPRI *error_info, bool is_last) {};
6.通知函数
virtual void OnOrderBook(XTPOB *order_book) {};
19. UnSubscribeOrderBook
取消订阅行情订单簿。
可以一次性取消订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int UnSubscribeOrderBook(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订行情的合约个数
exchange_id:交易所代码,不支持新三板
3.返回
取消订阅行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 取消订阅沪市的600000和600001两支股票的行情订单簿
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要取消订阅行情的证券代码数量,可根据实际取消订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//取消订阅沪市的600000、600001两只股票订单簿行情
user_quote_api_->UnSubscribeOrderBook(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
// 释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnUnSubOrderBook(XTPST *ticker, XTPRI *error_info, bool is_last) {};
20. SubscribeTickByTick
订阅逐笔行情。
可以一次性订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int SubscribeTickByTick(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订逐笔行情的合约个数
exchange_id:交易所代码,不支持新三板
3.返回
订阅逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 订阅沪市的600000和600001两支股票的逐笔行情
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要订阅行情的证券代码数量,可根据实际订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//订阅沪市的600000、600001两只股票逐笔行情
user_quote_api_->SubscribeTickByTick(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
// 释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnSubTickByTick(XTPST *ticker, XTPRI *error_info, bool is_last) {};
6.通知函数
virtual void OnTickByTick(XTPTBT *tbt_data);
21. UnSubscribeTickByTick
取消订阅逐笔行情。
可以一次性取消订阅同一证券交易所的多个合约,无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。
1.函数原型
virtual int UnSubscribeTickByTick(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订逐笔行情的合约个数
exchange_id:交易所代码,不支持新三板
3.返回
取消订阅逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 取消订阅沪市的600000和600001两支股票的逐笔行情
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要取消订阅行情的证券代码数量,可根据实际订阅需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
//发起取消订阅请求
int ret = user_quote_api_->UnSubscribeTickByTick(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
//释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnUnSubTickByTick(XTPST *ticker, XTPRI *error_info, bool is_last) {};
22. SubscribeAllMarketData
订阅全市场的股票行情。
需要与全市场退订行情接口配套使用。
1.函数原型
virtual int SubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
3.返回
订阅全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 订阅全市场股票行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllMarketData();
}
// 订阅沪市股票行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllMarketData(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnDepthMarketData(XTPMD *market_data, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count);
23. UnSubscribeAllMarketData
退订全市场的股票行情。
需要与全市场订阅行情接口配套使用。
1.函数原型
virtual int UnSubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板
3.返回
退订全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 退订全市场股票行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllMarketData();
}
// 退订沪市股票行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllMarketData(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
24. SubscribeAllOrderBook
订阅全市场的股票行情订单簿。
需要与全市场退订行情订单簿接口配套使用。
1.函数原型
virtual int SubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持)
3.返回
订阅全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 订阅全市场股票行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOrderBook();
}
// 订阅沪市股票行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOrderBook(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnOrderBook(XTPOB *order_book) {};
25. UnSubscribeAllOrderBook
退订全市场的股票行情订单簿。
需要与全市场订阅行情订单簿接口配套使用。
1.函数原型
virtual int UnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持)
3.返回
退订全市场行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 退订全市场股票行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOrderBook();
}
// 退订沪市股票行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOrderBook(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
26. SubscribeAllTickByTick
订阅全市场的股票逐笔行情。
需要与全市场退订逐笔行情接口配套使用。
1.函数原型
virtual int SubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持)
3.返回
订阅全市场行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 订阅全市场股票逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllTickByTick();
}
// 订阅沪市股票逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllTickByTick(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnTickByTick(XTPTBT *tbt_data);
27. UnSubscribeAllTickByTick
退订全市场的股票逐笔行情。
需要与全市场订阅逐笔行情接口配套使用。
1.函数原型
virtual int UnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持)
3.返回
退订全市场逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 退订全市场股票逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllTickByTick();
}
// 退订沪市股票逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllTickByTick(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
28. Login
用户登录请求。
此函数为同步阻塞式,不需要异步等待登录成功,当函数返回即可进行后续操作,此api只能有一个连接。
1.函数原型
virtual int Login(const char* ip, int port, const char* user, const char* password, XTP_PROTOCOL_TYPE sock_type, const char* local_ip = NULL) = 0;
2.参数
Ip:服务器ip地址,类似"127.0.0.1"
port:服务器端口号
user:登录用户名
password:登录密码
sock_type:"1"代表TCP,"2"代表UDP
local_ip:本地网卡地址,类似"127.0.0.1"
// XTP_PROTOCOL_TYPE是通讯传输协议方式
typedef enum XTP_PROTOCOL_TYPE
{
XTP_PROTOCOL_TCP = 1, ///<采用TCP方式传输
XTP_PROTOCOL_UDP ///<采用UDP方式传输(仅行情接口支持)
}XTP_PROTOCOL_TYPE;
3.返回
登陆是否成功,"0"表示登陆成功,非"0"表示登陆不成功。
4.调用示例
// 行情采用TCP方式连接
if (user_quote_api_)
{
// 登录前参数设置
user_quote_api_->SetHeartBeatInterval(15);
std::string quote_server_ip = "xxx.xxx.xxx.xxx";
int quote_server_port = xxxx;
std::string quote_username = "xxxxxxxx";
std::string quote_password = "xxxxxx";
std::string local_ip = "xxx.xxx.xxx.xxx";//根据本地网卡对应的ip设定
// 登录
int ret = user_quote_api_->Login(quote_server_ip.c_str(), quote_server_port, quote_username.c_str(), quote_password.c_str(), XTP_PROTOCOL_TCP, local_ip.c_str());
}
// 行情采用UDP方式连接
if (user_quote_api_)
{
// 登录前参数设置
user_quote_api_->SetHeartBeatInterval(15);
user_quote_api_->SetUDPBufferSize(256);
// UDP设置中绑核函数和异步日志设置函数可不调用
int32_t arr_recv[] = {1, 2};
user_quote_api_->SetUDPRecvThreadAffinityArray(arr_recv, 2);
int32_t arr_parse[] = {3, 4};
user_quote_api_->SetUDPParseThreadAffinityArray(arr_parse, 2);
user_quote_api_->SetUDPSeqLogOutPutFlag(false);
// 登录
std::string quote_server_ip = "xxx.xxx.xxx.xxx";
int quote_server_port = xxxx;
std::string quote_username = "xxxxxxxx";
std::string quote_password = "xxxxxx";
std::string local_ip = "xxx.xxx.xxx.xxx";//根据本地网卡对应的ip设定
int ret = user_quote_api_->Login(quote_server_ip.c_str(), quote_server_port, quote_username.c_str(), quote_password.c_str(), XTP_PROTOCOL_UDP, local_ip.c_str());
}
29. Logout
登出请求。此函数为同步阻塞式,不需要异步等待登出,当函数返回即可进行后续操作。
1.函数原型
virtual int Logout() = 0;
2.参数
无
3.返回
登出是否成功,"0"表示登出成功,非"0"表示登出出错,此时用户可以调用GetApiLastError()来获取错误代码。
4.调用示例
// 登出请求
if (user_quote_api_) {
int ret = user_quote_api_->Logout();
}
30. QueryAllTickers
获取沪深当前交易日合约部分静态信息。
1.函数原型
virtual int QueryAllTickers(XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
exchange_id:交易所代码,必须提供 1-上海 2-深圳,不支持新三板
3.返回
发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功。
4.调用示例
// 获取当前交易日沪市所有合约静态信息
if (user_quote_api_) {
int ret = user_quote_api_->QueryAllTickers(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnQueryAllTickers(XTPQSI* ticker_info, XTPRI *error_info, bool is_last) {};
31. QueryTickersPriceInfo
获取合约的最新价格信息。
1.函数原型
virtual int QueryTickersPriceInfo(char *ticker[], int count, XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
ticker:合约ID数组,注意合约代码必须以'\0'结尾,不包含空格
count:要订阅/退订逐笔行情的合约个数
exchange_id:交易所代码
3.返回
发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功。
4.调用示例
// 获取沪市的600000和600001两支股票的最新价格信息
if (user_quote_api_)
{
// 申请内存
int ticker_count = 2;//需要查询的证券代码数量,可根据实际需求改动
char **ppInstrumentID = new char*[ticker_count];
for (int i = 0; i < ticker_count; i++)
{
ppInstrumentID[i] = new char[XTP_TICKER_LEN];
}
strcpy_s(ppInstrumentID[0], XTP_TICKER_LEN, "600000");
strcpy_s(ppInstrumentID[1], XTP_TICKER_LEN, "600001");
// 发送查询请求
int ret = user_quote_api_->QueryTickersPriceInfo(ppInstrumentID, ticker_count, XTP_EXCHANGE_SH);
//释放内存
for (int i = 0; i < ticker_count; i++) {
delete[] ppInstrumentID[i];
ppInstrumentID[i] = NULL;
}
delete[] ppInstrumentID;
ppInstrumentID = NULL;
}
5.响应函数
virtual void OnQueryTickersPriceInfo(XTPTPI* ticker_info, XTPRI *error_info, bool is_last) {};
32. QueryAllTickersPriceInfo
获取所有合约的最新价格信息。
1.函数原型
virtual int QueryAllTickersPriceInfo() = 0;
2.参数
无
3.返回
发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功。
4.调用示例
// 获取所有合约的最新价格信息
if (user_quote_api_) {
int ret = user_quote_api_->QueryAllTickersPriceInfo();
}
5.响应函数
virtual void OnQueryTickersPriceInfo(XTPTPI* ticker_info, XTPRI *error_info, bool is_last) {};
33. SubscribeAllOptionMarketData
订阅全市场的期权行情快照。
需要与全市场退订期权行情快照接口配套使用。
1.函数原型
virtual int SubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
订阅全市场期权行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 订阅全市场期权行情快照
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionMarketData();
}
// 订阅沪市期权行情快照
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionMarketData(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnDepthMarketData(XTPMD *market_data, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count);
34. UnSubscribeAllOptionMarketData
退订期权行情快照。
需要与订阅全市场期权行情接口配套使用。
1.函数原型
virtual int UnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
取消订阅接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 退订全市场期权行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionMarketData();
}
// 退订沪市期权行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionMarketData(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
35. SubscribeAllOptionOrderBook
全市场订阅期权行情订单簿。
需要与全市场退订期权行情订单簿接口配套使用。 目前期权没有OB数据。
1.函数原型
virtual int SubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
订阅行情订单簿是否成功,"0"表示接口调用成功,非"0"表示接口调用出错
4.调用示例
// 订阅全市场期权行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionOrderBook();
}
// 订阅沪市期权行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionOrderBook(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnOrderBook(XTPOB *order_book) {};
36. UnSubscribeAllOptionOrderBook
退订全市场的期权行情订单簿。
需要与全市场订阅期权行情订单簿接口配套使用。
目前期权没有OB数据。
1.函数原型
virtual int UnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
退订全市场行情订单簿接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 退订全市场期权行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionOrderBook();
}
// 退订沪市期权行情订单簿
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionOrderBook(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
37. SubscribeAllOptionTickByTick
订阅全市场的期权逐笔行情。
需要与全市场退订期权逐笔行情接口配套使用。
目前期权没有逐笔TBT数据。
1.函数原型
virtual int SubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前全订阅的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
订阅全市场期权逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 订阅全市场期权逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionTickByTick();
}
// 订阅沪市期权逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->SubscribeAllOptionTickByTick(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
6.通知函数
virtual void OnTickByTick(XTPTBT *tbt_data);
38. UnSubscribeAllOptionTickByTick
退订全市场的期权逐笔行情。
需要与全市场期权订阅逐笔行情接口配套使用。
目前期权没有逐笔TBT数据。
1.函数原型
virtual int UnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id = XTP_EXCHANGE_UNKNOWN) = 0;
2.参数
exchange_id:表示当前退订的市场,如果为XTP_EXCHANGE_UNKNOWN,表示沪深全市场(不包括新三板),XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场,XTP_EXCHANGE_NQ表示新三板(目前不支持新三板)
3.返回
退订全市场期权逐笔行情接口调用是否成功,"0"表示接口调用成功,非"0"表示接口调用出错。
4.调用示例
// 退订全市场期权逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionTickByTick();
}
// 退订沪市期权逐笔行情
if (user_quote_api_)
{
int ret = user_quote_api_->UnSubscribeAllOptionTickByTick(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnUnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) {};
39. QueryAllTickersFullInfo
获取沪深所有合约的详细静态信息,包括指数等非可交易的。沪深两市需分市场分别查询。
1.函数原型
virtual int QueryAllTickersFullInfo(XTP_EXCHANGE_TYPE exchange_id) = 0;
2.参数
exchange_id:交易所代码,必须提供,XTP_EXCHANGE_SH表示为上海全市场,XTP_EXCHANGE_SZ表示为深圳全市场(目前不支持新三板)
3.返回
发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功。
4.调用示例
// 获取沪市所有合约的详细静态信息
if (user_quote_api_)
{
int ret = user_quote_api_->QueryAllTickersFullInfo(XTP_EXCHANGE_SH);
}
5.响应函数
virtual void OnQueryAllTickersFullInfo(XTPQFI* ticker_info, XTPRI *error_info, bool is_last) {};
40. LoginToRebuildQuoteServer
用户登录回补服务器请求。
此函数为同步阻塞式,不需要异步等待登录成功,当函数返回即可进行后续操作,此api只能有一个连接。
回补服务器会在无消息交互后定时断线,请注意仅在需要回补数据时才保持连接,回补完成后请及时logout.
1.函数原型
virtual int LoginToRebuildQuoteServer(const char* ip, int port, const char* user, const char* password, XTP_PROTOCOL_TYPE sock_type, const char* local_ip = NULL) = 0;
2.参数
Ip:服务器ip地址,类似"127.0.0.1"
port:服务器端口号
user:登录用户名
password:登录密码
sock_type:"1"代表TCP,"2"代表UDP
local_ip:本地网卡地址,类似"127.0.0.1"
// XTP_PROTOCOL_TYPE是通讯传输协议方式
typedef enum XTP_PROTOCOL_TYPE
{
XTP_PROTOCOL_TCP = 1, ///<采用TCP方式传输
XTP_PROTOCOL_UDP ///<采用UDP方式传输(仅行情接口支持)
}XTP_PROTOCOL_TYPE;
3.返回
登陆是否成功,"0"表示登陆成功,“-1”表示连接服务器出错,此时用户可以调用GetApiLastError()来获取错误代码,“-2”表示已存在连接,不允许重复登录,如果需要重连,请先logout,“-3”表示输入有错误。
4.调用示例
// 行情采用TCP方式连接
if (user_quote_api_)
{
// 登录前参数设置
user_quote_api_->SetHeartBeatInterval(15);
std::string quote_server_ip = "xxx.xxx.xxx.xxx";
int quote_server_port = xxxx;
std::string quote_username = "xxxxxxxx";
std::string quote_password = "xxxxxx";
// 登录
int ret = user_quote_api_->LoginToRebuildQuoteServer(quote_server_ip.c_str(), quote_server_port, quote_username.c_str(), quote_password.c_str(), XTP_PROTOCOL_TCP);
}
// 行情采用UDP方式连接
if (user_quote_api_)
{
// 登录前参数设置
user_quote_api_->SetHeartBeatInterval(15);
user_quote_api_->SetUDPBufferSize(256);
// UDP设置中绑核函数和异步日志设置函数可不调用
int32_t arr_recv[] = {1, 2};
user_quote_api_->SetUDPRecvThreadAffinityArray(arr_recv, 2);
int32_t arr_parse[] = {3, 4};
user_quote_api_->SetUDPParseThreadAffinityArray(arr_parse, 2);
user_quote_api_->SetUDPSeqLogOutPutFlag(false);
// 登录
std::string quote_server_ip = "xxx.xxx.xxx.xxx";
int quote_server_port = xxxx;
std::string quote_username = "xxxxxxxx";
std::string quote_password = "xxxxxx";
int ret = user_quote_api_->LoginToRebuildQuoteServer(quote_server_ip.c_str(), quote_server_port, quote_username.c_str(), quote_password.c_str(), XTP_PROTOCOL_UDP);
}
41. LogoutFromRebuildQuoteServer
登出回补服务器请求。
此函数为同步阻塞式,不需要异步等待登出,当函数返回即可进行后续操作。
1.函数原型
virtual int LogoutFromRebuildQuoteServer() = 0;
2.参数
无
3.返回
登出是否成功,"0"表示登出成功,非"0"表示登出出错,此时用户可以调用GetApiLastError()来获取错误代码。
4.调用示例
// 登出请求
if (user_quote_api_) {
int ret = user_quote_api_->LogoutFromRebuildQuoteServer();
}
42. RequestRebuildQuote
请求回补指定行情,包括快照和逐笔。
仅在逐笔行情丢包时或者确实快照行情时使用,回补的行情数据将从OnRebuildTickByTick或者OnRebuildMarketData()接口回调提供,与订阅的行情数据不在同一个线程内。
1.函数原型
virtual int RequestRebuildQuote(XTPQuoteRebuildReq* rebuild_param) = 0;
2.参数
rebuild_param:指定回补的参数信息,注意一次性回补最多1000个数据,超过1000需要分批次请求,一次只能指定一种类型的数据
///实时行情回补请求结构体
typedef struct XTPQuoteRebuildReq
{
///请求id 请求端自行管理定义
int32_t request_id;
///请求数据类型 1-快照 2-逐笔
XTP_QUOTE_REBUILD_DATA_TYPE data_type;
///请求市场 1-上海 2-深圳
XTP_EXCHANGE_TYPE exchange_id;
///合约代码 以'\0'结尾 沪深A股6位 期权8位
char ticker[16];
///data_type=逐笔 表示逐笔通道号
int16_t channel_number;
///data_type=逐笔 表示序列号begin; =快照 表示时间begin(格式为YYYYMMDDHHMMSSsss)
int64_t begin;
///data_type=逐笔 表示序列号end; =快照 表示时间end(格式为YYYYMMDDHHMMSSsss) 逐笔区间:[begin, end]前后闭区间 快照区间:[begin, end) 前闭后开区间
int64_t end;
}XTPQuoteRebuildReq;
///XTP_QUOTE_DATA_TYPE是行情数据类型 逐笔,快照等
typedef enum XTP_QUOTE_REBUILD_DATA_TYPE {
XTP_QUOTE_REBUILD_UNKNOW = 0, ///<未知类型
XTP_QUOTE_REBUILD_MD = 1, ///<快照类型
XTP_QUOTE_REBUILD_TBT = 2, ///<逐笔类型
}XTP_QUOTE_REBUILD_DATA_TYPE;
3.返回
请求回补指定频道的逐笔行情接口调用是否成功,“0”表示接口调用成功,非“0”表示接口调用出错。
4.调用示例
// 请求回补上证600000股票的快照
if (user_quote_api_)
{
XTPQuoteRebuildReq* rebuild_param;
rebuild_param->request_id = 100;
rebuild_param->data_type = XTP_QUOTE_REBUILD_MD;
rebuild_param->exchange_id = XTP_EXCHANGE_SH;
std::string stdstr_ticker = "600000";
strncpy(rebuild_param->ticker, stdstr_ticker.c_str(), XTP_TICKER_LEN);
int ret = user_quote_api_->RequestRebuildQuote(rebuild_param, session_id);
}
5.响应函数
///请求回补指定频道的逐笔行情的总体结果应答
virtual void OnRequestRebuildQuote(XTPQuoteRebuildResultRsp* rebuild_result) {};
///回补的逐笔行情数据
virtual void OnRebuildTickByTick(XTPTBT *tbt_data) {};
///回补的快照行情数据
virtual void OnRebuildMarketData(XTPMD *md_data) {};
43. QueryAllNQTickersFullInfo
获取新三板所有合约的详细静态信息,包括指数等非可交易的。
此函数仅可在成功登陆新三板行情服务器后使用,如果在沪深行情服务器上使用,将得不到响应。
1.函数原型
virtual int QueryAllNQTickersFullInfo() = 0;
2.参数
无
3.返回
发送查询请求是否成功,"0"表示发送查询请求成功,非"0"表示发送查询请求不成功。
4.调用示例
// 获取新三板所有合约的详细静态信息
if (user_quote_api_)
{
int ret = user_quote_api_->QueryAllNQTickersFullInfo();
}
5.响应函数
virtual void OnQueryAllNQTickersFullInfo(XTPNQFI* ticker_info, XTPRI *error_info, bool is_last) {};