CQdpFtdcTraderSpi接口
CQdpFtdcTraderSpi实现了事件通知接口。用户必需派生CQdpFtdcTraderSpi接口,编写事件处理方法来处理感兴趣的事件 。
OnFrontConnected方法
当客户端与QDP系统建立起通信连接时(还未登录前),该方法被调用。
函数原形:
void OnFrontConnected();
本方法在完成初始化后调用,可以在其中完成用户登录任务。
OnFrontDisconnected方法
当客户端与QDP系统通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。自动重 连地址,可能是原来注册的地址,也可能是系统支持的其它可用的通信地址,它由程序自动选择。
函数原形:
void OnFrontDisconnected(int nReason);
参数:
nReason: 连接断开原因
0x1001: 网络读失败
0x1002: 网络写失败
0x2001: 接收心跳超时
0x2002: 发送心跳失败
0x2003: 收到错误报文
OnHeartBeatWarning方法
心跳超时警告。当长时间未收到报文时,该方法被调用。
函数原形:
void OnHeartBeatWarning(int nTimeLapse);
参数:
nTimeLapse: 距离上次接收报文的时间
OnPackageStart方法
报文回调开始通知。当API收到一个报文后,首先调用本方法,然后是各数据域的回调,最后是报文回调结束通知。
函数原形:
void OnPackageStart(int nTopicID, int nSequenceNo);
参数:
nTopicID: 主题代码(如私有流、公共流、行情流等)
nSequenceNo: 报文序号
OnPackageEnd方法
报文回调结束通知。当API收到一个报文后,首先调用报文回调开始通知,然后是各数据域的回调,最后调用本方法。
函数原形:
void OnPackageStart(int nTopicID, int nSequenceNo);
参数:
nTopicID: 主题代码(如私有流、公共流、行情流等)
nSequenceNo: 报文序号
OnRspError方法
针对用户请求的出错通知。
函数原形:
void OnRspError(CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pRspInfo: 返回用户响应信息的地址。
响应信息CQdpFtdcRspInfoField说明,下面的pRspInfo响应消息结构与此相同。
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| ErrorID | Int | 是 | 错误代码 |
| ErrorMsg | Char(81) | 是 | 错误信息 |
nRequestID: 返回用户操作请求的ID,该ID 由用户在操作请求时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRspUserLogin方法
当客户端发出登录请求之后,QDP返回响应时,该方法会被调用,通知客户端登录是否成功。
函数原形:
void OnRspUserLogin(CQdpFtdcRspUserLoginField *pRspUserLogin, CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pRspUserLogin: 返回用户登录信息的地址。
用户登录应答信息CQdpFtdcRspUserLoginField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| TradingDay | Char(9) | 是 | 交易日 |
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| UserID | Char(16) | 是 | 登录账号 |
| LoginTime | Char(9) | 是 | 登录时间,格式hh:mm:ss |
| MaxOrderLocalID | Char(23) | 否 | 用户最大本地报单号,登录成功时返回的都是空值 |
| TradingSystemName | Char(61) | 否 | 交易系统名称 |
| DataCenterID | Int | 否 | 保留字段,目前没什么用 |
| PrivateFlowSize | Int | 有 | 用户私有流当前长度 |
| UserFlowSize | Int | 有 | 保留字段,目前没什么用 |
| DataCenterID | Int | 否 | 保留字段,目前没什么用 |
| SessionID | Int | 有 | 当前连接的会话编号 |
| FrontID | Int | 有 | 当前连接的前置编号 |
pRspInfo: 返回用户响应信息的地址。特别注意在有连续的成功的响应数据时,中间有可能返回NULL,但第一次不会,以下同。错误代码为0时,表示操作成功,以下同。
响应信息CQdpFtdcRspInfoField说明,详见OnRspError方法。
nRequestID: 返回用户登录请求的ID,该ID 由用户在登录时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRspUserLogout方法
当客户端发出退出请求之后,QDP返回响应时,该方法会被调用,通知客户端退出是否成功。
函数原形:
void OnRspUserLogout(CQdpFtdcRspUserLogoutField *pRspUserLogout, CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pRspUserLogout: 返回用户退出信息的地址。
用户登出应答信息CQdpFtdcRspUserLogoutField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| UserID | Char(16) | 是 | 登录账号 |
| LogoutReason | Int | 是 | Session退出原因 |
pRspInfo: 返回用户响应信息的地址。
响应信息CQdpFtdcRspInfoField说明,详见OnRspError方法。
nRequestID: 返回用户登出请求的ID,该ID 由用户在登出时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRspUserPasswordUpdate方法
用户密码修改应答。当客户端发出用户密码修改指令后,QDP返回响应时,该方法会被调用。
函数原形:
void OnRspUserPasswordUpdate(CQdpFtdcUserPasswordUpdateField *pUserPasswordUpdate, CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pUserPasswordUpdate: 指向用户密码修改结构的地址,包含了用户密码修改请求的输入数据。
用户密码修改应答信息CQdpFtdcUserPasswordUpdateField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| UserID | Char(16) | 是 | 登录账号 |
| OldPassword | Char(41) | 是 | 旧密码 |
| NewPassword | Char(41) | 是 | 新密码 |
pRspInfo: 返回用户响应信息的地址。
响应信息CQdpFtdcRspInfoField说明,详见OnRspError方法。
nRequestID: 返回用户密码修改请求的ID,该ID由用户在密码修改时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRspOrderInsert方法
报单录入应答。当客户端发出过报单录入指令后,QDP返回响应时,该方法会被调用。
函数原形:
void OnRspOrderInsert(CQdpFtdcInputOrderField *pInputOrder, CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pInputOrder: 指向报单录入结构的地址,包含了提交报单录入时的输入数据,和后台返回的报单编号。
用户报单应答信息CQdpFtdcInputOrderField说明
| 字段名称 | 字段类型 | 返回字段 是否有值 | 字段说明 |
|---|---|---|---|
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| ExchangeID | Char(11) | 是 | 交易所代码 |
| OrderSysID | Char(31) | 是 | 交易所报单号(报单成功交易所会返回) |
| InvestorID | Char(19) | 是 | 投资者代码 |
| UserID | Char(16) | 是 | 登录账号 |
| InstrumentID | Char(31) | 是 | 合约代码 |
| UserOrderLocalID | Int | 是 | 用户本地报单号 |
| OrderPriceType | Char(1) | 是 | 报单类型 |
| Direction | Char(1) | 是 | 买卖方向 |
| OffsetFlag | Char(1) | 是 | 开平仓标识 |
| HedgeFlag | Char(1) | 是 | 投机套保标志 |
| LimitPrice | Double | 是 | 价格 |
| Volume | Int | 是 | 数量 |
| TimeCondition | Char(1) | 是 | 报单有效期类型 |
| GTDDate | Char(9) | 否 | GTD日期 |
| VolumeCondition | Char(1) | 是 | 成交量类型 |
| MinVolume | Int | 否 | 最小成交量 |
| StopPrice | Double | 否 | 止损价 |
| ForceCloseReason | Char(1) | 是 | 强平原因 |
| IsAutoSuspend | Int | 否 | 自动挂起标志 |
| BusinessUnit | Char(21) | 否 | 业务单元 |
| UserCustom | Char(65) | 否 | 用户自定义域 |
| BranchID | Char(7) | 否 | 营业部代码 |
| RecNum | Int | 否 | 记录编号 |
| BusinessType | Char(1) | 否 | 业务 类别 |
pRspInfo: 返回用户响应信息的地址。
响应信息CQdpFtdcRspInfoField说明,详见OnRspError方法。
nRequestID: 返回报单录入操作请求的ID,该ID由用户在报单录入时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRspOrderAction方法
报单操作应答。报单操作包括报单的撤销、报单的挂起(暂不支持)、报单的激活(暂不支持)、报单的修改(暂不支持)。当客户端发出过报单操作指令后,QDP返回响应时,该方法会被调用。
函数原形:
void OnRspOrderAction(CQdpFtdcOrderActionField *pOrderAction, CQdpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
参数:
pOrderAction: 指向报单操作结构的地址,包含了提交报单操作的输入数据,和后台返回的报单编号。
用户撤单应答信息CQdpFtdcOrderActionField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| ExchangeID | Char(11) | 是 | 交易所代码 |
| OrderSysID | Char(31) | 是 | 交易所报单号 |
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| InvestorID | Char(19) | 是 | 投资者编号 |
| UserID | Char(16) | 是 | 登录账号 |
| InstrumentID | Char(31) | 否 | 合约代码 |
| UserOrderActionLocalID | Int | 是 | 此次撤单操作的用户本地报单号,和报单请求的UserOrderLocalID一样递增 |
| UserOrderLocalID | Int | 是 | 用户本地报单号(撤单操作是QDP的报单,否则该字段没有值) |
| ActionFlag | Char(1) | 是 | 报单操作标志,撤单正常填写QDP_FTDC_AF_Delete |
| LimitPrice | Double | 否 | 价格 |
| VolumeChange | Int | 否 | 数量变化 |
| RecNum | Int | 否 | 记录编号 |
| FrontID | Int | 否 | 前置编号 |
| SessionID | Int | 否 | 会话编号 |
pRspInfo: 返回用户响应信息的地址。
响应信息CQdpFtdcRspInfoField说明,详见OnRspError方法。
nRequestID: 返回用户报单操作请求的ID,该ID由用户在报单操作时指定。
bIsLast: 指示该次返回是否为针对nRequestID的最后一次返回。
OnRtnFlowMessageCancel方法
数据流回退通知(暂未启用)。
函数原形:
void OnRtnFlowMessageCancel(CQdpFtdcFlowMessageCancelField *pFlowMessageCancel);
参数:
pFlowMessageCancel: 数据流回退。
数据流回退通知信息CQdpFtdcFlowMessageCancelField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| SequenceSeries | Int | 是 | 序列系列号 |
| TradingDay | Char(9) | 是 | 交易日 |
| DataCenterID | Int | 否 | 数据中心代码 |
| StartSequenceNo | Int | 是 | 回退起始序列号 |
| EndSequenceNo | Int | 是 | 回退结束序列号 |
OnRtnTrade方法
成交回报。当发生成交时QDP会通知客户端,该方法会被调用。
函数原形:
void OnRtnTrade(CQdpFtdcTradeField *pTrade);
参数:
pTrade: 指向成交信息结构的地址。
成交信息CQdpFtdcTradeField说明
| 字段名称 | 字段类型 | 返回字段是否有值 | 字段说明 |
|---|---|---|---|
| TradingDay | Char(9) | 是 | 委托日期,为交易日,不是当前的自然日 |
| BrokerID | Char(11) | 是 | 经纪公司编号 |
| ExchangeID | Char(11) | 是 | 交易所代码 |
| ParticipantID | Char(11) | 是 | 会员号 |
| SeatID | Char(13) | 是 | 席位号 |
| InvestorID | Char(19) | 是 | 投资者代码 |
| UserID | Char(16) | 是 | 登录账号 |
| TradeID | Char(21) | 是 | 成交编号 |
| OrderSysID | Char(31) | 是 | 交易所报单号 |
| InstrumentID | Char(31) | 是 | 合约代码 |
| UserOrderLocalID | Int | 是 | 用户本地报单号 |
| Direction | Char(1) | 是 | 买卖方向 |
| OffsetFlag | Char(1) | 是 | 开平仓标识 |
| HedgeFlag | Char(1) | 是 | 投机套保标志 |
| TradePrice | Double | 是 | 成交价格 |
| TradeVolume | Int | 是 | 成交数量 |
| TradeTime | Char(9) | 是 | 成交时间,该时间由交易所提供 |