华锐交易执行平台标准网关API FAQ

发布于 2020-03-10 作者 luojian345 189次 浏览 版块 ATP-华锐核心交易平台

Archforce Gateway API FAQ

API 使用对接问题

  1. 对于客户端如何应对AGW集群的主备高可用?
    a. AGW主备模式下,每个Agw登录用户如user1都需要维护各自的分区索引信息;如主AGW挂了,客户端在连接备时
    需要使用各自登录用户名并传入与之对应的分区索引信息;
    b. 如果整个集群都挂了,之后集群走应急启动;建议客户端做全量接收即将分区索引信息设置为(0,-1)或者将分区索
    引信息填空;

  2. 客户端什么情况下需要重新发起Connect?
    客户端收到事件EndofConnect,为内部重连失败,需要开发者主动再次发起connect;

  3. 客户端能否使用与API编译的GCC版本不一致?
    使用时需注意gcc版本与API编译gcc版本一致。否则会存在编译或者运行时core问题。

  4. 主动调用Close接口那个事件是真实的连接彻底关闭不会内部重连?
    以EndofConnect事件为准Close事件可认为是通知客户端内部的状态;

  5. 如客户端使用多个api实例,应该为不同的api实例创建不同的ClientHandler对象吗,ClientHandler的生
    命周期如何?
    建议不同的API实例使用不同的clienthandler;它的生命周期长于api实例,因为api实例内部引用了
    clienthandler的指针;

  6. 回报消息中的索引记录为什么是间断不连续的?
    此索引号是非严格递增的即递增但非连续;(AGW下行为Singleton模式时)

  7. 客户端发起Connect后立即发委托,造成关闭连接是什么原因?
    需要等login事件后才能进行委托;

  8. 客户使用boost环境开发出现core?
    boost版本需要与API一致(1.62.0),否则存在运行时core或者编译问题;(API_rc1.7版本以后不依赖boost环境)

  9. API能否前向兼容?
    如发生增加/删除/修改字段定义等需要重新编译客户端;

  10. 主备切换客户端如何处理?

    前   提:
    	- AGW主备高可用部署主AGW_11,备AGW_12;
    	- 客户端只能与主建立TCP连接;
    	- 客户端使用网关登陆用户名(user1)连接主AGW_11并发送委托、接收成交回报,
    	  客户端接收成交回报后需维护网关登陆用户名(user1)对应的分区索引信息(下行断点信息);
    异常事件:
    	- 主AGW_11异常退出,备AGW_12切换为主;
    问题:
    	- 客户端切换连接新的主AGW_12并接收与AGW_11断开之前未收到成交回报信息?
    处理步骤:
    	- 当主AGW_11退出时客户端与AGW_11连接断开,此时客户端需主动连接备AGW_12;
    	- 客户端在连接备AGW_12时需要使用与连接主AGW_11相同的网关登陆用户名(user1)以及与之对应的分区索引信息,
    	- 否则可能会出现登陆不成功现象;
    另:如果客户端需要接收该网关登陆用户名下所有的成交回报信息,则在连接时使用该登陆用户名以及特殊分区索引信息(0,-1)即可;
    
  11. 可以在回调函数中进行耗时的处理么?
    建议回调函数中仅做简单的赋值处理;下行单个API实例的下行仅一个独立线程。

  12. API是否线程安全?
    Connect不是线程安全,回调的接口是线程安全的。

  13. 一个客户端可以与AGW建立多个连接码?
    一个API对象只与AGW建立一个连接,要建立多个连接则需要创建多个API对象实例;

  14. Connect的函数ReportSync同步回报数据map默认值为空,这个作用是什么?客户端需要维护它?
    对于首次登录时,默认填空;之后接收成交回报、委托状态响应时需要更新该map,当客户端收到EndOfConnect
    事件主动调用Connect时需要把该reportsync参数置为客户端记录的map值,如此客户端能收到断开连接后未收到
    的回报数据;

  15. Connect的函数参数Locations连接地址Vectorstd::string每个地址为”IP:PORT”形式,多个地址是主备还是负载均衡?
    主备关系,默认第一个地址为主,如断开连接时API将会自动在主备之间轮询连接直到连接成功或者重连次数使
    用完毕为止。

  16. demo例子中为什么没有设置standardheader字段和checksum字段?
    消息报文的包头和包尾API自动添加,开发者只需关系消息体的处理。

  17. Connect函数的用户是客户账户还是类似营业部柜员的概念,网关连接上限是多少?
    这个账户是连接AGW的登录账户,而非客户相关账户;网关连接默认配置是8192个连接,可配。

  18. 委托主推 跟成交主推需要订阅吗?还是说跟查询委托响应 查询成交响应一并在OnMessage里面回调回来了?
    如果账号重登陆了怎么去维护这个主推?
    a. 不需要订阅,委托响应、成交、查询结果都在OnMessage中回调;
    b. Connect函数的参数:”ReportSync”: 回报同步数据(下行断点),这个参数来控制客户登录成功后从哪开始
    同步请求回传消息;
    c. 第一次登录时没有回报数据,此参数传空即可;后续收到委托状态响应和成交回报的时候,消息中会带有
    分区号和索引号信息,客户端需要记住,重新调用Connect的时候带上.

  19. 编译报错:error LNK2038 ‘MT_xxx’ doesn’t match value ‘MD_xxx’ in xxxxxx.obj
    解决方案属性页:“配置属性” -> “C/C++” -> “代码生成”:运行库 选项选择 多线程DLL(/MT)

  20. 网关登陆密码的加密算法是啥,客户登陆的密码也要按这个算法加密吗?
    网关密码是sha256加密后在用base64编码转换,可参考demo程序;客户号登陆的密码不需要加密

  21. api使用什么编码?
    UTF-8

  22. api使用的CPU为什么这么高?
    降低报单时延,尽快将订单发送出去;如测试环境可以使用环境变量降低:export ATP_AGW_API_ENV=no_low_lantecy

