TraderSpi
- 1. 接口
- 2. 代码示例
- 3. OnDisconnected
- 4. OnError
- 5. OnQueryAccountTradeMarket
- 6. OnOrderEvent
- 7. OnTradeEvent
- 8. OnCancelOrderError
- 9. OnQueryOrder
- 10. OnQueryOrderEx
- 11. OnQueryOrderByPage
- 12. OnQueryOrderByPageEx
- 13. OnQueryTrade
- 14. OnQueryTradeByPage
- 15. OnQueryPosition
- 16. OnQueryAsset
- 17. OnQueryStructuredFund
- 18. OnQueryFundTransfer
- 19. OnFundTransfer
- 20. OnQueryOtherServerFund
- 21. OnQueryETF
- 22. OnQueryETFBasket
- 23. OnQueryIPOInfoList
- 24. OnQueryIPOQuotaInfo
- 25. OnQueryBondIPOInfoList
- 26. OnQueryBondSwapStockInfo
- 27. OnQueryOptionAuctionInfo
- 28. OnCreditCashRepay
- 29. OnCreditCashRepayDebtInterestFee
- 30. OnQueryCreditCashRepayInfo
- 31. OnQueryCreditFundInfo
- 32. OnQueryCreditDebtInfo
- 33. OnQueryCreditTickerDebtInfo
- 34. OnQueryCreditAssetDebtInfo
- 35. OnQueryCreditTickerAssignInfo
- 36. OnQueryCreditExcessStock
- 37. OnQueryMulCreditExcessStock
- 38. OnCreditExtendDebtDate
- 39. OnQueryCreditExtendDebtDateOrders
- 40. OnQueryCreditFundExtraInfo
- 41. OnQueryCreditPositionExtraInfo
- 42. OnOptionCombinedOrderEvent
- 43. OnOptionCombinedTradeEvent
- 44. OnCancelOptionCombinedOrderError
- 45. OnQueryOptionCombinedOrders
- 46. OnQueryOptionCombinedOrdersEx
- 47. OnQueryOptionCombinedOrdersByPage
- 48. OnQueryOptionCombinedOrdersByPageEx
- 49. OnQueryOptionCombinedTrades
- 50. OnQueryOptionCombinedTradesByPage
- 51. OnQueryOptionCombinedPosition
- 52. OnQueryOptionCombinedStrategyInfo
- 53. OnQueryOptionCombinedExecPosition
- 54. OnQueryStrategy
- 55. OnStrategyStateReport
- 56. OnALGOUserEstablishChannel
- 57. OnInsertAlgoOrder
- 58. OnCancelAlgoOrder
- 59. OnAlgoDisconnected
- 60. OnAlgoConnected
- 61. OnStrategySymbolStateReport
- 62. OnNewStrategyCreateReport
- 63. OnStrategyRecommendation
- 64. OnModifyAlgoOrder
TraderSpi类提供了交易相关的回调接口,用户需要继承该类并重写这些接口,以获取响应数据。
1. 接口
namespace XTP {
namespace API {
class TraderSpi
{
public:
///当客户端的某个连接与交易后台通信连接断开时,该方法被调用。
///@param reason 错误原因,请与错误代码表对应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 用户主动调用logout导致的断线,不会触发此函数。api不会自动重连,当断线发生时,请用户自行选择后续操作,可以在此函数中调用Login重新登录,并更新session_id,此时用户收到的数据跟断线之前是连续的
virtual void OnDisconnected(uint64_t session_id, int reason) {};
///错误应答
///@param error_info 当服务器响应发生错误时的具体的错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@remark 此函数只有在服务器发生错误时才会调用,一般无需用户处理
virtual void OnError(XTPRI *error_info) {};
///请求查询用户在本节点上可交易市场的响应
///@param trade_location 查询到的交易市场信息,按位来看,从低位开始数,第0位表示沪市,即如果(trade_location&0x01) == 0x01,代表可交易沪市,第1位表示深市,即如果(trade_location&0x02) == 0x02,表示可交易深市,如果第0位和第1位均是1,即(trade_location&(0x01|0x02)) == 0x03,就表示可交易沪深2个市场
///@param error_info 查询可交易市场发生错误时,返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 此查询只会有一个结果
virtual void OnQueryAccountTradeMarket(int trade_location, XTPRI *error_info, int request_id, uint64_t session_id) {};
///报单通知
///@param order_info 订单响应具体信息,用户可以通过order_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单,order_info.qty_left字段在订单为未成交、部成、全成、废单状态时,表示此订单还没有成交的数量,在部撤、全撤状态时,表示此订单被撤的数量。order_info.order_cancel_xtp_id为其所对应的撤单ID,不为0时表示此单被撤成功
///@param error_info 订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 每次订单状态更新时,都会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,在订单未成交、全部成交、全部撤单、部分撤单、已拒绝这些状态时会有响应,对于部分成交的情况,请由订单的成交回报来自行确认。所有登录了此用户的客户端都将收到此用户的订单响应
virtual void OnOrderEvent(XTPOrderInfo *order_info, XTPRI *error_info, uint64_t session_id) {};
///成交通知
///@param trade_info 成交回报的具体信息,用户可以通过trade_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。对于上交所,exec_id可以唯一标识一笔成交。当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交了。对于深交所,exec_id是唯一的,暂时无此判断机制。report_index+market字段可以组成唯一标识表示成交回报。
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 订单有成交发生的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的成交回报。相关订单为部成状态,需要用户通过成交回报的成交数量来确定,OnOrderEvent()不会推送部成状态。
virtual void OnTradeEvent(XTPTradeReport *trade_info, uint64_t session_id) {};
///撤单出错响应
///@param cancel_info 撤单具体信息,包括撤单的order_cancel_xtp_id和待撤单的order_xtp_id
///@param error_info 撤单被拒绝或者发生错误时错误代码和错误信息,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 此响应只会在撤单发生错误时被回调
virtual void OnCancelOrderError(XTPOrderCancelInfo *cancel_info, XTPRI *error_info, uint64_t session_id) {};
///请求查询报单响应-旧版本接口
///@param order_info 查询到的一个报单
///@param error_info 查询报单时发生错误时,返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线
virtual void OnQueryOrder(XTPQueryOrderRsp *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询报单响应-新版本接口
///@param order_info 查询到的一个报单信息
///@param error_info 查询报单时发生错误时,返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryOrderEx(XTPOrderInfoEx *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询报单响应-旧版本接口
///@param order_info 查询到的一个报单
///@param req_count 分页请求的最大数量
///@param order_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOrderByPage(XTPQueryOrderRsp *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询报单响应-新版本接口
///@param order_info 查询到的一个报单
///@param req_count 分页请求的最大数量
///@param order_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOrderByPageEx(XTPOrderInfoEx *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///请求查询成交响应
///@param trade_info 查询到的一个成交回报
///@param error_info 查询成交回报发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线
virtual void OnQueryTrade(XTPQueryTradeRsp *trade_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询成交响应
///@param trade_info 查询到的一个成交信息
///@param req_count 分页请求的最大数量
///@param trade_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当trade_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果trade_sequence等于req_count,那么表示还有回报,可以进行下一次分页查询,如果不等,表示所有回报已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryTradeByPage(XTPQueryTradeRsp *trade_info, int64_t req_count, int64_t trade_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///请求查询投资者持仓响应
///@param position 查询到的一只股票的持仓情况
///@param error_info 查询账户持仓发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于用户可能持有多个股票,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryPosition(XTPQueryStkPositionRsp *position, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询资金账户响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param asset 查询到的资金账户情况
///@param error_info 查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryAsset(XTPQueryAssetRsp *asset, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询分级基金信息响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_info 查询到的分级基金情况
///@param error_info 查询分级基金发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryStructuredFund(XTPStructuredFundInfo *fund_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询资金划拨订单响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_transfer_info 查询到的资金账户情况
///@param error_info 查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryFundTransfer(XTPFundTransferNotice *fund_transfer_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///资金划拨通知
///@param fund_transfer_info 资金划拨通知的具体信息,用户可以通过fund_transfer_info.serial_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。
///@param error_info 资金划拨订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误。当资金划拨方向为一号两中心节点之间划拨,且error_info.error_id=11000384时,error_info.error_msg中含有对方结点中可用于划拨的资金(以整数为准),用户需解析后进行stringToInt的转化,可据此填写合适的资金,再次发起划拨请求
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当资金划拨订单有状态变化的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的资金划拨通知。
virtual void OnFundTransfer(XTPFundTransferNotice *fund_transfer_info, XTPRI *error_info, uint64_t session_id) {};
///请求查询其他节点可用资金的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_info 查询到的其他节点可用资金情况
///@param error_info 查询其他节点可用资金发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryOtherServerFund(XTPFundQueryRsp *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
///请求查询ETF清单文件的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param etf_info 查询到的ETF清单文件情况
///@param error_info 查询ETF清单文件发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryETF(XTPQueryETFBaseRsp *etf_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询ETF股票篮的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param etf_component_info 查询到的ETF合约的相关成分股信息
///@param error_info 查询ETF股票篮发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryETFBasket(XTPQueryETFComponentRsp *etf_component_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询今日新股申购信息列表的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param ipo_info 查询到的今日新股申购的一只股票信息
///@param error_info 查询今日新股申购信息列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryIPOInfoList(XTPQueryIPOTickerRsp *ipo_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询用户新股申购额度信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param quota_info 查询到的用户某个市场的今日新股申购额度信息
///@param error_info 查查询用户新股申购额度信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryIPOQuotaInfo(XTPQueryIPOQuotaRsp *quota_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询今日可转债申购信息列表的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param ipo_info 查询到的今日可转债申购的一只可转债信息
///@param error_info 查询今日可转债申购信息列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryBondIPOInfoList(XTPQueryIPOTickerRsp *ipo_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询用户可转债转股信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param swap_stock_info 查询到某条可转债转股信息
///@param error_info 查查询可转债转股信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryBondSwapStockInfo(XTPQueryBondSwapStockRsp *swap_stock_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询期权合约的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param option_info 查询到的期权合约情况
///@param error_info 查询期权合约发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryOptionAuctionInfo(XTPQueryOptionAuctionInfoRsp *option_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///融资融券业务中现金直接还款的响应
///@param cash_repay_info 现金直接还款通知的具体信息,用户可以通过cash_repay_info.xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。
///@param error_info 现金还款发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnCreditCashRepay(XTPCrdCashRepayRsp *cash_repay_info, XTPRI *error_info, uint64_t session_id) {};
///融资融券业务中现金还息的响应
///@param cash_repay_info 现金还息通知的具体信息,用户可以通过cash_repay_info.xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。
///@param error_info 现金还息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnCreditCashRepayDebtInterestFee(XTPCrdCashRepayDebtInterestFeeRsp *cash_repay_info, XTPRI *error_info, uint64_t session_id) {};
///请求查询融资融券业务中的现金直接还款报单的响应
///@param cash_repay_info 查询到的某一笔现金直接还款通知的具体信息
///@param error_info 查询现金直接报单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditCashRepayInfo(XTPCrdCashRepayInfo *cash_repay_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询信用账户额外信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_info 查询到的信用账户额外信息情况
///@param error_info 查询信用账户额外信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditFundInfo(XTPCrdFundInfo *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
///请求查询信用账户负债信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param debt_info 查询到的信用账户合约负债情况
///@param error_info 查询信用账户负债信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditDebtInfo(XTPCrdDebtInfo *debt_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询信用账户指定证券负债未还信息响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param debt_info 查询到的信用账户指定证券负债未还信息情况
///@param error_info 查询信用账户指定证券负债未还信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditTickerDebtInfo(XTPCrdDebtStockInfo *debt_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询信用账户待还资金的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param remain_amount 查询到的信用账户待还资金
///@param error_info 查询信用账户待还资金发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditAssetDebtInfo(double remain_amount, XTPRI *error_info, int request_id, uint64_t session_id) {};
///请求查询信用账户可融券头寸信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param assign_info 查询到的信用账户可融券头寸信息
///@param error_info 查询信用账户可融券头寸信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditTickerAssignInfo(XTPClientQueryCrdPositionStkInfo *assign_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///融资融券业务中请求查询指定余券信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param stock_info 查询到的余券信息
///@param error_info 查询信用账户余券信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditExcessStock(XTPClientQueryCrdSurplusStkRspInfo* stock_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
///融资融券业务中请求查询余券信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param stock_info 查询到的余券信息
///@param error_info 查询信用账户余券信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryMulCreditExcessStock(XTPClientQueryCrdSurplusStkRspInfo* stock_info, XTPRI *error_info, int request_id, uint64_t session_id, bool is_last) {};
///融资融券业务中负债合约展期的通知
///@param debt_extend_info 负债合约展期通知的具体信息,用户可以通过debt_extend_info.xtpid来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。
///@param error_info 负债合约展期订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误。
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当负债合约展期订单有状态变化的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的负债合约展期通知。
virtual void OnCreditExtendDebtDate(XTPCreditDebtExtendNotice *debt_extend_info, XTPRI *error_info, uint64_t session_id) {};
///查询融资融券业务中负债合约展期订单响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param debt_extend_info 查询到的负债合约展期情况
///@param error_info 查询负债合约展期发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误。当error_info.error_id=11000350时,表明没有记录,当为其他非0值时,表明合约发生拒单时的错误原因
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditExtendDebtDateOrders(XTPCreditDebtExtendNotice *debt_extend_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///查询融资融券业务中信用账户附加信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_info 信用账户附加信息
///@param error_info 查询信用账户附加信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditFundExtraInfo(XTPCrdFundExtraInfo *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
///查询融资融券业务中信用账户指定证券的附加信息的响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
///@param fund_info 信用账户指定证券的附加信息
///@param error_info 查询信用账户附加信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryCreditPositionExtraInfo(XTPCrdPositionExtraInfo *fund_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///期权组合策略报单通知
///@param order_info 订单响应具体信息,用户可以通过order_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单,order_info.qty_left字段在订单为未成交、部成、全成、废单状态时,表示此订单还没有成交的数量,在部撤、全撤状态时,表示此订单被撤的数量。order_info.order_cancel_xtp_id为其所对应的撤单ID,不为0时表示此单被撤成功
///@param error_info 订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 每次订单状态更新时,都会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,在订单未成交、全部成交、全部撤单、部分撤单、已拒绝这些状态时会有响应,对于部分成交的情况,请由订单的成交回报来自行确认。所有登录了此用户的客户端都将收到此用户的订单响应
virtual void OnOptionCombinedOrderEvent(XTPOptCombOrderInfo *order_info, XTPRI *error_info, uint64_t session_id) {};
///期权组合策略成交通知
///@param trade_info 成交回报的具体信息,用户可以通过trade_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。对于上交所,exec_id可以唯一标识一笔成交。当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交了。对于深交所,exec_id是唯一的,暂时无此判断机制。report_index+market字段可以组成唯一标识表示成交回报。
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 订单有成交发生的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的成交回报。相关订单为部成状态,需要用户通过成交回报的成交数量来确定,OnOrderEvent()不会推送部成状态。
virtual void OnOptionCombinedTradeEvent(XTPOptCombTradeReport *trade_info, uint64_t session_id) {};
///期权组合策略撤单出错响应
///@param cancel_info 撤单具体信息,包括撤单的order_cancel_xtp_id和待撤单的order_xtp_id
///@param error_info 撤单被拒绝或者发生错误时错误代码和错误信息,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 此响应只会在撤单发生错误时被回调
virtual void OnCancelOptionCombinedOrderError(XTPOptCombOrderCancelInfo *cancel_info, XTPRI *error_info, uint64_t session_id) {};
///请求查询期权组合策略报单响应-旧版本接口
///@param order_info 查询到的一个报单
///@param error_info 查询报单时发生错误时,返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线
virtual void OnQueryOptionCombinedOrders(XTPQueryOptCombOrderRsp *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询期权组合策略报单响应-新版本接口
///@param order_info 查询到的一个报单
///@param error_info 查询报单时发生错误时,返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线
virtual void OnQueryOptionCombinedOrdersEx(XTPOptCombOrderInfoEx *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询期权组合策略报单响应-旧版本接口
///@param order_info 查询到的一个报单
///@param req_count 分页请求的最大数量
///@param order_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedOrdersByPage(XTPQueryOptCombOrderRsp *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询期权组合策略报单响应-新版本接口
///@param order_info 查询到的一个报单
///@param req_count 分页请求的最大数量
///@param order_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedOrdersByPageEx(XTPOptCombOrderInfoEx *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///请求查询期权组合策略成交响应
///@param trade_info 查询到的一个成交回报
///@param error_info 查询成交回报发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线
virtual void OnQueryOptionCombinedTrades(XTPQueryOptCombTradeRsp *trade_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///分页请求查询期权组合策略成交响应
///@param trade_info 查询到的一个成交信息
///@param req_count 分页请求的最大数量
///@param trade_sequence 分页请求的当前回报数量
///@param query_reference 当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 当trade_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果trade_sequence等于req_count,那么表示还有回报,可以进行下一次分页查询,如果不等,表示所有回报已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedTradesByPage(XTPQueryOptCombTradeRsp *trade_info, int64_t req_count, int64_t trade_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
///请求查询期权组合策略持仓响应
///@param position_info 查询到的一个持仓信息
///@param error_info 查询持仓发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedPosition(XTPQueryOptCombPositionRsp *position_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///请求查询期权组合策略信息响应
///@param strategy_info 查询到的一个组合策略信息
///@param error_info 查询成交回报发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedStrategyInfo(XTPQueryCombineStrategyInfoRsp *strategy_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///查询期权行权合并头寸的响应
///@param position_info 查询到的一个行权合并头寸信息
///@param error_info 查询持仓发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
virtual void OnQueryOptionCombinedExecPosition(XTPQueryOptCombExecPosRsp *position_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
///algo业务中查询策略列表的响应
///@param strategy_info 策略具体信息
///@param strategy_param 此策略中包含的参数,如果error_info.error_id为0时,有意义
///@param error_info 查询查询策略列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnQueryStrategy(XTPStrategyInfoStruct* strategy_info, char* strategy_param, XTPRI *error_info, int32_t request_id, bool is_last, uint64_t session_id) {};
///algo业务中策略运行时策略状态通知
///@param strategy_state 用户策略运行情况的状态通知
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnStrategyStateReport(XTPStrategyStateReportStruct* strategy_state, uint64_t session_id) {};
///algo业务中用户建立算法通道的消息响应
///@param user 用户名
///@param error_info 建立算法通道发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误,即算法通道成功
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 算法通道建立成功后,才能对用户创建策略等操作,一个用户只能拥有一个算法通道,如果之前已经建立,则无需重复建立
virtual void OnALGOUserEstablishChannel(char* user, XTPRI* error_info, uint64_t session_id) {};
///algo业务中报送策略单的响应
///@param strategy_info 用户报送的策略单的具体信息
///@param error_info 报送策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnInsertAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
///algo业务中撤销策略单的响应
///@param strategy_info 用户撤销的策略单的具体信息
///@param error_info 撤销策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnCancelAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
///当客户端与AlgoBus通信连接断开时,该方法被调用。
///@param reason 错误原因,请与错误代码表对应
///@remark 请不要堵塞此线程,否则会影响algo的登录,与Algo之间的连接,断线后会自动重连,用户无需做其他操作
virtual void OnAlgoDisconnected(int reason) {};
///当客户端与AlgoBus断线后重新连接时,该方法被调用,仅在断线重连成功后会被调用。
virtual void OnAlgoConnected() {};
///algo业务中策略运行时策略指定证券执行状态通知
///@param strategy_symbol_state 用户策略指定证券运行情况的状态通知
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnStrategySymbolStateReport(XTPStrategySymbolStateReport* strategy_symbol_state, uint64_t session_id) {};
///algo业务中报送母单创建时的推送消息(包括其他客户端创建的母单)
///@param strategy_info 策略具体信息
///@param strategy_param 此策略中包含的参数
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnNewStrategyCreateReport(XTPStrategyInfoStruct* strategy_info, char* strategy_param, uint64_t session_id) {};
///algo业务中算法推荐的响应
///@param basket_flag 是否将满足条件的推荐结果打包成母单篮的标志,与请求一致,如果此参数为true,那么请以返回的strategy_param为准
///@param recommendation_info 推荐算法的具体信息,当basket_flag=true时,此结构体中的market和ticker将没有意义,此时请以strategy_param为准
///@param strategy_param 算法参数,可直接用来创建母单,如果error_info.error_id为0时,有意义
///@param error_info 请求推荐算法发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param request_id 此消息响应函数对应的请求ID
///@param is_last 此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnStrategyRecommendation(bool basket_flag, XTPStrategyRecommendationInfo* recommendation_info, char* strategy_param, XTPRI *error_info, int32_t request_id, bool is_last, uint64_t session_id) {};
///algo业务中修改已有策略单的响应
///@param strategy_info 用户修改后策略单的具体信息
///@param error_info 修改策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///@param session_id 资金账户对应的session_id,登录时得到
///@remark 需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线
virtual void OnModifyAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
};
}
}
2. 代码示例
MyTraderSpi继承TraderSpi 以下是MyTraderSpi.h文件
#include "xtp_trader_api.h"
using namespace XTP::API;
class MyTraderSpi : public TraderSpi
{
public:
explicit MyTraderSpi();
~MyTraderSpi();
// 查询报单响应
void OnQueryOrder(XTPOrderInfo *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id);
// 报单通知
void OnOrderEvent(XTPOrderInfo *order_info, XTPRI *error_info, uint64_t session_id);
// 成交通知
void OnTradeEvent(XTPTradeReport *trade_info, uint64_t session_id);
};
以下是MyTraderSpi.cpp文件
#include "MyTraderSpi.h"
MyTraderSpi::MyTraderSpi() { }
MyTraderSpi::~MyTraderSpi() { }
// 查询报单响应
void MyTraderSpi::OnQueryOrder(XTPOrderInfo *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id)
{
std::cout << "OnQueryOrder." << std::endl;
}
// 报单通知
void MyTraderSpi::OnOrderEvent(XTPOrderInfo *order_info, XTPRI *error_info, uint64_t session_id)
{
std::cout << "OnOrderEvent." << std::endl;
}
// 成交通知
void MyTraderSpi::OnTradeEvent(XTPTradeReport *trade_info, uint64_t session_id)
{
std::cout << "OnTradeEvent." << std::endl;
}
3. OnDisconnected
当客户端的某个连接与交易后台通信连接断开时,该方法被调用。
用户主动调用logout导致的断线,不会触发此函数。api不会自动重连,当断线发生时,请用户自行选择后续操作,可以在此函数中调用Login重新登录,并更新session_id,此时用户收到的数据跟断线之前是连续的。
1.函数原型
virtual void OnDisconnected(uint64_t session_id, int reason) {};
2.参数
Reason:错误原因,请与错误代码表对应
session_id:资金账户对应的session_id,登录时得到
3.返回
无
4.示例代码
以下是MyTraderSpi.h文件
#include "xtp_trader_api.h"
#include <iostream>
#include <functional>
using namespace std;
using namespace XTP::API;
class MyTraderSpi : public TraderSpi
{
public:
explicit MyTraderSpi();
~MyTraderSpi();
void bindTraderFunc(std::function<void(void)> f)
{
_disconnect = f;
}
private:
std::function<void(void)> _disconnect;
}
以下是MyTraderSpi.cpp文件
#include "MyTraderSpi.h"
MyTraderSpi::MyTraderSpi() { }
MyTraderSpi::~MyTraderSpi() { }
void MyTraderSpi::OnDisconnected(uint64_t session_id, int reason)
{
std::cout << "trader is disconnected." << std::endl;
// 重连通知
_disconnect();
}
以下是MyTraderApi.h文件
#include "xtp_trader_api.h"
#include "MyTraderSpi.h"
// 登录信息缓存
struct LoginTraderInfo
{
LoginTraderInfo()
{
trade_server_port = 0;
trade_sock_type = XTP_PROTOCOL_TCP;
}
std::string trade_server_ip;
int trade_server_port;
std::string account_name;
std::string account_pw;
XTP_PROTOCOL_TYPE trade_sock_type;
std::string local_ip;
};
using namespace XTP::API;
class MyTraderApi
{
public:
explicit MyTraderApi();
~MyTraderApi();
// 重连函数
void reloginTrader();
private:
LoginTraderInfo m_loginTraderInfo;
};
以下是MyTraderApi.cpp文件
#include "MyTraderApi.h"
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
MyTraderApi::MyTraderApi()
{
}
// 创建并初始化交易API
bool MyTraderApi::initialize()
{
user_trade_api_ = XTP::API::TraderApi::CreateTraderApi(1, "./", XTP_LOG_LEVEL_DEBUG);
if (user_trader_api_)
{
// 注册回调接口
m_trader_spi = new MyTraderSpi();
user_trade_api_->RegisterSpi(m_trader_spi);
// 在spi实例化后绑定重连函数指针
m_trader_spi->bindTraderFunc(std::bind(&MyTraderApi::reloginTrader, this));
}
}
// 重连函数,若最多只允许重连3次,每次重连间隔5秒
void MyTraderApi::reloginTrader()
{
if ((!m_loginTraderInfo.trade_server_ip.empty()) && (m_loginTraderInfo.trade_server_port != 0)
&& (!m_loginTraderInfo.account_name.empty()) && (!m_loginTraderInfo.account_pw.empty())) {
//重连次数
int i_counter = 0;
while (i_counter < 3) {
i_counter++;
uint64_t ret = user_trade_api_->Login(m_loginTraderInfo.trade_server_ip.c_str(),
m_loginTraderInfo.trade_server_port,
m_loginTraderInfo.account_name.c_str(),
m_loginTraderInfo.account_pw.c_str(),
m_loginTraderInfo.trade_sock_type,
m_loginTraderInfo.local_ip.c_str());
if (ret != 0) {
std::cout << "relogin success." << std::endl;
session_id_ = ret;//登陆成功后更新session_id
return;
} else {
std::cout << "relogin failed." << std::endl;
#ifdef _WIN32
Sleep(5000);
#else
sleep(5);
#endif
}
}
std::cout << "relogin failed over 3 times." << std::endl;
} else {
std::cout << "relogin info missing." << std::endl;
}
}
4. OnError
错误应答。
此函数只有在服务器发生错误时才会调用,一般无需用户处理。
1.函数原型
virtual void OnError(XTPRI *error_info) {};
2.参数
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
///错误信息的字符串长度
#define XTP_ERR_MSG_LEN 124
///响应信息
typedef struct XTPRspInfoStruct
{
///错误代码
int32_t error_id;
///错误信息
char error_msg[XTP_ERR_MSG_LEN];
} XTPRI;
3.返回
无
5. OnQueryAccountTradeMarket
请求查询用户在本节点上可交易市场的响应。此查询只会有一个结果。
1.函数原型
virtual void OnQueryAccountTradeMarket(int trade_location, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
trade_location:查询到的交易市场信息,按位来看,从低位开始数,第0位表示沪市,即如果(trade_location&0x01) == 0x01,代表可交易沪市,第1位表示深市,即如果(trade_location&0x02) == 0x02,表示可交易深市,如果第0位和第1位均是1,即(trade_location&(0x01|0x02)) == 0x03,就表示可交易沪深2个市场
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
///错误信息的字符串长度
#define XTP_ERR_MSG_LEN 124
///响应信息
typedef struct XTPRspInfoStruct
{
///错误代码
int32_t error_id;
///错误信息
char error_msg[XTP_ERR_MSG_LEN];
} XTPRI;
3.返回
无
4.触发函数
virtual int QueryAccountTradeMarket(uint64_t session_id, int request_id) = 0;
6. OnOrderEvent
报单通知。
每次订单状态更新时,都会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,在订单未成交、全部成交、全部撤单、部分撤单、已拒绝这些状态时会有响应,对于部分成交的情况,请由订单的成交回报来自行确认。所有登录了此用户的客户端都将收到此用户的订单响应。
1.函数原型
virtual void OnOrderEvent(XTPOrderInfo *order_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
order_info:订单响应具体信息,用户可以通过order_info.order_xtp_id来管理订单,通过(GetClientIDByXTPID() == client_id)来过滤自己的订单,order_info.qty_left字段在订单为未成交、部成、全成、废单状态时,表示此订单还没有成交的数量,在部撤、全撤状态时,表示此订单被撤的数量。order_info.order_cancel_xtp_id为其所对应的撤单ID,不为0时表示此单被撤成功
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///报单响应结构体
struct XTPOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///价格
double price;
///数量,此订单的报单数量
int64_t quantity;
///报单价格条件
XTP_PRICE_TYPE price_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志,期权用户关注字段,其余用户填0即可
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,为此订单的成交总金额
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
};
///XTP_MARKET_TYPE市场类型,交易里使用
typedef enum XTP_MARKET_TYPE
{
XTP_MKT_INIT = 0,///<初始化值或者未知
XTP_MKT_SZ_A = 1,///<深圳A股
XTP_MKT_SH_A, ///<上海A股
XTP_MKT_BJ_A, ///<北京A股
XTP_MKT_HK, ///<港股
XTP_MKT_UNKNOWN ///<未知交易市场类型
}XTP_MARKET_TYPE;
///XTP_PRICE_TYPE是价格类型
typedef enum XTP_PRICE_TYPE
{
XTP_PRICE_LIMIT = 1, ///<限价单-沪 / 深 / 沪期权 / 深期权 (除普通股票业务外,其余未特指的业务均使用此种类型)
XTP_PRICE_BEST_OR_CANCEL, ///<即时成交剩余转撤销,市价单-深 / 沪期权 / 深期权
XTP_PRICE_BEST5_OR_LIMIT, ///<最优五档即时成交剩余转限价,市价单-沪
XTP_PRICE_BEST5_OR_CANCEL, ///<最优5档即时成交剩余转撤销,市价单-沪深 / 深期权
XTP_PRICE_ALL_OR_CANCEL, ///<全部成交或撤销,市价单-深 / 沪期权 / 深期权
XTP_PRICE_FORWARD_BEST, ///<本方最优,市价单-深 / 深期权 / 沪科创板
XTP_PRICE_REVERSE_BEST_LIMIT, ///<对方最优剩余转限价,市价单-深 / 沪期权 / 深期权 / 沪科创板
XTP_PRICE_LIMIT_OR_CANCEL, ///<期权限价申报FOK
XTP_PRICE_TYPE_UNKNOWN, ///<未知或者无效价格类型
}XTP_PRICE_TYPE;
///XTP_SIDE_TYPE是买卖方向类型
typedef uint8_t XTP_SIDE_TYPE;
///买(新股申购,ETF买,配股,信用交易中担保品买)
#define XTP_SIDE_BUY 1
///卖(逆回购,ETF卖,信用交易中担保品卖)
#define XTP_SIDE_SELL 2
///申购
#define XTP_SIDE_PURCHASE 7
///赎回
#define XTP_SIDE_REDEMPTION 8
///拆分
#define XTP_SIDE_SPLIT 9
///合并
#define XTP_SIDE_MERGE 10
///改版之后的side的备兑,暂不支持
#define XTP_SIDE_COVER 11
///改版之后的side锁定(对应开平标识为开)/解锁(对应开平标识为平)
#define XTP_SIDE_FREEZE 12
/// 融资买入
#define XTP_SIDE_MARGIN_TRADE 21
/// 融券卖出
#define XTP_SIDE_SHORT_SELL 22
/// 卖券还款
#define XTP_SIDE_REPAY_MARGIN 23
/// 买券还券
#define XTP_SIDE_REPAY_STOCK 24
/// 现金还款(不放在普通订单协议,另加请求和查询协议)
//#define XTP_SIDE_CASH_REPAY_MARGIN 25
/// 现券还券
#define XTP_SIDE_STOCK_REPAY_STOCK 26
/// 余券划转
#define XTP_SIDE_SURSTK_TRANS 27
/// 担保品转入
#define XTP_SIDE_GRTSTK_TRANSIN 28
/// 担保品转出
#define XTP_SIDE_GRTSTK_TRANSOUT 29
///组合策略的组合
#define XTP_SIDE_OPT_COMBINE 31
///组合策略的拆分
#define XTP_SIDE_OPT_SPLIT 32
///组合策略的管理员强制拆分
#define XTP_SIDE_OPT_SPLIT_FORCE 33
///组合策略的交易所强制拆分
#define XTP_SIDE_OPT_SPLIT_FORCE_EXCH 34
///未知或者无效买卖方向
#define XTP_SIDE_UNKNOWN 50
///XTP_POSITION_EFFECT_TYPE是开平标识类型
typedef uint8_t XTP_POSITION_EFFECT_TYPE;
/// 初始值或未知值开平标识,除期权外,均使用此值
#define XTP_POSITION_EFFECT_INIT 0
/// 开
#define XTP_POSITION_EFFECT_OPEN 1
/// 平
#define XTP_POSITION_EFFECT_CLOSE 2
/// 强平
#define XTP_POSITION_EFFECT_FORCECLOSE 3
/// 平今
#define XTP_POSITION_EFFECT_CLOSETODAY 4
/// 平昨
#define XTP_POSITION_EFFECT_CLOSEYESTERDAY 5
/// 强减
#define XTP_POSITION_EFFECT_FORCEOFF 6
/// 本地强平
#define XTP_POSITION_EFFECT_LOCALFORCECLOSE 7
/// 信用业务追保强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_COVER 8
/// 信用业务清偿强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_CLEAR 9
/// 信用业务合约到期强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_DEBT 10
/// 信用业务无条件强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_UNCOND 11
/// 未知的开平标识类型
#define XTP_POSITION_EFFECT_UNKNOWN 12
///XTP_BUSINESS_TYPE证券业务类型
typedef enum XTP_BUSINESS_TYPE
{
XTP_BUSINESS_TYPE_CASH = 0, ///<普通股票业务(股票买卖,ETF买卖,沪市交易型货币基金等)
XTP_BUSINESS_TYPE_IPOS, ///<新股申购业务(对应的price type需选择限价类型)
XTP_BUSINESS_TYPE_REPO, ///<回购业务(国债逆回购业务对应的price type填为限价,side填为卖)
XTP_BUSINESS_TYPE_ETF, ///<ETF申赎业务
XTP_BUSINESS_TYPE_MARGIN, ///<融资融券业务
XTP_BUSINESS_TYPE_DESIGNATION, ///<转托管(未支持)
XTP_BUSINESS_TYPE_ALLOTMENT, ///<配股业务(对应的price type需选择限价类型,side填为买)
XTP_BUSINESS_TYPE_STRUCTURED_FUND_PURCHASE_REDEMPTION, ///<分级基金申赎业务
XTP_BUSINESS_TYPE_STRUCTURED_FUND_SPLIT_MERGE, ///<分级基金拆分合并业务
XTP_BUSINESS_TYPE_MONEY_FUND, ///<货币基金申赎业务(暂未支持,沪市交易型货币基金的买卖请使用普通股票业务)
XTP_BUSINESS_TYPE_OPTION, ///<期权业务
XTP_BUSINESS_TYPE_EXECUTE, ///<行权
XTP_BUSINESS_TYPE_FREEZE, ///<锁定解锁,暂不支持
XTP_BUSINESS_TYPE_OPTION_COMBINE, ///<期权组合策略 组合和拆分业务
XTP_BUSINESS_TYPE_EXECUTE_COMBINE, ///<期权行权合并业务
XTP_BUSINESS_TYPE_BOND_SWAP_STOCK, ///<债转股业务
XTP_BUSINESS_TYPE_UNKNOWN, ///<未知类型
} XTP_BUSINESS_TYPE;
///XTP_ORDER_STATUS_TYPE是报单状态类型
typedef enum XTP_ORDER_STATUS_TYPE
{
XTP_ORDER_STATUS_INIT = 0,///<初始化
XTP_ORDER_STATUS_ALLTRADED = 1, ///<全部成交
XTP_ORDER_STATUS_PARTTRADEDQUEUEING, ///<部分成交
XTP_ORDER_STATUS_PARTTRADEDNOTQUEUEING, ///<部分撤单
XTP_ORDER_STATUS_NOTRADEQUEUEING, ///<未成交
XTP_ORDER_STATUS_CANCELED, ///<已撤单
XTP_ORDER_STATUS_REJECTED, ///<已拒绝
XTP_ORDER_STATUS_UNKNOWN ///<未知订单状态
}XTP_ORDER_STATUS_TYPE;
///XTP_ORDER_SUBMIT_STATUS_TYPE是报单提交状态类型
typedef enum XTP_ORDER_SUBMIT_STATUS_TYPE
{
XTP_ORDER_SUBMIT_STATUS_INSERT_SUBMITTED = 1, ///<订单已经提交
XTP_ORDER_SUBMIT_STATUS_INSERT_ACCEPTED,///<订单已经被接受
XTP_ORDER_SUBMIT_STATUS_INSERT_REJECTED,///<订单已经被拒绝
XTP_ORDER_SUBMIT_STATUS_CANCEL_SUBMITTED,///<撤单已经提交
XTP_ORDER_SUBMIT_STATUS_CANCEL_REJECTED,///<撤单已经被拒绝
XTP_ORDER_SUBMIT_STATUS_CANCEL_ACCEPTED ///<撤单已经被接受
}XTP_ORDER_SUBMIT_STATUS_TYPE;
///TXTPOrderTypeType是报单类型类型
typedef char TXTPOrderTypeType;
///正常
#define XTP_ORDT_Normal '0'
///报价衍生
#define XTP_ORDT_DeriveFromQuote '1'
///组合衍生
#define XTP_ORDT_DeriveFromCombination '2'
///组合报单
#define XTP_ORDT_Combination '3'
///条件单
#define XTP_ORDT_ConditionalOrder '4'
///互换单
#define XTP_ORDT_Swap '5'
/// 本地报单编号的字符串长度
#define XTP_LOCAL_ORDER_LEN 11
3.返回
无
4.触发函数
// 报单录入
virtual uint64_t InsertOrder(XTPOrderInsertInfo *order, uint64_t session_id) = 0;
// 撤单请求
virtual uint64_t CancelOrder(const uint64_t order_xtp_id, uint64_t session_id) = 0;
7. OnTradeEvent
成交通知。
订单有成交发生的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的成交回报。相关订单为部成状态,需要用户通过成交回报的成交数量来确定,OnOrderEvent()不会推送部成状态。
1.函数原型
virtual void OnTradeEvent(XTPTradeReport *trade_info, uint64_t session_id) {};
2.参数
trade_info:成交回报的具体信息,用户可以通过trade_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。对于上交所,exec_id可以唯一标识一笔成交。当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交了。对于深交所,exec_id是唯一的,暂时无此判断机制。report_index+market字段可以组成唯一标识表示成交回报
session_id:资金账户对应的session_id,登录时得到
///报单成交结构体
struct XTPTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///价格,此次成交的价格
double price;
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,此次成交的总金额 = price*quantity
double trade_amount;
///成交序号 --回报记录号,对于单个账户来说,深交所每个平台(不同交易品种)唯一,上交所唯一,对于多账户来说,不唯一
uint64_t report_index;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
};
///TXTPTradeTypeType是成交类型类型
typedef char TXTPTradeTypeType;
///普通成交
#define XTP_TRDT_COMMON '0'
///现金替代
#define XTP_TRDT_CASH '1'
///一级市场成交
#define XTP_TRDT_PRIMARY '2'
///跨市场资金成交
#define XTP_TRDT_CROSS_MKT_CASH '3'
///港市资金成交
#define XTP_TRDT_HK_MKT_CASH '4'
///非沪深资金成交
#define XTP_TRDT_NON_SHSZ_MKT_CASH '5'
/// 成交执行编号的字符串长度
#define XTP_EXEC_ID_LEN 18
/// 交易所单号的字符串长度
#define XTP_ORDER_EXCH_LEN 17
/// 交易所交易员代码字符串长度
#define XTP_BRANCH_PBU_LEN 7
3.返回
无
- 触发函数
// 报单录入
virtual uint64_t InsertOrder(XTPOrderInsertInfo *order, uint64_t session_id) = 0;
8. OnCancelOrderError
撤单出错响应。此响应只会在撤单发生错误时被回调。
1.函数原型
virtual void OnCancelOrderError(XTPOrderCancelInfo *cancel_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///撤单失败响应消息
struct XTPOrderCancelInfo
{
///撤单XTPID
uint64_t order_cancel_xtp_id;
///原始订单XTPID
uint64_t order_xtp_id;
};
3.返回
无
- 触发函数
// 撤单请求
virtual uint64_t CancelOrder(const uint64_t order_xtp_id, uint64_t session_id) = 0;
9. OnQueryOrder
请求查询报单响应-旧版本接口。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryOrder(XTPQueryOrderRsp *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单信息
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 报单查询响应结构体
typedef struct XTPOrderInfo XTPQueryOrderRsp;
///报单响应结构体
struct XTPOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///价格
double price;
///数量,此订单的报单数量
int64_t quantity;
///报单价格条件
XTP_PRICE_TYPE price_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志,期权用户关注字段,其余用户填0即可
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,为此订单的成交总金额
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
};
3.返回
无
- 触发函数
// 根据报单ID请求查询报单-旧版本接口
virtual int QueryOrderByXTPID(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询报单-旧版本接口
virtual int QueryOrders(const XTPQueryOrderReq *query_param, uint64_t session_id, int request_id) = 0;
// 请求查询未完结报单-旧版本接口
virtual int QueryUnfinishedOrders(uint64_t session_id, int request_id) = 0;
10. OnQueryOrderEx
请求查询报单响应-新版本接口。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryOrderEx(XTPOrderInfoEx *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单信息
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///报单响应结构体,新版本
struct XTPOrderInfoEx
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///价格
double price;
///数量,此订单的报单数量
int64_t quantity;
///报单价格条件
XTP_PRICE_TYPE price_type;
union{
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,为此订单的成交总金额
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户无需关心
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///订单的错误信息
XTPRI order_err_t;
///保留字段
uint64_t unknown[2];
};
3.返回
无
- 触发函数
// 根据报单ID请求查询报单-新版本接口
virtual int QueryOrderByXTPIDEx(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询报单-新版本接口
virtual int QueryOrdersEx(const XTPQueryOrderReq *query_param, uint64_t session_id, int request_id) = 0;
// 请求查询未完结报单-新版本接口
virtual int QueryUnfinishedOrdersEx(uint64_t session_id, int request_id) = 0;
11. OnQueryOrderByPage
分页请求查询报单响应-旧版本接口。
当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOrderByPage(XTPQueryOrderRsp *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 报单查询响应结构体
typedef struct XTPOrderInfo XTPQueryOrderRsp;
///报单响应结构体
struct XTPOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///价格
double price;
///数量,此订单的报单数量
int64_t quantity;
///报单价格条件
XTP_PRICE_TYPE price_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志,期权用户关注字段,其余用户填0即可
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,为此订单的成交总金额
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
};
3.返回
无
4.触发函数
// 分页请求查询报单-旧版本接口
virtual int QueryOrdersByPage(const XTPQueryOrderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
12. OnQueryOrderByPageEx
分页请求查询报单响应-新版本接口。
当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOrderByPageEx(XTPOrderInfoEx *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///报单响应结构体,新版本
struct XTPOrderInfoEx
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///价格
double price;
///数量,此订单的报单数量
int64_t quantity;
///报单价格条件
XTP_PRICE_TYPE price_type;
union{
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,为此订单的成交总金额
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户无需关心
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///订单的错误信息
XTPRI order_err_t;
///保留字段
uint64_t unknown[2];
};
3.返回
无
- 触发函数
// 分页请求查询报单-新版本接口
virtual int QueryOrdersByPageEx(const XTPQueryOrderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
13. OnQueryTrade
请求查询成交响应。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryTrade(XTPQueryTradeRsp *trade_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
trade_info:查询到的一个成交回报
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 成交回报查询响应结构体
typedef struct XTPTradeReport XTPQueryTradeRsp;
///报单成交结构体
struct XTPTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///价格,此次成交的价格
double price;
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,此次成交的总金额 = price*quantity
double trade_amount;
///成交序号 --回报记录号,对于单个账户来说,深交所每个平台(不同交易品种)唯一,上交所唯一,对于多账户来说,不唯一
uint64_t report_index;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
};
///TXTPTradeTypeType是成交类型类型
typedef char TXTPTradeTypeType;
///普通成交
#define XTP_TRDT_COMMON '0'
///现金替代
#define XTP_TRDT_CASH '1'
///一级市场成交
#define XTP_TRDT_PRIMARY '2'
///跨市场资金成交
#define XTP_TRDT_CROSS_MKT_CASH '3'
///港市资金成交
#define XTP_TRDT_HK_MKT_CASH '4'
///非沪深资金成交
#define XTP_TRDT_NON_SHSZ_MKT_CASH '5'
/// 成交执行编号的字符串长度
#define XTP_EXEC_ID_LEN 18
/// 交易所单号的字符串长度
#define XTP_ORDER_EXCH_LEN 17
/// 交易所交易员代码字符串长度
#define XTP_BRANCH_PBU_LEN 7
3.返回
无
4 . 触发函数
// 根据委托编号请求查询相关成交
virtual int QueryTradesByXTPID(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询已成交
virtual int QueryTrades(XTPQueryTraderReq *query_param, uint64_t session_id, int request_id) = 0;
14. OnQueryTradeByPage
分页请求查询成交响应。
当trade_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果trade_sequence等于req_count,那么表示还有回报,可以进行下一次分页查询,如果不等,表示所有回报已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryTradeByPage(XTPQueryTradeRsp *trade_info, int64_t req_count, int64_t trade_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
trade_info:查询到的一个成交信息
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 成交回报查询响应结构体
typedef struct XTPTradeReport XTPQueryTradeRsp;
///报单成交结构体
struct XTPTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///合约代码
char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///价格,此次成交的价格
double price;
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,此次成交的总金额 = price*quantity
double trade_amount;
///成交序号 --回报记录号,对于单个账户来说,深交所每个平台(不同交易品种)唯一,上交所唯一,对于多账户来说,不唯一
uint64_t report_index;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
union{
///32位字段,用来兼容老版本api,用户无需关心
uint32_t u32;
struct {
///买卖方向
XTP_SIDE_TYPE side;
///开平标志
XTP_POSITION_EFFECT_TYPE position_effect;
///预留字段1
uint8_t reserved1;
///预留字段2
uint8_t reserved2;
};
};
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
};
///TXTPTradeTypeType是成交类型类型
typedef char TXTPTradeTypeType;
///普通成交
#define XTP_TRDT_COMMON '0'
///现金替代
#define XTP_TRDT_CASH '1'
///一级市场成交
#define XTP_TRDT_PRIMARY '2'
///跨市场资金成交
#define XTP_TRDT_CROSS_MKT_CASH '3'
///港市资金成交
#define XTP_TRDT_HK_MKT_CASH '4'
///非沪深资金成交
#define XTP_TRDT_NON_SHSZ_MKT_CASH '5'
/// 成交执行编号的字符串长度
#define XTP_EXEC_ID_LEN 18
/// 交易所单号的字符串长度
#define XTP_ORDER_EXCH_LEN 17
/// 交易所交易员代码字符串长度
#define XTP_BRANCH_PBU_LEN 7
3.返回
无
4.触发函数
// 分页请求查询成交回报
virtual int QueryTradesByPage(const XTPQueryTraderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
15. OnQueryPosition
请求查询投资者持仓响应。
由于用户可能持有多个股票,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryPosition(XTPQueryStkPositionRsp *position, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
Position:查询到的一只股票的持仓情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询股票持仓情况
struct XTPQueryStkPositionRsp
{
///证券代码
char ticker[XTP_TICKER_LEN];
///证券名称
char ticker_name[XTP_TICKER_NAME_LEN];
///交易市场
XTP_MARKET_TYPE market;
///总持仓
int64_t total_qty;
///可卖持仓
int64_t sellable_qty;
///持仓成本
double avg_price;
///浮动盈亏(保留字段)
double unrealized_pnl;
///昨日持仓
int64_t yesterday_position;
///今日申购赎回数量(申购和赎回数量不可能同时存在,因此可以共用一个字段)
int64_t purchase_redeemable_qty;
//以下为期权用户关心字段
/// 持仓方向
XTP_POSITION_DIRECTION_TYPE position_direction;
///持仓类型(此字段所有账户都可能用到,可以用来区分股份是否为配售)
XTP_POSITION_SECURITY_TYPE position_security_type;
/// 可行权合约
int64_t executable_option;
/// 可锁定标的
int64_t lockable_position;
/// 可行权标的
int64_t executable_underlying;
/// 已锁定标的
int64_t locked_position;
/// 可用已锁定标的
int64_t usable_locked_position;
//以下为现货用户关心字段
///盈亏成本价
double profit_price;
///买入成本
double buy_cost;
///盈亏成本
double profit_cost;
///持仓市值(此字段目前只有期权账户有值,其他类型账户为0)
double market_value;
///义务仓占用保证金(此字段目前只有期权账户有值,其他类型账户为0)
double margin;
///昨日买入成本
double last_buy_cost;
///昨日盈亏成本
double last_profit_cost;
///(保留字段)
uint64_t unknown[50 - 13];
};
///XTP_POSITION_DIRECTION_TYPE是一个持仓方向类型
typedef enum XTP_POSITION_DIRECTION_TYPE {
XTP_POSITION_DIRECTION_NET = 0, ///<净
XTP_POSITION_DIRECTION_LONG, ///<多(期权则为权利方)
XTP_POSITION_DIRECTION_SHORT, ///<空(期权则为义务方)
XTP_POSITION_DIRECTION_COVERED, ///<备兑(期权则为备兑义务方)
}XTP_POSITION_DIRECTION_TYPE;
///XTP_POSITION_SECURITY_TYPE是一个持仓证券枚举类型
typedef enum XTP_POSITION_SECURITY_TYPE
{
XTP_POSITION_SECURITY_NORMAL = 0, ///<普通持仓
XTP_POSITION_SECURITY_PLACEMENT = 1, ///<配售类型的持仓,包含配股、配债等
XTP_POSITION_SECURITY_UNKNOWN = 2 ///<未知类型
}XTP_POSITION_SECURITY_TYPE;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 存放证券名称的字符串长度
#define XTP_TICKER_NAME_LEN 64
3.返回
无
4.示例代码 以下是MyTraderSpi.h文件
#include "xtp_trader_api.h"
#include <iostream>
#include <list>
using namespace std;
using namespace XTP::API;
class MyTraderSpi : public TraderSpi
{
public:
explicit MyTraderSpi();
~MyTraderSpi();
void OnQueryPosition(XTPQueryStkPositionRsp * investor_position, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id);
private:
std::list<XTPQueryStkPositionRsp> query_stk_position_buffer_;
std::list<XTPQueryStkPositionRsp> query_allotment_buffer_;
}
以下是MyTraderSpi.cpp文件
#include "MyTraderSpi.h"
MyTraderSpi::MyTraderSpi() { }
MyTraderSpi::~MyTraderSpi() { }
void MyTraderSpi::OnQueryPosition(XTPQueryStkPositionRsp * investor_position, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id)
{
if (error_info && (error_info->error_id != 0)) {
//查询出错
if (error_info->error_id == 11000350)
{
//账户里没有持仓
std::cout << "Position is empty." << std::endl;
}
else
{
//真正的出错
}
return;
}
//TODO:用户可以根据自己的需要编写程序逻辑,以下仅以缓存查询结果为例
if (investor_position) {
// 持仓缓存
query_stk_position_buffer_.push_back(*investor_position);
// 配股或配债缓存
if (XTP_POSITION_SECURITY_PLACEMENT == investor_position->position_security_type)
query_allotment_buffer_.push_back(*investor_position);
}
if (is_last) {
/// 两份缓存数据发送至UI线程
// 缓存发送后清空容器
query_stk_position_buffer_.clear();
query_allotment_buffer_.clear();
}
}
5.触发函数
// 请求查询投资者持仓
virtual int QueryPosition(const char *ticker, uint64_t session_id, int request_id, XTP_MARKET_TYPE market = XTP_MKT_INIT) = 0;
16. OnQueryAsset
请求查询资金账户响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryAsset(XTPQueryAssetRsp *asset, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
Asset:查询到的资金账户情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///账户资金查询响应结构体
struct XTPQueryAssetRsp
{
///总资产(现货账户/期权账户参考公式:总资产 = 可用资金 + 证券资产(目前为0)+ 预扣的资金),(信用账户参考公式:总资产 = 可用资金 + 融券卖出所得资金余额 + 证券资产+ 预扣的资金)
double total_asset;
///可用资金
double buying_power;
///证券资产(保留字段,目前为0)
double security_asset;
///累计买入成交证券占用资金(仅限现货账户/期权账户,信用账户暂不可用)
double fund_buy_amount;
///累计买入成交交易费用(仅限现货账户/期权账户,信用账户暂不可用)
double fund_buy_fee;
///累计卖出成交证券所得资金(仅限现货账户/期权账户,信用账户暂不可用)
double fund_sell_amount;
///累计卖出成交交易费用(仅限现货账户/期权账户,信用账户暂不可用)
double fund_sell_fee;
///XTP系统预扣的资金(包括买卖股票时预扣的交易资金+预扣手续费)
double withholding_amount;
///账户类型
XTP_ACCOUNT_TYPE account_type;
///冻结的保证金(仅限期权账户)
double frozen_margin;
///行权冻结资金(仅限期权账户)
double frozen_exec_cash;
///行权费用(仅限期权账户)
double frozen_exec_fee;
///垫付资金(仅限期权账户)
double pay_later;
///预垫付资金(仅限期权账户)
double preadva_pay;
///昨日余额(仅限期权账户)
double orig_banlance;
///当前余额(仅限期权账户)
double banlance;
///当天出入金(仅限期权账户)
double deposit_withdraw;
///当日交易资金轧差(仅限期权账户)
double trade_netting;
///资金资产(仅限期权账户)
double captial_asset;
///强锁资金(仅限期权账户)
double force_freeze_amount;
///可取资金(仅限期权账户)
double preferred_amount;
// 信用业务新增字段开始(数量1)
///融券卖出所得资金余额(仅限信用账户,只能用于买券还券)
double repay_stock_aval_banlance;
// 信用业务新增字段结束(数量1)
///累计订单流量费
double fund_order_data_charges;
///累计撤单流量费
double fund_cancel_data_charges;
//流量费统计新增字段结束(数量2)
///交易所实时风险度(仅限期权账户,后续服务器版本支持,目前为0)
double exchange_cur_risk_degree;
///公司实时风险度(仅限期权账户,后续服务器版本支持,目前为0)
double company_cur_risk_degree;
//风险度新增字段结束(数量2)
///(保留字段)
uint64_t unknown[43 - 12 - 1 - 2 - 2];
};
3.返回
无
4.触发函数
// 请求查询资产
virtual int QueryAsset(uint64_t session_id, int request_id) = 0;
17. OnQueryStructuredFund
请求查询分级基金信息响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryStructuredFund(XTPStructuredFundInfo *fund_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
fund_info:查询到的分级基金情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询分级基金信息响应结构体
struct XTPStructuredFundInfo
{
XTP_EXCHANGE_TYPE exchange_id; ///<交易所代码
char sf_ticker[XTP_TICKER_LEN]; ///<分级基金母基金代码
char sf_ticker_name[XTP_TICKER_NAME_LEN]; ///<分级基金母基金名称
char ticker[XTP_TICKER_LEN]; ///<分级基金子基金代码
char ticker_name[XTP_TICKER_NAME_LEN]; ///<分级基金子基金名称
XTP_SPLIT_MERGE_STATUS split_merge_status; ///<基金允许拆分合并状态
uint32_t ratio; ///<拆分合并比例
uint32_t min_split_qty;///<最小拆分数量
uint32_t min_merge_qty; ///<最小合并数量
double net_price;///<基金净值
///XTP_EXCHANGE_TYPE是交易所类型,行情里使用
typedef enum XTP_EXCHANGE_TYPE
{
XTP_EXCHANGE_SH = 1, ///<上证
XTP_EXCHANGE_SZ, ///<深证
XTP_EXCHANGE_NQ, ///<新三板 全国中小企业股份转让系统
XTP_EXCHANGE_UNKNOWN ///<不存在的交易所类型
}XTP_EXCHANGE_TYPE;
///XTP_SPLIT_MERGE_STATUS是一个基金当天拆分合并状态类型
typedef enum XTP_SPLIT_MERGE_STATUS {
XTP_SPLIT_MERGE_STATUS_ALLOW = 0, ///<允许拆分和合并
XTP_SPLIT_MERGE_STATUS_ONLY_SPLIT, ///<只允许拆分,不允许合并
XTP_SPLIT_MERGE_STATUS_ONLY_MERGE, ///<只允许合并,不允许拆分
XTP_SPLIT_MERGE_STATUS_FORBIDDEN ///<不允许拆分合并
}XTP_SPLIT_MERGE_STATUS;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 存放证券名称的字符串长度
#define XTP_TICKER_NAME_LEN 64
3.返回
无
4.触发函数
// 请求查询分级基金
virtual int QueryStructuredFund(XTPQueryStructuredFundInfoReq *query_param, uint64_t session_id, int request_id) = 0;
18. OnQueryFundTransfer
请求查询资金划拨订单响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryFundTransfer(XTPFundTransferNotice *fund_transfer_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
fund_transfer_info:查询到的资金账户情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///资金内转流水通知
struct XTPFundTransferNotice
{
///资金内转编号
uint64_t serial_id;
///内转类型
XTP_FUND_TRANSFER_TYPE transfer_type;
///金额
double amount;
///操作结果
XTP_FUND_OPER_STATUS oper_status;
///操作时间
uint64_t transfer_time;
};
///XTP_FUND_TRANSFER_TYPE是资金流转方向类型
typedef enum XTP_FUND_TRANSFER_TYPE
{
XTP_FUND_TRANSFER_OUT = 0, ///<转出 从XTP转出到柜台
XTP_FUND_TRANSFER_IN, ///<转入 从柜台转入XTP
XTP_FUND_INTER_TRANSFER_OUT, ///<跨节点转出 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨,只能跨账户用户使用
XTP_FUND_INTER_TRANSFER_IN, ///<跨节点转入 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨,只能跨账户用户使用
XTP_FUND_INTER_TRANSFER_REPAY_OUT, ///<跨节点转出 融券卖出资金 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨
XTP_FUND_INTER_TRANSFER_REPAY_IN, ///<跨节点转入 融券卖出资金 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨
XTP_FUND_INTER_TRANSFER_CONTRACT_OUT, ///<跨节点转出 授信额度 从本XTP节点1,转出到对端XTP节点2,XTP服务器之间划拨
XTP_FUND_INTER_TRANSFER_CONTRACT_IN, ///<跨节点转入 授信额度 从对端XTP节点2,转入到本XTP节点1,XTP服务器之间划拨
XTP_FUND_TRANSFER_UNKNOWN ///<未知类型
}XTP_FUND_TRANSFER_TYPE;
///XTP_FUND_OPER_STATUS柜台资金操作结果
typedef enum XTP_FUND_OPER_STATUS {
XTP_FUND_OPER_PROCESSING = 0, ///<XTP已收到,正在处理中
XTP_FUND_OPER_SUCCESS, ///<成功
XTP_FUND_OPER_FAILED, ///<失败
XTP_FUND_OPER_SUBMITTED, ///<已提交到集中柜台处理
XTP_FUND_OPER_UNKNOWN ///<未知
}XTP_FUND_OPER_STATUS;
3.返回
无
4.触发函数
// 请求查询资金划拨
virtual int QueryFundTransfer(XTPQueryFundTransferLogReq *query_param, uint64_t session_id, int request_id) = 0;
19. OnFundTransfer
资金划拨通知。
当资金划拨订单有状态变化的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的资金划拨通知。
1.函数原型
virtual void OnFundTransfer(XTPFundTransferNotice *fund_transfer_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
fund_transfer_info:资金划拨通知的具体信息,用户可以通过fund_transfer_info.serial_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单
error_info:资金划拨订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误。当资金划拨方向为一号两中心节点之间划拨,且error_info.error_id=11000384时,error_info.error_msg为结点中可用于划拨的资金(以整数为准),用户需进行stringToInt的转化,可据此填写合适的资金,再次发起划拨请求
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
///资金内转流水通知
struct XTPFundTransferNotice
{
///资金内转编号
uint64_t serial_id;
///内转类型
XTP_FUND_TRANSFER_TYPE transfer_type;
///金额
double amount;
///操作结果
XTP_FUND_OPER_STATUS oper_status;
///操作时间
uint64_t transfer_time;
};
3.返回
无
4.触发函数
// 资金划拨请求
virtual uint64_t FundTransfer(XTPFundTransferReq *fund_transfer, uint64_t session_id) = 0;
20. OnQueryOtherServerFund
请求查询其他节点可用资金的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOtherServerFund(XTPFundQueryRsp *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
fund_info:查询到的其他节点可用资金情况
error_info:查询到的其他节点可用资金情况发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
///用户资金查询响应结构体
struct XTPFundQueryRsp
{
///金额
double amount;
///查询类型
XTP_FUND_QUERY_TYPE query_type;
///预留字段,用户无需填写
uint64_t unknown[4];
};
///XTP_FUND_QUERY_TYPE是柜台资金查询类型
typedef enum XTP_FUND_QUERY_TYPE
{
XTP_FUND_QUERY_JZ = 0, ///<查询金证主柜台可转资金
XTP_FUND_QUERY_INTERNAL, ///<查询一账号两中心设置时,对方节点的资金
XTP_FUND_QUERY_INTERNAL_REPAY, ///<查询一账号两中心设置时,对方节点的融券卖余额资金
XTP_FUND_QUERY_INTERNAL_CONTRACT, ///<查询一账号两中心设置时,对方节点的授信额度
XTP_FUND_QUERY_UNKNOWN ///<未知类型
}XTP_FUND_QUERY_TYPE;
3.返回
无
4.触发函数
// 请求查询其他节点可用资金
virtual int QueryOtherServerFund(XTPFundQueryReq *query_param, uint64_t session_id, int request_id) = 0;
21. OnQueryETF
请求查询ETF清单文件的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryETF(XTPQueryETFBaseRsp *etf_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
etf_info:查询到的ETF清单文件情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询股票ETF合约基本情况--响应结构体
typedef struct XTPQueryETFBaseRsp
{
XTP_MARKET_TYPE market; ///<交易市场
char etf[XTP_TICKER_LEN]; ///<etf代码,买卖,申赎统一使用该代码
char subscribe_redemption_ticker[XTP_TICKER_LEN]; ///<etf申购赎回代码
int32_t unit; ///<最小申购赎回单位对应的ETF份数,例如上证"50ETF"就是900000
int32_t subscribe_status; ///<是否允许申购,1-允许,0-禁止
int32_t redemption_status; ///<是否允许赎回,1-允许,0-禁止
double max_cash_ratio; ///<最大现金替代比例,小于1的数值 TODO 是否采用double
double estimate_amount; ///<T日预估金额差额
double cash_component; ///<T-X日现金差额
double net_value; ///<基金单位净值
double total_amount; ///<最小申赎单位净值总金额=net_value*unit
}XTPQueryETFBaseRsp;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
3.返回
无
4.触发函数
// 请求查询ETF清单文件
virtual int QueryETF(XTPQueryETFBaseReq *query_param, uint64_t session_id, int request_id) = 0;
22. OnQueryETFBasket
请求查询ETF股票篮的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryETFBasket(XTPQueryETFComponentRsp *etf_component_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
etf_component_info:查询到的ETF合约的相关成分股信息
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询股票ETF成分股信息--响应结构体
struct XTPQueryETFComponentRsp
{
///交易市场
XTP_MARKET_TYPE market;
///ETF代码
char ticker[XTP_TICKER_LEN];
///成份股代码
char component_ticker[XTP_TICKER_LEN];
///成份股名称
char component_name[XTP_TICKER_NAME_LEN];
///成份股数量
int64_t quantity;
///成份股交易市场
XTP_MARKET_TYPE component_market;
///成份股替代标识
ETF_REPLACE_TYPE replace_type;
///溢价比例
double premium_ratio;
///成分股替代标识为必须现金替代时候的总金额
double amount;
///申购溢价比例
double creation_premium_ratio;
///赎回溢价比例
double redemption_discount_ratio;
///申购时,成分股替代标识为必须现金替代时候的总金额
double creation_amount;
///赎回时,成分股替代标识为必须现金替代时候的总金额
double redemption_amount;
};
///ETF_REPLACE_TYPE现金替代标识定义
typedef enum ETF_REPLACE_TYPE
{
ERT_CASH_FORBIDDEN = 0, ///<禁止现金替代
ERT_CASH_OPTIONAL, ///<可以现金替代
ERT_CASH_MUST, ///<必须现金替代
ERT_CASH_RECOMPUTE_INTER_SZ, ///<深市退补现金替代
ERT_CASH_MUST_INTER_SZ, ///<深市必须现金替代
ERT_CASH_RECOMPUTE_INTER_OTHER, ///<非沪深市场成分证券退补现金替代(不适用于跨沪深港ETF产品)
ERT_CASH_MUST_INTER_OTHER, ///<表示非沪深市场成份证券必须现金替代(不适用于跨沪深港ETF产品)
ERT_CASH_RECOMPUTE_INTER_HK, ///港市退补现金替代(仅适用于跨沪深港ETF产品)
ERT_CASH_MUST_INTER_HK, ///港市必须现金替代(仅适用于跨沪深港ETF产品)
EPT_INVALID ///<无效值
}ETF_REPLACE_TYPE;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 存放证券名称的字符串长度
#define XTP_TICKER_NAME_LEN 64
3.返回
无
4.触发函数
// 请求查询ETF股票篮
virtual int QueryETFTickerBasket(XTPQueryETFComponentReq *query_param, uint64_t session_id, int request_id) = 0;
23. OnQueryIPOInfoList
请求查询今日新股申购信息列表的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryIPOInfoList(XTPQueryIPOTickerRsp *ipo_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
ipo_info 查询到的今日新股申购的一只股票信息
error_info:查询今日新股申购信息列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询当日可申购新股信息
struct XTPQueryIPOTickerRsp {
///交易市场
XTP_MARKET_TYPE market;
///申购代码
char ticker[XTP_TICKER_LEN];
///申购股票名称
char ticker_name[XTP_TICKER_NAME_LEN];
/// 证券类别
XTP_TICKER_TYPE ticker_type;
///申购价格
double price;
///申购单元
int32_t unit;
///最大允许申购数量
int32_t qty_upper_limit;
};
///XTP_TICKER_TYPE证券类型
typedef enum XTP_TICKER_TYPE
{
XTP_TICKER_TYPE_STOCK = 0, ///<普通股票
XTP_TICKER_TYPE_INDEX, ///<指数
XTP_TICKER_TYPE_FUND, ///<基金
XTP_TICKER_TYPE_BOND, ///<债券
XTP_TICKER_TYPE_OPTION, ///<期权
XTP_TICKER_TYPE_TECH_STOCK, ///<科创板股票(上海)
XTP_TICKER_TYPE_UNKNOWN ///<未知类型
}XTP_TICKER_TYPE;
3.返回
无
4.触发函数
// 请求查询今日新股申购信息列表
virtual int QueryIPOInfoList(uint64_t session_id, int request_id) = 0;
24. OnQueryIPOQuotaInfo
请求查询用户新股申购额度信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryIPOQuotaInfo(XTPQueryIPOQuotaRsp *quota_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
quota_info:查询到的用户某个市场的今日新股申购额度信息
error_info:查询用户新股申购额度信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询用户申购额度-包含创业板额度
struct XTPQueryIPOQuotaRsp {
///交易市场
XTP_MARKET_TYPE market;
///可申购额度
int32_t quantity;
/// 上海科创板额度
int32_t tech_quantity;
/// 保留
int32_t unused;
};
3.返回
无
4.触发函数
// 请求查询用户新股申购额度信息
virtual int QueryIPOQuotaInfo(uint64_t session_id, int request_id) = 0;
25. OnQueryBondIPOInfoList
请求查询今日可转债申购信息列表的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryBondIPOInfoList(XTPQueryIPOTickerRsp *ipo_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
ipo_info:查询到的今日可转债申购的可转债信息
error_info:查询用户今日可转债申购信息列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询当日可申购新股信息
struct XTPQueryIPOTickerRsp {
///交易市场
XTP_MARKET_TYPE market;
///申购代码
char ticker[XTP_TICKER_LEN];
///申购股票名称
char ticker_name[XTP_TICKER_NAME_LEN];
/// 证券类别
XTP_TICKER_TYPE ticker_type;
///申购价格
double price;
///申购单元
int32_t unit;
///最大允许申购数量
int32_t qty_upper_limit;
};
///XTP_TICKER_TYPE证券类型
typedef enum XTP_TICKER_TYPE
{
XTP_TICKER_TYPE_STOCK = 0, ///<普通股票
XTP_TICKER_TYPE_INDEX, ///<指数
XTP_TICKER_TYPE_FUND, ///<基金
XTP_TICKER_TYPE_BOND, ///<债券
XTP_TICKER_TYPE_OPTION, ///<期权
XTP_TICKER_TYPE_TECH_STOCK, ///<科创板股票(上海)
XTP_TICKER_TYPE_UNKNOWN ///<未知类型
}XTP_TICKER_TYPE;
3.返回
无
4.触发函数
// 请求查询用户今日可转债申购信息
virtual int QueryBondIPOInfoList(uint64_t session_id, int request_id) = 0;
26. OnQueryBondSwapStockInfo
请求查询用户可转债转股信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryBondSwapStockInfo(XTPQueryBondSwapStockRsp *swap_stock_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
swap_stock_info: 查询到某条可转债转股信息
error_info:查询可转债信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///用户债转股信息结构体
typedef struct XTPQueryBondSwapStockRsp
{
XTP_MARKET_TYPE market; // 交易市场
char ticker[XTP_TICKER_LEN]; // 债券证券代码
char underlying_ticker[XTP_TICKER_LEN]; // 转股后的股票证券代码
int32_t unit; // 转换数量单位(张)
int64_t qty_min; // 最小下单量(张)
int64_t qty_max; // 最大下单量(张)
double swap_price; // 转股价格
int32_t swap_flag; // 是否处于转股期;0: 不可转股;1:可转股;
}XTPQueryBondSwapStockRsp;
3.返回
无
4.触发函数
// 请求查询用户债转股信息
virtual int QueryBondSwapStockInfo(XTPQueryBondSwapStockReq *query_param, uint64_t session_id, int request_id) = 0;
27. OnQueryOptionAuctionInfo
请求查询期权合约的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionAuctionInfo(XTPQueryOptionAuctionInfoRsp *option_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
option_info:查询到的期权合约情况
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///查询期权竞价交易业务参考信息
struct XTPQueryOptionAuctionInfoRsp {
char ticker[XTP_TICKER_LEN]; ///<合约编码,报单ticker采用本字段
XTP_MARKET_TYPE security_id_source; ///<证券代码源
char symbol[XTP_TICKER_NAME_LEN]; ///<合约简称
char contract_id[XTP_TICKER_NAME_LEN]; ///<合约交易代码
char underlying_security_id[XTP_TICKER_LEN]; ///<基础证券代码
XTP_MARKET_TYPE underlying_security_id_source; ///<基础证券代码源
uint32_t list_date; ///<上市日期,格式为YYYYMMDD
uint32_t last_trade_date; ///<最后交易日,格式为YYYYMMDD
XTP_TICKER_TYPE ticker_type; ///<证券类别
int32_t day_trading; ///<是否支持当日回转交易,1-允许,0-不允许
XTP_OPT_CALL_OR_PUT_TYPE call_or_put; ///<认购或认沽
uint32_t delivery_day; ///<行权交割日,格式为YYYYMMDD
uint32_t delivery_month; ///<交割月份,格式为YYYYMM
XTP_OPT_EXERCISE_TYPE_TYPE exercise_type; ///<行权方式
uint32_t exercise_begin_date; ///<行权起始日期,格式为YYYYMMDD
uint32_t exercise_end_date; ///<行权结束日期,格式为YYYYMMDD
double exercise_price; ///<行权价格
int64_t qty_unit; ///<数量单位,对于某一证券申报的委托,其委托数量字段必须为该证券数量单位的整数倍
int64_t contract_unit; ///<合约单位
int64_t contract_position; ///<合约持仓量
double prev_close_price; ///<合约前收盘价
double prev_clearing_price; ///<合约前结算价
int64_t lmt_buy_max_qty; ///<限价买最大量
int64_t lmt_buy_min_qty; ///<限价买最小量
int64_t lmt_sell_max_qty; ///<限价卖最大量
int64_t lmt_sell_min_qty; ///<限价卖最小量
int64_t mkt_buy_max_qty; ///<市价买最大量
int64_t mkt_buy_min_qty; ///<市价买最小量
int64_t mkt_sell_max_qty; ///<市价卖最大量
int64_t mkt_sell_min_qty; ///<市价卖最小量
double price_tick; ///<最小报价单位
double upper_limit_price; ///<涨停价
double lower_limit_price; ///<跌停价
double sell_margin; ///<今卖开每张保证金
double margin_ratio_param1; ///<交易所保证金比例计算参数一
double margin_ratio_param2; ///<交易所保证金比例计算参数二
uint64_t unknown[20]; ///<(保留字段)
};
///XTP_TICKER_TYPE证券类型
typedef enum XTP_TICKER_TYPE
{
XTP_TICKER_TYPE_STOCK = 0, ///<普通股票
XTP_TICKER_TYPE_INDEX, ///<指数
XTP_TICKER_TYPE_FUND, ///<基金
XTP_TICKER_TYPE_BOND, ///<债券
XTP_TICKER_TYPE_OPTION, ///<期权
XTP_TICKER_TYPE_TECH_STOCK, ///<科创板股票(上海)
XTP_TICKER_TYPE_UNKNOWN ///<未知类型
}XTP_TICKER_TYPE;
///XTP_OPT_CALL_OR_PUT_TYPE是一个认沽或认购类型
typedef enum XTP_OPT_CALL_OR_PUT_TYPE {
XTP_OPT_CALL = 1, ///<认购
XTP_OPT_PUT = 2, ///<认沽
}XTP_OPT_CALL_OR_PUT_TYPE;
///XTP_OPT_EXERCISE_TYPE_TYPE是一个行权方式类型
typedef enum XTP_OPT_EXERCISE_TYPE_TYPE {
XTP_OPT_EXERCISE_TYPE_EUR = 1, ///<欧式
XTP_OPT_EXERCISE_TYPE_AME = 2, ///<美式
}XTP_OPT_EXERCISE_TYPE_TYPE;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 存放证券名称的字符串长度
#define XTP_TICKER_NAME_LEN 64
3.返回
无
4.触发函数
// 请求查询期权合约
virtual int QueryOptionAuctionInfo(XTPQueryOptionAuctionInfoReq *query_param, uint64_t session_id, int request_id) = 0;
28. OnCreditCashRepay
融资融券业务中现金直接还款的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnCreditCashRepay(XTPCrdCashRepayRsp *cash_repay_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
cash_repay_info:现金直接还款通知的具体信息,用户可以通过cash_repay_info.xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单
error_info:查询资金账户发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///融资融券直接还款响应信息
struct XTPCrdCashRepayRsp
{
int64_t xtp_id; ///< 直接还款操作的XTPID
double request_amount; ///< 直接还款的申请金额
double cash_repay_amount; ///< 实际还款使用金额
};
3.返回
无
4.触发函数
// 融资融券业务中现金直接还款请求
virtual uint64_t CreditCashRepay(double amount, uint64_t session_id) = 0;
29. OnCreditCashRepayDebtInterestFee
融资融券业务中现金还息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnCreditCashRepayDebtInterestFee(XTPCrdCashRepayDebtInterestFeeRsp *cash_repay_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
cash_repay_info:现金还息通知的具体信息,用户可以通过cash_repay_info.xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单
error_info:现金还息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///融资融券现金还息费响应信息
struct XTPCrdCashRepayDebtInterestFeeRsp
{
int64_t xtp_id; ///< 直接还款操作的XTPID
double request_amount; ///< 直接还款的申请金额
double cash_repay_amount; ///< 实际还款使用金额
char debt_compact_id[XTP_CREDIT_DEBT_ID_LEN]; ///< 指定的负债合约编号
char unknow[32]; ///< 保留字段
};
/// 信用业务合约负债编号长度
#define XTP_CREDIT_DEBT_ID_LEN 33
3.返回
无
4.触发函数
// 融资融券业务中现金还指定负债合约息费请求
virtual uint64_t CreditCashRepayDebtInterestFee(const char* debt_id, double amount, uint64_t session_id) = 0;
30. OnQueryCreditCashRepayInfo
请求查询融资融券业务中的现金直接还款报单的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditCashRepayInfo(XTPCrdCashRepayInfo *cash_repay_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
cash_repay_info 查询到的某一笔现金直接还款通知的具体信息
error_info:查询现金直接报单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///单条融资融券直接还款记录信息
struct XTPCrdCashRepayInfo
{
int64_t xtp_id; ///< 直接还款操作的XTPID
XTP_CRD_CR_STATUS status; ///< 直接还款处理状态
double request_amount; ///< 直接还款的申请金额
double cash_repay_amount; ///< 实际还款使用金额
XTP_POSITION_EFFECT_TYPE position_effect; ///< 强平标志
XTPRI error_info; ///< 直接还款发生错误时的错误信息
};
///XTP_CRD_CASH_REPAY_STATUS是一个融资融券直接还款状态类型
typedef enum XTP_CRD_CR_STATUS {
XTP_CRD_CR_INIT = 0, ///< 初始、未处理状态
XTP_CRD_CR_SUCCESS, ///< 已成功处理状态
XTP_CRD_CR_FAILED, ///< 处理失败状态
} XTP_CRD_CR_STATUS;
///XTP_POSITION_EFFECT_TYPE是开平标识类型
typedef uint8_t XTP_POSITION_EFFECT_TYPE;
/// 初始值或未知值开平标识,除期权外,均使用此值
#define XTP_POSITION_EFFECT_INIT 0
/// 开
#define XTP_POSITION_EFFECT_OPEN 1
/// 平
#define XTP_POSITION_EFFECT_CLOSE 2
/// 强平
#define XTP_POSITION_EFFECT_FORCECLOSE 3
/// 平今
#define XTP_POSITION_EFFECT_CLOSETODAY 4
/// 平昨
#define XTP_POSITION_EFFECT_CLOSEYESTERDAY 5
/// 强减
#define XTP_POSITION_EFFECT_FORCEOFF 6
/// 本地强平
#define XTP_POSITION_EFFECT_LOCALFORCECLOSE 7
/// 信用业务追保强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_COVER 8
/// 信用业务清偿强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_CLEAR 9
/// 信用业务合约到期强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_DEBT 10
/// 信用业务无条件强平
#define XTP_POSITION_EFFECT_CREDIT_FORCE_UNCOND 11
/// 未知的开平标识类型
#define XTP_POSITION_EFFECT_UNKNOWN 12
3.返回
无
4.触发函数
// 请求查询融资融券业务中的现金直接还款报单
virtual int QueryCreditCashRepayInfo(uint64_t session_id, int request_id) = 0;
31. OnQueryCreditFundInfo
请求查询信用账户额外信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditFundInfo(XTPCrdFundInfo *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
fund_info:查询到的信用账户额外信息情况
error_info:查询信用账户额外信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
///融资融券特有帐户数据
typedef struct XTPCrdFundInfo
{
double maintenance_ratio; ///< 维持担保品比例
double all_asset; ///< 总资产(包含证券资产)
double all_debt; ///< 总负债
double line_of_credit; ///< 两融授信额度
double guaranty; ///< 两融保证金可用数
double reserved; ///< 保留字段
}XTPCrdFundInfo;
3.返回
无
4.触发函数
// 请求查询信用账户特有信息,除资金账户以外的信息
virtual int QueryCreditFundInfo(uint64_t session_id, int request_id) = 0;
32. OnQueryCreditDebtInfo
请求查询信用账户负债信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditDebtInfo(XTPCrdDebtInfo *debt_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
debt_info:查询到的信用账户合约负债情况
error_info:查询信用账户负债信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///单条融资融券负债记录信息
typedef struct XTPCrdDebtInfo
{
int32_t debt_type; ///< 负债合约类型:0为融资,1为融券,2未知
char debt_id[33]; ///< 负债合约编号
int64_t position_id; ///< 负债对应两融头寸编号
uint64_t order_xtp_id; ///< 生成负债的订单编号,非当日负债无此项
int32_t debt_status; ///< 负债合约状态:0为未偿还或部分偿还,1为已偿还,2为过期未平仓,3未知
XTP_MARKET_TYPE market; ///< 市场
char ticker[XTP_TICKER_LEN]; ///< 证券代码
uint64_t order_date; ///< 委托日期
uint64_t end_date; ///< 负债截止日期
uint64_t orig_end_date; ///< 负债原始截止日期
bool is_extended; ///< 当日是否接收到展期请求:false为没收到,true为收到
double remain_amt; ///< 未偿还金额
int64_t remain_qty; ///< 未偿还融券数量
double remain_principal; ///< 未偿还本金金额
int64_t due_right_qty; ///< 应偿还权益数量
int64_t unknown[2]; ///< 保留字段
}XTPCrdDebtInfo;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
3.返回
无
4.触发函数
// 请求查询信用账户负债合约信息
virtual int QueryCreditDebtInfo(uint64_t session_id, int request_id) = 0;
33. OnQueryCreditTickerDebtInfo
请求查询信用账户指定证券负债未还信息响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditTickerDebtInfo(XTPCrdDebtStockInfo *debt_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
debt_info:查询到的信用账户指定证券负债未还信息情况
error_info:查询信用账户指定证券负债未还信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///融资融券指定证券的融券负债相关信息
typedef struct XTPCrdDebtStockInfo
{
XTP_MARKET_TYPE market; ///< 市场
char ticker[XTP_TICKER_LEN]; ///< 证券代码
int64_t stock_repay_quantity; ///< 融券负债可还券数量
int64_t stock_total_quantity; ///< 融券负债未还总数量
}XTPCrdDebtStockInfo;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
3.返回
无
4.触发函数
// 请求查询指定证券负债未还信息
virtual int QueryCreditTickerDebtInfo(XTPClientQueryCrdDebtStockReq *query_param, uint64_t session_id, int request_id) = 0;
34. OnQueryCreditAssetDebtInfo
请求查询信用账户待还资金的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditAssetDebtInfo(double remain_amount, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
remain_amount:查询到的信用账户待还资金
error_info:查询信用账户待还资金发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
3.返回
无
4.触发函数
// 请求查询信用账户待还资金信息
virtual int QueryCreditAssetDebtInfo(uint64_t session_id, int request_id) = 0;
35. OnQueryCreditTickerAssignInfo
请求查询信用账户可融券头寸信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditTickerAssignInfo(XTPClientQueryCrdPositionStkInfo *assign_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
assign_info:查询到的信用账户可融券头寸信息
error_info:查询信用账户可融券头寸信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///融券头寸证券信息
typedef struct XTPClientQueryCrdPositionStkInfo
{
XTP_MARKET_TYPE market; ///< 证券市场
char ticker[XTP_TICKER_LEN]; ///< 证券代码
int64_t limit_qty; ///< 融券限量(保留字段)
int64_t yesterday_qty; ///< 昨日日融券数量(保留字段)
int64_t left_qty; ///< 剩余可融券数量
int64_t frozen_qty; ///< 冻结融券数量(保留字段)
}XTPClientQueryCrdPositionStkInfo;
3.返回
无
4.触发函数
// 请求查询信用账户可融券头寸信息
virtual int QueryCreditTickerAssignInfo(XTPClientQueryCrdPositionStockReq *query_param, uint64_t session_id, int request_id) = 0;
36. OnQueryCreditExcessStock
融资融券业务中请求查询指定余券信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditExcessStock(XTPClientQueryCrdSurplusStkRspInfo* stock_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
stock_info:查询到的余券信息
error_info:查询信用账户余券信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
///信用业务余券信息
typedef struct XTPClientQueryCrdSurplusStkRspInfo
{
XTP_MARKET_TYPE market; ///< 证券市场
char ticker[XTP_TICKER_LEN]; ///< 证券代码
int64_t transferable_quantity; ///< 可划转数量
int64_t transferred_quantity; ///< 已划转数量
}XTPClientQueryCrdSurplusStkRspInfo;
3.返回
无
4.触发函数
// 融资融券业务中请求查询指定证券的余券
virtual int QueryCreditExcessStock(XTPClientQueryCrdSurplusStkReqInfo *query_param, uint64_t session_id, int request_id) = 0;
37. OnQueryMulCreditExcessStock
融资融券业务中请求查询余券信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryMulCreditExcessStock(XTPClientQueryCrdSurplusStkRspInfo* stock_info, XTPRI *error_info, int request_id, uint64_t session_id, bool is_last) {};
2.参数
stock_info:查询到的余券信息
error_info:查询信用账户余券信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///信用业务余券信息
typedef struct XTPClientQueryCrdSurplusStkRspInfo
{
XTP_MARKET_TYPE market; ///< 证券市场
char ticker[XTP_TICKER_LEN]; ///< 证券代码
int64_t transferable_quantity; ///< 可划转数量
int64_t transferred_quantity; ///< 已划转数量
}XTPClientQueryCrdSurplusStkRspInfo;
3.返回
无
4.触发函数
// 融资融券业务中请求查询余券
virtual int QueryMulCreditExcessStock(XTPClientQueryCrdSurplusStkReqInfo *query_param, uint64_t session_id, int request_id) = 0;
38. OnCreditExtendDebtDate
融资融券业务中负债合约展期的通知。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnCreditExtendDebtDate(XTPCreditDebtExtendNotice *debt_extend_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
debt_extend_info:负债合约展期通知的具体信息,用户可以通过debt_extend_info.xtpid来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单
error_info:负债合约展期订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///用户展期请求的通知
struct XTPCreditDebtExtendNotice
{
uint64_t xtpid; ///<XTP系统订单ID,无需用户填写,在XTP系统中唯一
char debt_id[XTP_CREDIT_DEBT_ID_LEN]; ///<负债合约编号
XTP_DEBT_EXTEND_OPER_STATUS oper_status; ///<展期请求操作状态
uint64_t oper_time; ///<操作时间
};
///XTP_DEBT_EXTEND_OPER_STATUS柜台负债展期操作状态
typedef enum XTP_DEBT_EXTEND_OPER_STATUS {
XTP_DEBT_EXTEND_OPER_PROCESSING = 0, ///<XTP已收到,正在处理中
XTP_DEBT_EXTEND_OPER_SUBMITTED, ///<已提交到集中柜台处理
XTP_DEBT_EXTEND_OPER_SUCCESS, ///<成功
XTP_DEBT_EXTEND_OPER_FAILED, ///<失败
XTP_DEBT_EXTEND_OPER_UNKNOWN ///<未知
}XTP_DEBT_EXTEND_OPER_STATUS;
/// 信用业务合约负债编号长度
#define XTP_CREDIT_DEBT_ID_LEN 33
3.返回
无
4.触发函数
// 融资融券业务中请求负债合约展期
virtual uint64_t CreditExtendDebtDate(XTPCreditDebtExtendReq *debt_extend, uint64_t session_id) = 0;
39. OnQueryCreditExtendDebtDateOrders
请求查询负债合约展期订单响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditExtendDebtDateOrders(XTPCreditDebtExtendNotice *debt_extend_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
debt_extend_info:查询到的负债合约展期情况
error_info:查询负债合约展期发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///用户展期请求的通知
struct XTPCreditDebtExtendNotice
{
uint64_t xtpid; ///<XTP系统订单ID,无需用户填写,在XTP系统中唯一
char debt_id[XTP_CREDIT_DEBT_ID_LEN]; ///<负债合约编号
XTP_DEBT_EXTEND_OPER_STATUS oper_status; ///<展期请求操作状态
uint64_t oper_time; ///<操作时间
};
///XTP_DEBT_EXTEND_OPER_STATUS柜台负债展期操作状态
typedef enum XTP_DEBT_EXTEND_OPER_STATUS {
XTP_DEBT_EXTEND_OPER_PROCESSING = 0, ///<XTP已收到,正在处理中
XTP_DEBT_EXTEND_OPER_SUBMITTED, ///<已提交到集中柜台处理
XTP_DEBT_EXTEND_OPER_SUCCESS, ///<成功
XTP_DEBT_EXTEND_OPER_FAILED, ///<失败
XTP_DEBT_EXTEND_OPER_UNKNOWN ///<未知
}XTP_DEBT_EXTEND_OPER_STATUS;
/// 信用业务合约负债编号长度
#define XTP_CREDIT_DEBT_ID_LEN 33
3.返回
无
4.触发函数
// 融资融券业务中请求查询负债合约展期
virtual int QueryCreditExtendDebtDateOrders(uint64_t xtp_id, uint64_t session_id, int request_id) = 0;
40. OnQueryCreditFundExtraInfo
查询融资融券业务中信用账户附加信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditFundExtraInfo(XTPCrdFundExtraInfo *fund_info, XTPRI *error_info, int request_id, uint64_t session_id) {};
2.参数
fund_info:信用账户附加信息
error_info:查询信用账户附加信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
session_id:资金账户对应的session_id,登录时得到
/// 融资融券帐户附加信息
typedef struct XTPCrdFundExtraInfo
{
double mf_rs_avl_used; ///<当前资金账户购买货币基金使用的融券卖出所得资金占用
///证券市值
double security_capital;
///融资负债
double financing_debts;
///融券负债
double short_sell_debts;
///授信总额度
double contract_debts_load;
char reserve[64-32]; ///<预留空间
}XTPCrdFundExtraInfo;
3.返回
无
4.触发函数
// 请求查询融资融券业务中账戶的附加信息
virtual int QueryCreditFundExtraInfo(uint64_t session_id, int request_id) = 0;
41. OnQueryCreditPositionExtraInfo
查询融资融券业务中信用账户指定证券的附加信息的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryCreditPositionExtraInfo(XTPCrdPositionExtraInfo *fund_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
fund_info:信用账户指定证券的附加信息
error_info:查询信用账户附加信息发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///融资融券帐户持仓附加信息
typedef struct XTPCrdPositionExtraInfo
{
XTP_MARKET_TYPE market; ///<证券市场
char ticker[XTP_TICKER_LEN]; ///<证券代码
double mf_rs_avl_used; ///<购买货币基金使用的融券卖出所得资金占用
char reserve[64]; ///<预留空间
}XTPCrdPositionExtraInfo;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
3.返回
无
4.触发函数
// 请求查询融资融券业务中账戶指定证券的附加信息
virtual int QueryCreditPositionExtraInfo(XTPClientQueryCrdPositionStockReq *query_param, uint64_t session_id, int request_id) = 0;
42. OnOptionCombinedOrderEvent
期权组合策略报单通知。
每次订单状态更新时,都会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,在订单未成交、全部成交、全部撤单、部分撤单、已拒绝这些状态时会有响应,对于部分成交的情况,请由订单的成交回报来自行确认。所有登录了此用户的客户端都将收到此用户的订单响应。
1.函数原型
virtual void OnOptionCombinedOrderEvent(XTPOptCombOrderInfo *order_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
order_info:订单响应具体信息,用户可以通过order_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单,order_info.qty_left字段在订单为未成交、部成、全成、废单状态时,表示此订单还没有成交的数量,在部撤、全撤状态时,表示此订单被撤的数量。order_info.order_cancel_xtp_id为其所对应的撤单ID,不为0时表示此单被撤成功
error_info:订单被拒绝或者发生错误时错误代码和错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///期权组合策略报单响应结构体
struct XTPOptCombOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///证券代码
///char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///数量,此订单的报单数量
int64_t quantity;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,组合拆分涉及的保证金(保留字段)
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
///XTP_ORDER_STATUS_TYPE是报单状态类型
typedef enum XTP_ORDER_STATUS_TYPE
{
XTP_ORDER_STATUS_INIT = 0,///<初始化
XTP_ORDER_STATUS_ALLTRADED = 1, ///<全部成交
XTP_ORDER_STATUS_PARTTRADEDQUEUEING, ///<部分成交
XTP_ORDER_STATUS_PARTTRADEDNOTQUEUEING, ///<部分撤单
XTP_ORDER_STATUS_NOTRADEQUEUEING, ///<未成交
XTP_ORDER_STATUS_CANCELED, ///<已撤单
XTP_ORDER_STATUS_REJECTED, ///<已拒绝
XTP_ORDER_STATUS_UNKNOWN ///<未知订单状态
}XTP_ORDER_STATUS_TYPE;
///XTP_ORDER_SUBMIT_STATUS_TYPE是报单提交状态类型
typedef enum XTP_ORDER_SUBMIT_STATUS_TYPE
{
XTP_ORDER_SUBMIT_STATUS_INSERT_SUBMITTED = 1, ///<订单已经提交
XTP_ORDER_SUBMIT_STATUS_INSERT_ACCEPTED,///<订单已经被接受
XTP_ORDER_SUBMIT_STATUS_INSERT_REJECTED,///<订单已经被拒绝
XTP_ORDER_SUBMIT_STATUS_CANCEL_SUBMITTED,///<撤单已经提交
XTP_ORDER_SUBMIT_STATUS_CANCEL_REJECTED,///<撤单已经被拒绝
XTP_ORDER_SUBMIT_STATUS_CANCEL_ACCEPTED ///<撤单已经被接受
}XTP_ORDER_SUBMIT_STATUS_TYPE;
///TXTPOrderTypeType是报单类型类型
typedef char TXTPOrderTypeType;
///正常
#define XTP_ORDT_Normal '0'
///报价衍生
#define XTP_ORDT_DeriveFromQuote '1'
///组合衍生
#define XTP_ORDT_DeriveFromCombination '2'
///组合报单
#define XTP_ORDT_Combination '3'
///条件单
#define XTP_ORDT_ConditionalOrder '4'
///互换单
#define XTP_ORDT_Swap '5'
///期权组合策略报单附加信息结构体
typedef struct XTPOptCombPlugin {
char strategy_id[XTP_STRATEGY_ID_LEN]; ///< 组合策略代码,比如CNSJC认购牛市价差策略等。合并行权时,此字段可为空
char comb_num[XTP_SECONDARY_ORDER_ID_LEN]; ///< 组合编码,组合申报时,该字段为空;拆分申报时,填写拟拆分组合的组合编码。
int32_t num_legs; ///< 成分合约数
XTPOptCombLegInfo leg_detail[XTP_STRATEGE_LEG_NUM]; ///< 成分合约数组,最多四条腿。
}XTPOptCombPlugin;
/// 组合策略腿合约信息结构体
typedef struct XTPOptCombLegInfo {
char leg_security_id[XTP_TICKER_LEN]; ///< 成分合约代码
XTP_OPT_CALL_OR_PUT_TYPE leg_cntr_type; ///< 合约类型,认沽或认购。
XTP_POSITION_DIRECTION_TYPE leg_side; ///< 持仓方向,权利方或义务方。
XTP_OPT_COVERED_OR_UNCOVERED leg_covered; ///< 备兑标签
int32_t leg_qty; ///< 成分合约数量(张)
}XTPOptCombLegInfo;
/// XTP_OPT_CALL_OR_PUT_TYPE是一个认沽或认购类型
typedef enum XTP_OPT_CALL_OR_PUT_TYPE {
XTP_OPT_CALL = 1, ///<认购
XTP_OPT_PUT = 2, ///<认沽
}XTP_OPT_CALL_OR_PUT_TYPE;
/// XTP_POSITION_DIRECTION_TYPE是一个持仓方向类型
typedef enum XTP_POSITION_DIRECTION_TYPE {
XTP_POSITION_DIRECTION_NET = 0, ///<净
XTP_POSITION_DIRECTION_LONG, ///<多(期权则为权利方)
XTP_POSITION_DIRECTION_SHORT, ///<空(期权则为义务方)
XTP_POSITION_DIRECTION_COVERED, ///<备兑(期权则为备兑义务方)
}XTP_POSITION_DIRECTION_TYPE;
/// XTP_OPT_COVERED_OR_UNCOVERED是否备兑的标签
typedef enum XTP_OPT_COVERED_OR_UNCOVERED {
XTP_POSITION_UNCOVERED = 0, ///<非备兑
XTP_POSITION_COVERED, ///<备兑
}XTP_OPT_COVERED_OR_UNCOVERED;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 本地报单编号的字符串长度
#define XTP_LOCAL_ORDER_LEN 11
/// 期权组合策略最多腿数
#define XTP_STRATEGE_LEG_NUM 4
/// 期权组合策略代码字符串长度
#define XTP_STRATEGY_ID_LEN 10
/// 期权组合策略组合编码字符串长度
#define XTP_SECONDARY_ORDER_ID_LEN 18
3.返回
无
4.触发函数
// 期权组合策略报单录入请求
virtual uint64_t InsertOptionCombinedOrder(XTPOptCombOrderInsertInfo *order, uint64_t session_id) = 0;
// 期权组合策略报单撤单请求
virtual uint64_t CancelOptionCombinedOrder(const uint64_t order_xtp_id, uint64_t session_id) = 0;
43. OnOptionCombinedTradeEvent
期权组合策略成交通知。
订单有成交发生的时候,会被调用,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。所有登录了此用户的客户端都将收到此用户的成交回报。相关订单为部成状态,需要用户通过成交回报的成交数量来确定,OnOrderEvent()不会推送部成状态。
1.函数原型
virtual void OnOptionCombinedTradeEvent(XTPOptCombTradeReport *trade_info, uint64_t session_id) {};
2.参数
trade_info:成交回报的具体信息,用户可以通过trade_info.order_xtp_id来管理订单,通过GetClientIDByXTPID() == client_id来过滤自己的订单。对于上交所,exec_id可以唯一标识一笔成交。当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交了。对于深交所,exec_id是唯一的,暂时无此判断机制。report_index+market字段可以组成唯一标识表示成交回报
session_id:资金账户对应的session_id,登录时得到
///期权组合策略报单成交结构体
struct XTPOptCombTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,组合拆分涉及的保证金
double trade_amount;
///成交序号 --回报记录号,每个交易所唯一,report_index+market字段可以组成唯一标识表示成交回报
uint64_t report_index;
///报单编号 --交易所单号(保留字段)
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
/// 成交执行编号的字符串长度
#define XTP_EXEC_ID_LEN 18
/// 交易所单号的字符串长度
#define XTP_ORDER_EXCH_LEN 17
/// 交易所交易员代码字符串长度
#define XTP_BRANCH_PBU_LEN 7
3.返回
无
4.触发函数
// 期权组合策略报单录入请求
virtual uint64_t InsertOptionCombinedOrder(XTPOptCombOrderInsertInfo *order, uint64_t session_id) = 0;
44. OnCancelOptionCombinedOrderError
期权组合策略撤单出错响应。
此响应只会在撤单发生错误时被回调。
1.函数原型
virtual void OnCancelOptionCombinedOrderError(XTPOptCombOrderCancelInfo *cancel_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
cancel_info:撤单具体信息,包括撤单的order_cancel_xtp_id和待撤单的order_xtp_id
error_info:撤单被拒绝或者发生错误时错误代码和错误信息,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 期权组合策略撤单错误响应结构体
typedef struct XTPOrderCancelInfo XTPOptCombOrderCancelInfo;
///撤单失败响应消息
struct XTPOrderCancelInfo
{
///撤单XTPID
uint64_t order_cancel_xtp_id;
///原始订单XTPID
uint64_t order_xtp_id;
};
3.返回
无
4.触发函数
// 期权组合策略报单撤单请求
virtual uint64_t CancelOptionCombinedOrder(const uint64_t order_xtp_id, uint64_t session_id) = 0;
45. OnQueryOptionCombinedOrders
请求查询期权组合策略报单响应-旧版本接口。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryOptionCombinedOrders(XTPQueryOptCombOrderRsp *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
error_info:查询报单时发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
//期权组合策略报单查询响应结构体
typedef struct XTPOptCombOrderInfo XTPQueryOptCombOrderRsp;
///期权组合策略报单响应结构体
struct XTPOptCombOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///证券代码
///char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///数量,此订单的报单数量
int64_t quantity;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,组合拆分涉及的保证金(保留字段)
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
3.返回
无
4.触发函数
// 请求查询期权组合策略未完结报单-旧版本接口
virtual int QueryOptionCombinedUnfinishedOrders(uint64_t session_id, int request_id) = 0;
// 根据报单ID请求查询期权组合策略报单-旧版本接口
virtual int QueryOptionCombinedOrderByXTPID(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询期权组合策略报单-旧版本接口
virtual int QueryOptionCombinedOrders(const XTPQueryOptCombOrderReq *query_param, uint64_t session_id, int request_id) = 0;
46. OnQueryOptionCombinedOrdersEx
请求查询期权组合策略报单响应-新版本接口。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryOptionCombinedOrdersEx(XTPOptCombOrderInfoEx *order_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
error_info:查询报单时发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///期权组合策略报单响应结构体,新版本
struct XTPOptCombOrderInfoEx
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///证券代码
///char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///数量,此订单的报单数量
int64_t quantity;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,组合拆分涉及的保证金
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户无需关心
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///订单的错误信息
XTPRI order_err_t;
///保留字段
uint64_t unknown[2];
};
3.返回
无
4.触发函数
// 请求查询期权组合策略未完结报单-新版本接口
virtual int QueryOptionCombinedUnfinishedOrdersEx(uint64_t session_id, int request_id) = 0;
// 根据报单ID请求查询期权组合策略报单-新版本接口
virtual int QueryOptionCombinedOrderByXTPIDEx(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询期权组合策略报单-新版本接口
virtual int QueryOptionCombinedOrdersEx(const XTPQueryOptCombOrderReq *query_param, uint64_t session_id, int request_id) = 0;
47. OnQueryOptionCombinedOrdersByPage
分页请求查询期权组合策略报单响应-旧版本接口。
当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedOrdersByPage(XTPQueryOptCombOrderRsp *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 期权组合策略报单查询响应结构体
typedef struct XTPOptCombOrderInfo XTPQueryOptCombOrderRsp;
///期权组合策略报单响应结构体
struct XTPOptCombOrderInfo
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///证券代码
///char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///数量,此订单的报单数量
int64_t quantity;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,组合拆分涉及的保证金(保留字段)
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,用户可用此字段来区分撤单和报单
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
3.返回
无
4.触发函数
// 分页请求查询期权组合策略报单-旧版本接口
virtual int QueryOptionCombinedOrdersByPage(const XTPQueryOptCombOrderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
48. OnQueryOptionCombinedOrdersByPageEx
分页请求查询期权组合策略报单响应-新版本接口。
当order_sequence为0,表明当次查询没有查到任何记录,当is_last为true时,如果order_sequence等于req_count,那么表示还有报单,可以进行下一次分页查询,如果不等,表示所有报单已经查询完毕。一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedOrdersByPageEx(XTPOptCombOrderInfoEx *order_info, int64_t req_count, int64_t order_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
order_info:查询到的一个报单
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///期权组合策略报单响应结构体,新版本
struct XTPOptCombOrderInfoEx
{
///XTP系统订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用,用户自定义
uint32_t order_client_id;
///报单操作引用,用户自定义(暂未使用)
uint32_t order_cancel_client_id;
///撤单在XTP系统中的id,在XTP系统中唯一
uint64_t order_cancel_xtp_id;
///证券代码
///char ticker[XTP_TICKER_LEN];
///交易市场
XTP_MARKET_TYPE market;
///数量,此订单的报单数量
int64_t quantity;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///今成交数量,为此订单累计成交数量
int64_t qty_traded;
///剩余数量,当撤单成功时,表示撤单数量
int64_t qty_left;
///委托时间,格式为YYYYMMDDHHMMSSsss
int64_t insert_time;
///最后修改时间,格式为YYYYMMDDHHMMSSsss
int64_t update_time;
///撤销时间,格式为YYYYMMDDHHMMSSsss
int64_t cancel_time;
///成交金额,组合拆分涉及的保证金
double trade_amount;
///本地报单编号 OMS生成的单号,不等同于order_xtp_id,为服务器传到报盘的单号
char order_local_id[XTP_LOCAL_ORDER_LEN];
///报单状态,订单响应中没有部分成交状态的推送,在查询订单结果中,会有部分成交状态
XTP_ORDER_STATUS_TYPE order_status;
///报单提交状态,OMS内部使用,用户无需关心
XTP_ORDER_SUBMIT_STATUS_TYPE order_submit_status;
///报单类型
TXTPOrderTypeType order_type;
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
///报单编号 --交易所单号,上交所为空,深交所有此字段
char order_exch_id[XTP_ORDER_EXCH_LEN];
///订单的错误信息
XTPRI order_err_t;
///保留字段
uint64_t unknown[2];
};
3.返回
无
4.触发函数
// 分页请求查询期权组合策略报单-新版本接口
virtual int QueryOptionCombinedOrdersByPageEx(const XTPQueryOptCombOrderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
49. OnQueryOptionCombinedTrades
请求查询期权组合策略成交响应。
由于支持分时段查询,一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。此对应的请求函数不建议轮询使用,当报单量过多时,容易造成用户线路拥堵,导致api断线。
1.函数原型
virtual void OnQueryOptionCombinedTrades(XTPQueryOptCombTradeRsp *trade_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
trade_info:查询到的一个成交回报
error_info:查询成交回报发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 成交回报查询响应结构体
typedef struct XTPOptCombTradeReport XTPQueryOptCombTradeRsp;
///期权组合策略报单成交结构体
struct XTPOptCombTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,组合拆分涉及的保证金
double trade_amount;
///成交序号 --回报记录号,每个交易所唯一,report_index+market字段可以组成唯一标识表示成交回报
uint64_t report_index;
///报单编号 --交易所单号(保留字段)
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
3.返回
无
4.触发函数
// 根据期权组合策略委托编号请求查询相关成交
virtual int QueryOptionCombinedTradesByXTPID(const uint64_t order_xtp_id, uint64_t session_id, int request_id) = 0;
// 请求查询期权组合策略的成交回报
virtual int QueryOptionCombinedTrades(const XTPQueryOptCombTraderReq *query_param, uint64_t session_id, int request_id) = 0;
50. OnQueryOptionCombinedTradesByPage
分页请求查询期权组合策略成交响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedTradesByPage(XTPQueryOptCombTradeRsp *trade_info, int64_t req_count, int64_t trade_sequence, int64_t query_reference, int request_id, bool is_last, uint64_t session_id) {};
2.参数
trade_info:查询到的一个成交信息
req_count:分页请求的最大数量
order_sequence:分页请求的当前回报数量
query_reference:当前报单信息所对应的查询索引,需要记录下来,在进行下一次分页查询的时候需要用到
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
// 成交回报查询响应结构体
typedef struct XTPOptCombTradeReport XTPQueryOptCombTradeRsp;
///期权组合策略报单成交结构体
struct XTPOptCombTradeReport
{
///XTP系统订单ID,此成交回报相关的订单ID,在XTP系统中唯一
uint64_t order_xtp_id;
///报单引用
uint32_t order_client_id;
///交易市场
XTP_MARKET_TYPE market;
///订单号,引入XTPID后,该字段实际和order_xtp_id重复。接口中暂时保留。
uint64_t local_order_id;
///成交编号,深交所唯一,上交所每笔交易唯一,当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交
char exec_id[XTP_EXEC_ID_LEN];
///数量,此次成交的数量,不是累计数量
int64_t quantity;
///成交时间,格式为YYYYMMDDHHMMSSsss
int64_t trade_time;
///成交金额,组合拆分涉及的保证金
double trade_amount;
///成交序号 --回报记录号,每个交易所唯一,report_index+market字段可以组成唯一标识表示成交回报
uint64_t report_index;
///报单编号 --交易所单号(保留字段)
char order_exch_id[XTP_ORDER_EXCH_LEN];
///成交类型 --成交回报中的执行类型
TXTPTradeTypeType trade_type;
///组合方向
XTP_SIDE_TYPE side;
///业务类型
XTP_BUSINESS_TYPE business_type;
///交易所交易员代码
char branch_pbu[XTP_BRANCH_PBU_LEN];
///期权组合策略信息
XTPOptCombPlugin opt_comb_info;
};
3.返回
无
4.触发函数
// 分页请求查询期权组合策略成交回报
virtual int QueryOptionCombinedTradesByPage(const XTPQueryOptCombTraderByPageReq *query_param, uint64_t session_id, int request_id) = 0;
51. OnQueryOptionCombinedPosition
请求查询期权组合策略持仓响应。
一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedPosition(XTPQueryOptCombPositionRsp *position_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
position_info:查询到的一个持仓信息
error_info:查询持仓发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
/// 查询期权组合策略持仓信息的响应
struct XTPQueryOptCombPositionRsp {
char strategy_id[XTP_STRATEGY_ID_LEN]; ///< 组合策略代码
char strategy_name[XTP_STRATEGY_NAME_LEN]; ///< 组合策略名称
XTP_MARKET_TYPE market; ///< 交易市场
int64_t total_qty; ///< 总持仓
int64_t available_qty; ///< 可拆分持仓
int64_t yesterday_position; ///< 昨日持仓
XTPOptCombPlugin opt_comb_info; ///< 期权组合策略信息
double secu_comb_margin; ///< 组合占用保证金(公司)(目前暂未启用)
uint64_t reserved[50-1]; ///< 保留字段
};
///期权组合策略报单附加信息结构体
typedef struct XTPOptCombPlugin {
char strategy_id[XTP_STRATEGY_ID_LEN]; ///< 组合策略代码,比如CNSJC认购牛市价差策略等。合并行权时,此字段可为空
char comb_num[XTP_SECONDARY_ORDER_ID_LEN]; ///< 组合编码,组合申报时,该字段为空;拆分申报时,填写拟拆分组合的组合编码。
int32_t num_legs; ///< 成分合约数
XTPOptCombLegInfo leg_detail[XTP_STRATEGE_LEG_NUM]; ///< 成分合约数组,最多四条腿。
}XTPOptCombPlugin;
/// 组合策略腿合约信息结构体
typedef struct XTPOptCombLegInfo {
char leg_security_id[XTP_TICKER_LEN]; ///< 成分合约代码
XTP_OPT_CALL_OR_PUT_TYPE leg_cntr_type; ///< 合约类型,认沽或认购。
XTP_POSITION_DIRECTION_TYPE leg_side; ///< 持仓方向,权利方或义务方。
XTP_OPT_COVERED_OR_UNCOVERED leg_covered; ///< 备兑标签
int32_t leg_qty; ///< 成分合约数量(张)
}XTPOptCombLegInfo;
/// XTP_OPT_CALL_OR_PUT_TYPE是一个认沽或认购类型
typedef enum XTP_OPT_CALL_OR_PUT_TYPE {
XTP_OPT_CALL = 1, ///<认购
XTP_OPT_PUT = 2, ///<认沽
}XTP_OPT_CALL_OR_PUT_TYPE;
/// XTP_POSITION_DIRECTION_TYPE是一个持仓方向类型
typedef enum XTP_POSITION_DIRECTION_TYPE {
XTP_POSITION_DIRECTION_NET = 0, ///<净
XTP_POSITION_DIRECTION_LONG, ///<多(期权则为权利方)
XTP_POSITION_DIRECTION_SHORT, ///<空(期权则为义务方)
XTP_POSITION_DIRECTION_COVERED, ///<备兑(期权则为备兑义务方)
}XTP_POSITION_DIRECTION_TYPE;
/// XTP_OPT_COVERED_OR_UNCOVERED是否备兑的标签
typedef enum XTP_OPT_COVERED_OR_UNCOVERED {
XTP_POSITION_UNCOVERED = 0, ///<非备兑
XTP_POSITION_COVERED, ///<备兑
}XTP_OPT_COVERED_OR_UNCOVERED;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 本地报单编号的字符串长度
#define XTP_LOCAL_ORDER_LEN 11
/// 期权组合策略最多腿数
#define XTP_STRATEGE_LEG_NUM 4
/// 期权组合策略代码字符串长度
#define XTP_STRATEGY_ID_LEN 10
/// 期权组合策略名称字符串长度
#define XTP_STRATEGY_NAME_LEN 32
/// 期权组合策略组合编码字符串长度
#define XTP_SECONDARY_ORDER_ID_LEN 18
3.返回
无
4.触发函数
// 请求查询投资者期权组合策略持仓
virtual int QueryOptionCombinedPosition(const XTPQueryOptCombPositionReq* query_param, uint64_t session_id, int request_id) = 0;
52. OnQueryOptionCombinedStrategyInfo
请求查询期权组合策略信息响应。
一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedStrategyInfo(XTPQueryCombineStrategyInfoRsp *strategy_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
strategy_info:查询到的一个组合策略信息
error_info:查询成交回报发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
/// 查询期权组合策略信息的响应
struct XTPQueryCombineStrategyInfoRsp {
char strategy_id[XTP_STRATEGY_ID_LEN]; ///< 组合策略代码,CNSJC、PXSJC、PNSJC、CXSJC、KS、KKS
char strategy_name[XTP_STRATEGY_NAME_LEN]; ///< 组合策略名称,认购牛市价差策略、认沽熊市价差策略、认沽牛市价差策略、认购熊市价差策略、跨式空头、宽跨式空头
XTP_MARKET_TYPE market; ///< 交易市场
int32_t leg_num; ///< 成分合约个数,1-4个,即下面数组的实际大小
XTPCombLegStrategy leg_strategy[XTP_STRATEGE_LEG_NUM]; ///< 成分合约信息,最多四条腿
XTP_EXPIRE_DATE_TYPE expire_date_type; ///< 到期日要求。枚举值为:同到期日,不同到期日,无到期日要求
XTP_UNDERLYING_TYPE underlying_type; ///< 标的要求。枚举值为:相同标的,不同标的,无标的要求
XTP_AUTO_SPLIT_TYPE auto_sep_type; ///< 自动解除类型。枚举值为:-1:不适用;0:到期日自动解除;1:E-1日自动解除,依次类推
uint64_t reserved[10]; ///< 预留的字段
};
/// 期权组合策略的成分合约信息
struct XTPCombLegStrategy {
XTP_OPT_CALL_OR_PUT_TYPE call_or_put; ///< 合约类型,认沽或认购
XTP_POSITION_DIRECTION_TYPE position_side; ///< 权利仓或者义务仓或备兑义务仓
TXTPExerciseSeqType exercise_price_seq; ///< 行权价顺序
int32_t expire_date_seq; ///< 到期日顺序
int64_t leg_qty; ///< 单份组合策略中包含的此合约张数
};
///XTP_EXPIRE_DATE_TYPE是一个期权组合策略合约到期日要求类型
typedef enum XTP_EXPIRE_DATE_TYPE {
XTP_EXP_DATE_SAME = 0, ///< 相同到期日
XTP_EXP_DATE_DIFF, ///< 不同到期日
XTP_EXP_DATE_NON ///< 无到期日要求
}XTP_EXPIRE_DATE_TYPE;
///XTP_UNDERLYING_TYPE是一个期权组合策略标的要求类型
typedef enum XTP_UNDERLYING_TYPE {
XTP_UNDERLYING_SAME = 0, ///<相同标的
XTP_UNDERLYING_DIFF, ///<不同标的
XTP_UNDERLYING_NON ///<无标的要求
}XTP_UNDERLYING_TYPE;
///XTP_AUTO_SPLIT_TYPE是一个期权组合策略自动解除枚举类型
typedef enum XTP_AUTO_SPLIT_TYPE {
XTP_AUTO_SPLIT_EXPDAY = 0, ///<到期日自动解除
XTP_AUTO_SPLIT_PREDAY, ///<E-1日自动解除
XTP_AUTO_SPLIT_PRE2DAY, ///<E-2日自动解除
XTP_AUTO_SPLIT_NON ///<无效值
}XTP_AUTO_SPLIT_TYPE;
/// 期权组合策略最多腿数
#define XTP_STRATEGE_LEG_NUM 4
/// 期权组合策略代码字符串长度
#define XTP_STRATEGY_ID_LEN 10
/// 期权组合策略名称字符串长度
#define XTP_STRATEGY_NAME_LEN 32
3.返回
无
4.触发函数
// 请求查询期权组合策略信息
virtual int QueryOptionCombinedStrategyInfo(uint64_t session_id, int request_id) = 0;
53. OnQueryOptionCombinedExecPosition
查询期权行权合并头寸的响应。
一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryOptionCombinedExecPosition(XTPQueryOptCombExecPosRsp *position_info, XTPRI *error_info, int request_id, bool is_last, uint64_t session_id) {};
2.参数
position_info:查询到的一个行权合并头寸信息
error_info:查询持仓发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
/// 查询期权行权合并头寸的响应
struct XTPQueryOptCombExecPosRsp {
XTP_MARKET_TYPE market; ///< 市场
char cntrt_code_1[XTP_TICKER_LEN]; ///< 成分合约1代码
char cntrt_name_1[XTP_TICKER_NAME_LEN]; ///< 成分合约1名称
XTP_POSITION_DIRECTION_TYPE position_side_1; ///< 成分合约1持仓方向
XTP_OPT_CALL_OR_PUT_TYPE call_or_put_1; ///< 成分合约1类型
int64_t avl_qty_1; ///< 成分合约1可用持仓数量
int64_t orig_own_qty_1; ///< 成分合约1昨日持仓数量
int64_t own_qty_1; ///< 成分合约1当前持仓数量
char cntrt_code_2[XTP_TICKER_LEN]; ///< 成分合约2代码
char cntrt_name_2[XTP_TICKER_NAME_LEN]; ///< 成分合约2名称
XTP_POSITION_DIRECTION_TYPE position_side_2; ///< 成分合约2持仓方向
XTP_OPT_CALL_OR_PUT_TYPE call_or_put_2; ///< 成分合约2类型
int64_t avl_qty_2; ///< 成分合约2可用持仓数量
int64_t orig_own_qty_2; ///< 成分合约2昨日持仓数量
int64_t own_qty_2; ///< 成分合约2当前持仓数量
int64_t net_qty; ///< 权利仓净头寸
int64_t order_qty; ///< 行权合并委托数量,不含已拒单已撤单。
int64_t confirm_qty; ///< 行权合并已确认数量
int64_t avl_qty; ///< 可行权合并数量
uint64_t reserved[49]; ///< 保留字段
};
///XTP_POSITION_DIRECTION_TYPE是一个持仓方向类型
typedef enum XTP_POSITION_DIRECTION_TYPE {
XTP_POSITION_DIRECTION_NET = 0, ///<净
XTP_POSITION_DIRECTION_LONG, ///<多(期权则为权利方)
XTP_POSITION_DIRECTION_SHORT, ///<空(期权则为义务方)
XTP_POSITION_DIRECTION_COVERED, ///<备兑(期权则为备兑义务方)
}XTP_POSITION_DIRECTION_TYPE;
///XTP_OPT_CALL_OR_PUT_TYPE是一个认沽或认购类型
typedef enum XTP_OPT_CALL_OR_PUT_TYPE {
XTP_OPT_CALL = 1, ///<认购
XTP_OPT_PUT = 2, ///<认沽
}XTP_OPT_CALL_OR_PUT_TYPE;
/// 存放证券代码的字符串长度
#define XTP_TICKER_LEN 16
/// 存放证券名称的字符串长度
#define XTP_TICKER_NAME_LEN 64
3.返回
无
4.触发函数
// 请求查询期权行权合并头寸
virtual int QueryOptionCombinedExecPosition(const XTPQueryOptCombExecPosReq* query_param, uint64_t session_id, int request_id) = 0;
54. OnQueryStrategy
algo业务中查询策略列表的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnQueryStrategy(XTPStrategyInfoStruct* strategy_info, char* strategy_param, XTPRI *error_info, int32_t request_id, bool is_last, uint64_t session_id) {};
2.参数
strategy_info:策略具体信息
strategy_param:此策略中包含的参数,如果error_info.error_id为0时,有意义
error_info:查询查询策略列表发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:用于用户定位查询响应的ID,由用户自定义
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
4.触发函数
///用户登录algo服务器请求
virtual int LoginALGO(const char* ip, int port, const char* user, const char* password, XTP_PROTOCOL_TYPE sock_type, const char* local_ip = NULL) = 0;
55. OnStrategyStateReport
algo业务中策略运行时策略状态通知。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnStrategyStateReport(XTPStrategyStateReportStruct* strategy_state, uint64_t session_id) {};
2.参数
strategy_state:用户策略运行情况的状态通知
session_id:资金账户对应的session_id,登录时得到
///策略状态结构体
typedef struct XTPStrategyStateReportStruct
{
XTPStrategyInfoStruct m_strategy_info; ///< 策略信息
int64_t m_strategy_qty; ///< 策略总量
int64_t m_strategy_ordered_qty; ///< 策略已委托数量
int64_t m_strategy_cancelled_qty; ///< 策略已撤单数量
int64_t m_strategy_execution_qty; ///< 策略已成交数量
int64_t m_strategy_unclosed_qty; ///< 策略未平仓数量(T0卖出数量-买入数量)
double m_strategy_asset; ///< 策略总金额
double m_strategy_ordered_asset; ///< 策略已委托金额
double m_strategy_execution_asset; ///< 策略已成交金额
double m_strategy_execution_price; ///< 策略执行价格
double m_strategy_market_price; ///< 策略市场价
double m_strategy_price_diff; ///< 策略执行价差
double m_strategy_asset_diff; ///< 策略执行绩效(T0资金预净收入)
XTPRI m_error_info; ///< 错误信息
} XTPStrategyStateReport;
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
56. OnALGOUserEstablishChannel
algo业务中用户建立算法通道的消息响应。
算法通道建立成功后,才能对用户创建策略等操作,一个用户只能拥有一个算法通道,如果之前已经建立,则无需重复建立。
1.函数原型
virtual void OnALGOUserEstablishChannel(char* user, XTPRI* error_info, uint64_t session_id) {};
2.参数
user:用户名
error_info:建立算法通道发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误,即算法通道成功
session_id:资金账户对应的session_id,登录时得到
3.返回
无
57. OnInsertAlgoOrder
algo业务中报送策略单的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnInsertAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
strategy_info:用户报送的策略单的具体信息
error_info:报送策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
4.触发函数
///algo业务中用户报算法单请求
virtual int InsertAlgoOrder(uint32_t strategy_type, uint64_t client_strategy_id, char* strategy_param, uint64_t session_id) = 0;
58. OnCancelAlgoOrder
algo业务中撤销策略单的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnCancelAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
2.参数
strategy_info:用户撤销的策略单的具体信息
error_info:撤销策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
session_id:资金账户对应的session_id,登录时得到
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
4.触发函数
///algo业务中用户撤销算法单请求
virtual int CancelAlgoOrder(bool cancel_flag, uint64_t xtp_strategy_id, uint64_t session_id) = 0;
59. OnAlgoDisconnected
当客户端与AlgoBus通信连接断开时,该方法被调用。
请不要堵塞此线程,否则会影响algo的登录,与Algo之间的连接,断线后会自动重连,用户无需做其他操作。
1.函数原型
virtual void OnAlgoDisconnected(int reason) {};
2.参数
reason:错误原因,请与错误代码表对应
3.返回
无
60. OnAlgoConnected
当客户端与AlgoBus断线后重新连接时,该方法被调用,仅在断线重连成功后会被调用。
1.函数原型
virtual void OnAlgoConnected() {};
2.参数
无
3.返回
无
61. OnStrategySymbolStateReport
algo业务中策略运行时策略指定证券执行状态通知。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnStrategySymbolStateReport(XTPStrategySymbolStateReport* strategy_symbol_state, uint64_t session_id) {};
2.参数
strategy_symbol_state:用户策略指定证券运行情况的状态通知
session_id:资金账户对应的session_id,登录时得到
///策略中指定证券的算法执行状态结构体
typedef struct XTPStrategySymbolStateReportStruct
{
XTPStrategyInfoStruct m_strategy_info; ///< 策略信息
char m_ticker[XTP_TICKER_LEN]; ///< 证券代码
XTP_MARKET_TYPE m_market; ///< 市场
XTP_SIDE_TYPE m_side; ///< 买卖方向,=0时为T0单
int64_t m_strategy_qty; ///< 策略总量
int64_t m_strategy_ordered_qty; ///< 策略已委托数量
int64_t m_strategy_cancelled_qty; ///< 策略已撤单数量
int64_t m_strategy_execution_qty; ///< 策略已成交数量
int64_t m_strategy_buy_qty; ///< 策略已买入数量(T0)
int64_t m_strategy_sell_qty; ///< 策略已卖出数量(T0)
int64_t m_strategy_unclosed_qty; ///< 策略未平仓数量(T0卖出数量-买入数量)
double m_strategy_asset; ///< 策略总金额
double m_strategy_ordered_asset; ///< 策略已委托金额
double m_strategy_execution_asset; ///< 策略已成交金额
double m_strategy_buy_asset; ///< 策略买入金额(T0)
double m_strategy_sell_asset; ///< 策略卖出金额(TO)
double m_strategy_unclosed_asset; ///< 策略未平仓金额(T0)
double m_strategy_asset_diff; ///< 策略毛收益增强金额(T0)
double m_strategy_execution_price; ///< 策略执行价格
double m_strategy_market_price; ///< 策略市场价
double m_strategy_price_diff; ///< 策略执行价差(T0时为毛增强收益率)
XTPRI m_error_info; ///< 错误信息
} XTPStrategySymbolStateReport;
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
///XTP_SIDE_TYPE是买卖方向类型
typedef uint8_t XTP_SIDE_TYPE;
///买(新股申购,ETF买,配股,信用交易中担保品买)
#define XTP_SIDE_BUY 1
///卖(逆回购,ETF卖,信用交易中担保品卖)
#define XTP_SIDE_SELL 2
///申购
#define XTP_SIDE_PURCHASE 7
///赎回
#define XTP_SIDE_REDEMPTION 8
///拆分
#define XTP_SIDE_SPLIT 9
///合并
#define XTP_SIDE_MERGE 10
///改版之后的side的备兑,暂不支持
#define XTP_SIDE_COVER 11
///改版之后的side锁定(对应开平标识为开)/解锁(对应开平标识为平)
#define XTP_SIDE_FREEZE 12
/// 融资买入
#define XTP_SIDE_MARGIN_TRADE 21
/// 融券卖出
#define XTP_SIDE_SHORT_SELL 22
/// 卖券还款
#define XTP_SIDE_REPAY_MARGIN 23
/// 买券还券
#define XTP_SIDE_REPAY_STOCK 24
/// 现金还款(不放在普通订单协议,另加请求和查询协议)
//#define XTP_SIDE_CASH_REPAY_MARGIN 25
/// 现券还券
#define XTP_SIDE_STOCK_REPAY_STOCK 26
/// 余券划转
#define XTP_SIDE_SURSTK_TRANS 27
/// 担保品转入
#define XTP_SIDE_GRTSTK_TRANSIN 28
/// 担保品转出
#define XTP_SIDE_GRTSTK_TRANSOUT 29
///组合策略的组合
#define XTP_SIDE_OPT_COMBINE 31
///组合策略的拆分
#define XTP_SIDE_OPT_SPLIT 32
///组合策略的管理员强制拆分
#define XTP_SIDE_OPT_SPLIT_FORCE 33
///组合策略的交易所强制拆分
#define XTP_SIDE_OPT_SPLIT_FORCE_EXCH 34
///未知或者无效买卖方向
#define XTP_SIDE_UNKNOWN 50
3.返回
无
62. OnNewStrategyCreateReport
algo业务中当用户报送母单创建时,包括其他客户端报送创建母单,此用户所有连接都会有此推送消息,此函数将会被调用。
1.函数原型
virtual void OnNewStrategyCreateReport(XTPStrategyInfoStruct* strategy_info, char* strategy_param, uint64_t session_id) {};
2.参数
strategy_info:用户策略的具体信息
strategy_param:此母单策略的参数
session_id:资金账户对应的session_id,登录时得到
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
4.触发函数
///algo业务中用户报算法单请求
virtual int InsertAlgoOrder(uint32_t strategy_type, uint64_t client_strategy_id, char* strategy_param, uint64_t session_id) = 0;
63. OnStrategyRecommendation
当算法推荐有响应时,该方法被调用。
1.函数原型
virtual void OnStrategyRecommendation(bool basket_flag, XTPStrategyRecommendationInfo* recommendation_info, char* strategy_param, XTPRI *error_info, int32_t request_id, bool is_last, uint64_t session_id) {};
2.参数
basket_flag:是否将满足条件的推荐结果打包成母单篮的标志,与请求一致,如果此参数为true,那么请以返回的strategy_param为准
recommendation_info:推荐算法的具体信息,当basket_flag=true时,此结构体中的market和ticker将没有意义,此时请以strategy_param为准
strategy_param:算法参数,可直接用来创建母单,如果error_info.error_id为0时,有意义
error_info:请求推荐算法发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误
request_id:此消息响应函数对应的请求ID
is_last:此消息响应函数是否为request_id这条请求所对应的最后一个响应,当为最后一个的时候为true,如果为false,表示还有其他后续消息响应
session_id:资金账户对应的session_id,登录时得到
///推荐算法结构体
typedef struct XTPStrategyRecommendationInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTP_MARKET_TYPE m_market; ///< 交易市场
char m_ticker[XTP_TICKER_LEN]; ///< 证券代码
char m_reserved[64]; ///< 保留域
} XTPStrategyRecommendationInfo;
///XTP_MARKET_TYPE市场类型,交易里使用
typedef enum XTP_MARKET_TYPE
{
XTP_MKT_INIT = 0,///<初始化值或者未知
XTP_MKT_SZ_A = 1,///<深圳A股
XTP_MKT_SH_A, ///<上海A股
XTP_MKT_BJ_A, ///<北京A股
XTP_MKT_HK, ///<港股
XTP_MKT_UNKNOWN ///<未知交易市场类型
}XTP_MARKET_TYPE;
3.返回
无
4.触发函数
///请求推荐算法
virtual int StrategyRecommendation(bool basket_flag, char* basket_param, uint64_t session_id, int32_t request_id) = 0;
64. OnModifyAlgoOrder
algo业务中修改已有策略单的响应。
需要快速返回,否则会堵塞后续消息,当堵塞严重时,会触发断线。
1.函数原型
virtual void OnModifyAlgoOrder(XTPStrategyInfoStruct* strategy_info, XTPRI *error_info, uint64_t session_id) {};
2.参数 strategy_info:用户修改后策略单的具体信息 error_info:修改策略单发生错误时返回的错误信息,当error_info为空,或者error_info.error_id为0时,表明没有错误 session_id:资金账户对应的session_id,登录时得到
///策略信息结构体
typedef struct XTPStrategyInfoStruct
{
uint16_t m_strategy_type; ///< 策略类型
XTPStrategyStateType m_strategy_state; ///< 策略状态
uint64_t m_client_strategy_id; ///< 客户策略id
uint64_t m_xtp_strategy_id; ///< xtp策略id
} XTPStrategyInfoStruct;
///XTPStrategyStateType策略状态类型
typedef uint8_t XTPStrategyStateType;
///创建中
#define XTP_STRATEGY_STATE_CREATING 0
///已创建
#define XTP_STRATEGY_STATE_CREATED 1
///开始执行中
#define XTP_STRATEGY_STATE_STARTING 2
///已执行
#define XTP_STRATEGY_STATE_STARTED 3
///停止中
#define XTP_STRATEGY_STATE_STOPPING 4
///已停止
#define XTP_STRATEGY_STATE_STOPPED 5
///销毁中
#define XTP_STRATEGY_STATE_DESTROYING 6
///已销毁
#define XTP_STRATEGY_STATE_DESTROYED 7
///发生错误
#define XTP_STRATEGY_STATE_ERROR 8
3.返回
无
4.触发函数
///algo业务中修改已有的算法单
virtual int ModifyAlgoOrder(uint64_t xtp_strategy_id, char* strategy_param, uint64_t session_id) = 0;