问题1:RegisterFensServer配置地址格式,和参数说明?
答:RegisterFensServer第一个参数格式填sfens://IP:PORT,第二个参数填账号,调用Init接口后API底层和极速柜台建立连接
连接成功,会收到OnFrontConnected成功回调。
连接失败,终端会打印连接失败,可以通过GetApiErrorMsg获取相信信息。
问题2:GetApiErrorMsg获取错误信息编码格式?
答:ReqXXX函数返回错误码,可以通过GetApiErrorMsg获取正确的错误信息,内部错误返回编码格式未GB2312
问题3:BindSessionID参数nSessionID说明?
答:绑定用户指定的会话,内部取值范围为1-16,一个会话只允许一个策略终端在线,支持16个会话同时在线。
1-12:私有流按照会话主推(会话间的私有流隔离)
13-16:私有流按照账号全量主推(可以收到账号全量私有流)
问题4:Init函数参数pInitCfgField字段APICheckVersion说明?
答:该参数必须传入API_STRUCT_CHECK_VERSION,API内部会做头文件和so版本的匹配,如果不匹配,Init函数返回失败。
问题5:Init调用后续认证和登录的流程?
答:OnFrontConnected--->ReqAuthenticate--->OnRspAuthenticate--->ReqUserLogin---->OnRspUserLogin
问题6:ReqUserLogin函数参数pReqUserLogin字段UserApplicationType说明?
答:该字段表示投资者端应用类别,必须传入'7'
问题7:关于每个ReqXXX函数中参数nRequestID说明?
答:该字段用于异步发送请求和应答匹配,Req请求中nRequestID和OnRspXXX中的nRequestID相同,表明是该请求异步收到的应答。
问题8:报单请求字段OrderRef说明?
答:该字段报单请求中赋值,后续该笔委托的私有流(委托和成交回报)都会携带该字段,表明是同一笔委托。
规则:OnRspUserLogin登录应答返回MaxOrderRef,后续按照每次+1的方式下单
OrderRef取值范围:0-8388607,必须按照同一个会话连续递增的规则。
支持使用SessionID+OrderRef撤单,如果不使用该字段,OrderRef赋值为0
OrderRef赋值建议使用ParseIntRight赋值,详情参考hsfastdemo
问题9:报单请求字段SeatIndex说明?
答:该字段表示席位索引,0表示后台轮询席位申报,其他:指定席位申报
该席位索引范围可以通过ReqQrySeatID查询,从OnRspQrySeatID获取。
1)如果SeatIndex不在后台范围内,后台选择一个席位申报。
2)如果ReqQrySeatID查询,OnRspQrySeatID返回为空,可能后台报盘未正常启动。
问题10:撤单支持的模式。
答:两种模式(推荐使用交易所类别+主场单号撤单)
1,交易所类别+主场单号(ExchangeID+OrderSysID);
2)交易所类别+ 会话 + 委托引用 (ExchangeID+Session+OrderRef)
如果nano交易柜台重启,重启之前的单子使用交易所类别+ 会话 + 委托引用撤单不生效。
问题11:关于OnRspErrorOrderInsert,OnRspOrderAction,OnRtnOrder,OnRtnTrade说明。
答:OnRspErrorOrderInsert:下单柜台的错误的应答
OnRspOrderAction:撤单正确和错误应答)
OnRtnOrder:委托,撤单,废单交易所回报(废单原先请查看ErrorMsg)
OnRtnTrade:成交交易所回报
详情参考 恒生极速交易接口技术手册
问题12:下单的委托状态变更。

问题13:撤单的委托状态变更。

问题14:断线重连注意事项
答:连接断开时,会回调OnFrontDisconnected,API内部会自动重连;
当连接建立成功后,回调OnFrontConnected,用户必须重新登录。
问题15:ReqXXX错误码返回值
答:函数返回0表示成功,否则是一个错误码,通过GetApiErrorMsg函数可获取到详细错误信息(中文信息使用GB2312显示)。
问题16:后台错误码返回值
答:后台返回错误码对应错误信息,详情参考HSError.xml
问题17:柜台报单错误和交易所废单信息
答:柜台错误信息:OnRspErrorOrderInsert回调中字段pRspInfo对应的ErrorMsg。
交易所废单信息:OnRtnOrdert回调中字段pRtnOrder对应的ErrorMsg。
问题18:API在断线重连期间收到交易所回报如何处理?
答:API在断线重连,重新登录后,API和柜台进行私有流序号协商,会对断线重连期间的私有流回报进行补缺处理,不会因为网络不稳定而造成丢包。
问题19:OnRtnOrdert如何判断单子的最终状态?
答:OrderStatus为HS_OS_Abandoned或者OrderVolume=TradeVolume+CancelVolume
问题20:如何使用报单预热功能?
答:1. 调用ReqPreHeatOrderInsert接口主动发起发起报单预热:
要求客户必须有efvi报单权限,请求入参中必须填写版本为FUTU_EFVI_REQUET::PACK_VER,必须填写订单类型为FUTU_EFVI_REQUET::EnumFuncType::FT_PreHeatOrder,必须填写合法的交易所和合约代码,必须填写正确的Token,其余请求参数可不填写。具体必填字段参考下图红框所示。