gw_API篇

  1. gw_api SendMessage接口是线程安全的吗?
    线程安全

  2. gw_api字符创是以’\0’作为结束符么?
    不是,gw_api的消息字段定义对于array[N],N表示字类型定义长度:字符串实际长度小于字段类型最大长度N时
    需要右补空格;大于N时被截断

  3. FillDefaultValue在哪里实现的?
    在RootPacket.h中,是基类中的一个函数;此函数默认将所有字段赋初值,这样默认分配的内存不是脏数据。

ATPTradeAPI篇

  1. ATPTradeAPI字符串需要以’\0’结尾吗?
    需要

  2. ATPTradeAPI区分内部委托状态响应以及交易所状态响应吗?
    a. 区分;
    b. OnRspOrderStatusInternalAck为TE状态响应;
    c.OnRspOrderStatusAck为交易所订单状态响应;

API业务相关

公共篇

  1. 最大可委托数 和理论可委托数有什么区别,需要给客户显示那个字段做评估?
    a. 理论可委托是不考虑交易所接口限制,一般不小于最大可委托数;
    b. 最大可委托数给客户展示
  2. TransacTime 指的是交易所时间还是TE时间?
    a. 委托状态响应消息如果exec_type=1时,report_time为TE时间,
    b. 其他为交易所时间

  3. 目前币种支持美元么?
    目前仅支持人民币;

  4. 委托状态响应消息如何区分交易所确认消息?
    委托发送给TE后,会先给AGW回复exec_type=1的委托状态响应,报到交易所后返回的委托状态响应
    exec_type != 1;

  5. 关于股东账户分属于两个分区查询所有,如何操作?
    使用不同的股东账户的查询消息分别查询。

  6. ATP价格是使用double类型么?
    不是,ATP Price价格保留4位小数即乘以10000;例如: 价格为3.1415,ATP price字段的值应该
    为31415,同理数量:qty保留2位小数即乘以100

  7. 撤单委托的状态和被撤单委托状态是一致的是吗?
    撤单委托状态响应中委托状态就是被撤委托的

  8. 如何判断委托状态响应属于撤单委托
    a. (orig_cli_ord_no!=0)
    b. (orig_cli_ord_no=0&&reject_reason_code=22)
    c. (orig_cli_ord_no=0&&reject_reason_code=46)

  9. 查询消息如何查询所有?
    如股东账户都配置在同一个分区,查所有股东账户需要填空,其他字段按照协议文档规范;

  10. 关于委托数量Qty字段描述?
    上海债券是手,其他是(股)

  11. 委托与委托状态响应的关联key是什么?
    custid+client_seq_id ; client_seq_id由客户端执行保证唯一;

  12. 委托状态响应与成交回报关联key是什么?
    委托状态响应关联成交回报使用:custid+客户订单合同号;(适用V2.17.0之后的版本)

  13. 委托状态响应+成交回报的唯一键
    a. 客户号+客户合同号 唯一
    b. 报盘合同号+市场 唯一

  14. 委托状态响应中LeavesQty字段在撤单时的含义:

    报告公共字段LeavesQty在成交时表示剩余未成交数量,
      	1.上交所市价转撤单时表示自动撤单数量,
      	2.上交所市价转限价时表示转化为限价的数量;
      	3.深交所表示未成交数量;
    报告公共字段LeavesQty在撤单时,如果上交所订单为限价为撤单成功数量,深交所为撤单成功数量;
      	1.撤单失败 = 委托量-成交量
    
  15. 看demo,客户号id 资金账户id 是填一样的?
    ATP没有这种限制,测试数据问题

  16. 资金解释?
    a. T+0是可取,普通买入是T+1
    b. 总资产 = 资金查询结果的(AvailableT1 + FrozenAll) + SUM(股份查询的MarketValue)

期权业务

  1. 合约持仓与保证金资金查询该使用哪个接口?
    保证金账户资金查询接口:ReqAccountContractFundQuery
    合约持仓查询接口:ReqAccountContractShareQuery

  2. 合约持仓查询查所有,字段如何填?
    security_id 填空即可,其他相关账户字段都需要填;(只能查询单市场所有合约信息)

  3. 报价撤单使用哪个接口?
    报价使用原委托报文,需要数量填0;即可对原合约进行撤单;如果是双边报价则都会撤单

  4. 报价返回的确认是哪个回调函数?
    报价响应为此函数OnRspQuoteStatusAck

  5. 报价更新时,原报价撤单确认消息通过哪个回调返回?
    OnRspOrderStatusAck

  6. 报价成交回报通过哪个函数返回?
    OnRspOptionAuctionTradeER

附表1 限价及各类市价委托申报 (具体值请参考枚举类型)

委托类型 TimeInForce OrdType MaxPriceLevels MinQty 对应上交所委托方式 对应深交所委托方式 备注
限价委托 0 2 0 0 限价-GFD 限价委托 -
本方最优 0 U 0 0 N/A 本方最优 -
对手方最优剩余转限价 0 1 1 0 N/A 对手方最优 -
立即成交剩余撤销 3 1 0 0 市价-IOC 立即成交剩余撤销 -
全额成交或撤销 3 1 0 =OrderQty 市价-FOK 全额成交或撤销 -
最优五档全额成交剩余撤销 3 1 5 0 最优五档即时成交剩余撤销 最优五档全额成交剩余撤销 -
最优五档即时成交剩余转限价 0 1 5 0 最优五档即时成交剩余转限价 N/A -
市价剩余转限价 0 K 0 0 市价剩余转限价申报 N/A -
限价全额成交或撤销 3 2 0 =OrderQty 限价-FOK 限价全额成交或撤销 -
增强限价 0 2 0 0 增强限价 增强限价 港股通
竞价限价 9 2 0 0 N/A 竞价限价 港股通
竞价限价 0 2 1 0 竞价限价 N/A 港股通

附表2 执行类型与订单状态的映射关系

原委托是订单

ExecType OrdStatus 说明
1 10 交易时段订单申报交易所;非交易时段转交易时段订单报到交易所
1 9 非交易时段
1 8 内部拒单
0 0 订单被交易所确认
0 11 订单被交易所确认,该单已被撤单关联,但撤单尚未撤单成功
4 3 交易所主动撤单,可查看RejectReasonCode字段,获取交易所撤
单原因
4 4 交易所主动撤单,可查看RejectReasonCode字段,获取交易所撤
单原因
8 8 交易所拒单,可查看RejectReasonCode字段,获取交易所拒绝原

原委托是撤单

ExecType OrdStatus 说明
1 11 原单待撤
1 12 原单部成待撤
1 10 原单当前为正报状态,需要查看拒绝原因代码,原单无法被撤销
1 8 原单已是拒绝状态,无法被撤单
1 5 原单当前为部分撤销状态,无法再被撤单
1 4 原单已是撤销状态,无法再被撤单
1 3 原单已是部成部撤状态,无法再被撤单
1 2 原单已是全部成交状态,无法再被撤单
1 1 原单当前是部分成交状态,需要查看拒绝原因代码,原单无法被撤
1 0 原单当前已被交易所确认,需要查看拒绝原因代码,原单无法被撤
4 4 原单被撤销
4 5 原单被部分撤销,当交易所撤单比成交先到时出现(中间状态)
4 3 原单被撤销成功,为部成部撤状态
8 0 交易所拒单,原单已被交易所确认,可查看RejectReasonCode字
段,获取交易所拒绝原因
8 1 交易所拒单,原单已是部分成交状态,可查看RejectReasonCode
字段,获取交易所拒绝原因
8 2 交易所拒单,原单已是全部成交状态,可查看RejectReasonCode
字段,获取交易所拒绝原因
8 3 交易所拒单,原单已是部成部撤状态,可查看RejectReasonCode
字段,获取交易所拒绝原因
8 4 交易所拒单,原单已是撤销状态,可查看RejectReasonCode字段
,获取交易所拒绝原因
8 5 交易所拒单,原单已是部分撤销状态,可查看RejectReasonCode
字段,获取交易所拒绝原因
8 8 交易所拒单,原单已是拒绝状态,可查看RejectReasonCode字段
,获取交易所拒绝原因
8 10 交易所拒单,原单已是被交易所确认状态,可查看RejectReason
Code字段,获取交易所拒绝原因

成交状态

ExecType OrdStatus 说明
F 1 部分成交
F 2 全部成交
F 3 部成部撤
F 12 部成待撤
F 5 部分撤销,撤单确认先于成交回报的处理的状态(最后一笔成交回报
回来之前的一直保持此状态,直到最后一笔成交回报回来后状态
将修改为部成部撤)
J 2 全部成交(黄金交易所成交)
收藏
分享
暂无回复