调用此接口必须在客户登录成功之后。
调用此接口预热报单链路,不会发生实际报单行为,只会预热nano柜台内部链路。
2.调用SetOrderPreHeat接口设置API内部定时预热:
要求客户必须有efvi报单权限,必须填写合法的交易所和合约代码。可以多次调用并设置不同的合约代码。
调用此接口必须在客户登录成功之后。
成功调用此接口后,API内部独立线程每500毫秒定时向柜台发送相应合约报单预热。设置成功后不支持取消。
问题21:如何使用指定席位撤单功能?
1. 指定席位撤单必须使用V1.2.0.0及以上版本的NanoApi
2. 裸协议撤单ReqNakedProtocolOrderAction和回报加速撤单ReqFpgaOrderAction两个接口支持指定席位撤单
3. 撤单结构体变更:新增字段席位索引SeatIndex和撤单模式ActionMode,参考HSExtendStruct.h头文件
SeatIndex:填写指定的撤单席位索引
ActionMode:0 - 自适应指定席位撤单,如果指定的席位索引不可用,柜台会自动寻找可用的席位进行撤单;1 - 强制按指定席位撤单,如果指定的席位索引不可用,柜台会返回撤单错误应答给NanoApi
4. 新增FUTU_EFVI_REQUET::PACK_VER_V2版本号用于标记指定席位撤单结构体,指定席位撤单时必须填写该版本号
5. 使用示例:以裸协议撤单为例,回报加速撤单同理
//自适应指定席位撤单模式,指定席位 5 进行撤单
CNakedProtocolReqOrderActionField orderAction{};
orderAction.Ver = FUTU_EFVI_REQUET::PACK_VER_V2; // !!版本号必须是PACK_VER_V2
orderAction.FuncType = FUTU_EFVI_REQUET::EnumFuncType::FT_CancelOrder;
strcpy(orderAction.OrderSysID, "example");
orderAction.ExchangeID = FUTU_EFVI_REQUET::EnumExchType::ET_Shfe;
orderAction.SeatIndex = 5; // !!指定的席位索引号
orderAction.ActionMode = 0;// !!撤单模式:自适应
orderAction.Token = 99999;
//强制指定席位撤单模式,指定席位 5 进行撤单
CNakedProtocolReqOrderActionField orderAction{};
orderAction.Ver = FUTU_EFVI_REQUET::PACK_VER_V2; // !!版本号必须是PACK_VER_V2
orderAction.FuncType = FUTU_EFVI_REQUET::EnumFuncType::FT_CancelOrder;
strcpy(orderAction.OrderSysID, "example");
orderAction.ExchangeID = FUTU_EFVI_REQUET::EnumExchType::ET_Shfe;
orderAction.SeatIndex = 5; // !!指定的席位索引号
orderAction.ActionMode = 1;// !!撤单模式:强制
orderAction.Token = 99999;
6. 注意事项:有效的撤单席位索引只能是原委托的席位索引和管理席位的席位索引(管理席位是指该席位在柜台配置了管理席位属性,可与经纪公司确认)。
问题22:如何使用裸协议报单功能
1. 若使用EFVI模式,在调用Init接口前,先调用SetEFVIParams接口设置EFVI连接参数
2. 账号登录成功后,调用API接口GetConnectInfo获取裸协议对接的Token\IPAddress\Port。若获取到的Token字段为0表示当前账号不支持裸协议接入。Token每次登录都会变更。
3. 正确填写CNakedProtocolReqOrderInsertField结构体的字段,以下列举几个必须填写的非业务字段,其余业务字段根据具体报单情况填写:
- Ver:版本号,填写FUTU_EFVI_REQUET::PACK_VER
- FuncType:订单类型,根据枚举值填写FUTU_EFVI_REQUET::EnumFuncType::FT_Order
- Token:报单Token,来自之前
GetConnectInfo接口获取的Token
4. 调用ReqNakedProtocolOrderInsert接口,传入之前赋值的CNakedProtocolReqOrderInsertField参数
5. 判断ReqNakedProtocolOrderInsert接口返回值,非0表示报单在API内部校验阶段出现错误
6. 报单到柜台后,如果柜台校验报单错误,通过OnRspErrorOrderInsert回调返回错误号和错误信息;如果柜台校验报单正常,报单被发到交易所,通过OnRtnOrder回调已报的委托回报
7,如果一个tick内会连续执行多个报单和撤单指令,可以在全部指令完成后,调用EfviPollWait函数(efvi内部机制,报文发送之后需要确认,API内部也会在连续50ms没有报单指令后,执行EfviPollWait)
注意:当前裸协议报单暂不支持E卡加速命令exasock启动
问题23:如何自己组装裸协议报文
1,账号登录成功后,调用API接口GetConnectInfo获取裸协议对接的Token\IPAddress\Port。若获取到的Token字段为0表示当前账号不支持裸协议接入。投资者可以自己组装payload报单和撤单
IPAddress:报单的DestIP(固定不变)
Port:报单的DestPort(切换交易日会变化)
Token:柜台返回的token,动态生成,定位账号使用(每次登陆都会重新生成)
2,裸协议payload(详情参考HSExtendStruct.h)
期货合约报单payload:

期权合约报单payload:

撤单payload(只支持OrderSysID撤单)

回报加速撤单payload(回报加速用户可以使用该报文撤单)

