EMT API ver: 2.17.0
EMT API常见问题

Q1 API是否支持自动重连?

  • API支持自动重连。当发生断线时,API将回调OnDisconnected()断线通知;自动重连成功后,API将回调OnConnected()连接成功通知。

Q2 如发生断线,回调中应做何处理?

  • 当客户端与交易后台的通信连接断开时,OnDisconnected()方法将被调用;API内部支持自动重连机制,此接口仅用做断线通知,需要快速返回,用户无需在此函数中做特殊处理。

Q3 API是否支持多账号登录?

  • API支持多账户登录,不同账户使用登录返回的sessionid进行区分。

Q4 同一个账号是否支持使用多个客户端进行多点登录?

  • TCP交易模式支持单账号多点登录;需注意多点登录时,同一账号所使用的不同客户端的client_id不可相同,即同一账号同一client_id只可建立一个会话,在该会话退出前,不可重复登录。
  • UDP交易模式不允许单账号UDP多点登录,UDP与TCP可多点登录。

Q5 client_id可以为任意数吗?

  • client_id请在[1-127]范围区间内取值。

Q6 订阅公共流SubscribePublicTopic的Restart方式和Quick方式是什么区别?

  • Restart方式将在Login时推送当交易日全部交易流水;Quick方式只会推送本次登录后所执行的的交易回报;注意该方法需在Login前调用生效。

Q7 Linux系统下调用Login接口非root用户会报警告,且采集不到终端信息?

  • 系统告警信息如下:

    WARNING: you should run this program as super-user.
    WARNING: output may be incomplete or inaccurate, you should run this program as super-user.
  • 此问题原因是您当前使用的用户无lshw命令权限,请首先使用root用户安装lshw命令,再visudo配置sudo权限(或修改/etc/sudoers),如下以test用户为例进行配置:

    > whereis lshw
    lshw: /usr/sbin/lshw /usr/share/man/man1/lshw.1.gz
    > visudo
    ## Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    test ALL=(ALL) /usr/sbin/lshw
    ## Allows people in group wheel to run all commands
    %wheel ALL=(ALL) ALL
    test ALL=(ALL) NOPASSWD:ALL

Q8 调用InserOrder接口返回的订单号order_emt_id是唯一的吗?

  • 在当前交易日内,保证全局唯一;跨交易日不保证唯一性。

Q9 获取到的错误信息为何出现乱码?

  • API错误信息中文编码统一为UTF-8,烦请检查编码格式。

Q10 启动程序报错“无法加载接口驱动,错误编号126”,如何处理?

  • 该问题可能由于您windows系统中vc环境不完整,请下载msvcp140.dllvcruntime140.dllvcruntime140_1.dll,放置于emt_api.dll同级目录下后再次运行程序;该vc运行库也可联系EMT技术支持人员获取。

Q11 登录后交易和查询均正常,但过一小段时间后交易和查询报错1003(消息发送失败)怎么回事?

  • 该问题为心跳超时,服务端主动断开此连接导致;请检查设置心跳间隔接口SetHeartBeatInterval(),可选择不调用,或设置为5s到15s内任意值。

Q12 实盘EMT系统什么时间启动?

  • 早8点45分系统开始提供服务。

Q13 若干分页查询方法该如何使用?

  • EMT API提供的若干分页查询方法使用逻辑一致;
  • 请求时入参req_count为单页请求记录数,限制为200条之内,reference为上一次收到的分页查询结果中带回来的索引号,如您本次是从头查询,请传0;
  • 在回调函数中,当sequence为0,表明当次查询没有查到任何记录;当is_last为true时,如果sequence等于req_count,表示还有后续结果,可以进行下一次分页查询请求,如果不等,表示所有结果已经查询完毕;一个查询请求可能对应多个响应,需要快速返回,否则会堵塞后续消息。

Q14 订单推送状态有哪些?

  • 订单推送会调用OnOrderEvent()方法,该方法可能收到以下6种订单状态:订单初始化、已报未成交、全部成交、部分撤单、全部撤单、拒单;订单的部分成交状态仅通过OnTradeEvent()方法回调。

Q15 委托下单同步返回的订单编号和委托推送回调有先后时序关系吗?

  • InsertOrder()下单接口同步返回的订单编号在先,OnOrderEvent()订单推送在后。

Q16 仿真测试环境UDP交易模式无法登录?

  • 实盘支持UDP/TCP两种API交易模式,仿真测试请使用TCP接入。

Q17 进行市价委托时,可用资金高于当前市价价格但报错资金不足?

  • 市价委托时柜台将按涨停价预扣资金。

Q18 调用绑核方法SetCpuAffinity后,为何使用top看不到?

  • SetCpuAffinity()为将API内部处理线程绑核,可通过top -Hp pid查看线程绑核情况,并确保该方法在Login前调用。

Q19 实盘的报单流速是如何控制的?

  • 报单流速由EMT交易系统控制,用户当前无法自行设置,超过流控阈值将报错211008(超过限定流速)。

Q20 两融两地分仓模式下,资金转出失败?

  • 两融两地分仓模式下不允许盘中做资金转出,请在盘后15:30后做转出操作。

Q21 InsertOrder接口是线程安全的吗?

  • 是。

Q22 两融担保品划转持仓数量是实时增减吗?

  • 担保品转出为实时扣减数量;担保品转入并不会实时增加持仓数量,需当日清算后确认数量。

Q23 Login登录报错4104(clientid重复)如何处理?

  • clientid重复即当前账户已经有一个相同clientid的客户端登录过且仍未退出,请检查该账户的多点登录情况。

Q24 Login登录报错4102(白名单检测失败)如何处理?

  • 实盘账户转入EMT系统时需绑定白名单IP,如使用未开设白名单的服务器执行API登录,将报此错误。

Q25 交易API回调方法是单线程串行的吗?

  • 不是;查询类回调方法保证为串行回调,交易类回调方法如OnOrderEvent()OnTradeEvent()OnCancelOrderError()等可能由另一内部线程回调。

Q26 行情API调用登录接口成功后,订阅行情为什么会返回错误码“-10”,并且报错“no session”?

  • 在调用CreateQuoteApi()创建行情API实例时要保证其参数data_type值与账号权限一致:
    • data_type=1:L1权限; data_type=2:L2权限;

Q27 行情查询接口调用频率是多少?

  • QueryAllTickers() / QueryAllTickersFullInfo()调用频率为8s~10s一次;
  • QueryLatestInfo() / QueryTickersPriceInfo() / QueryMinuteInfo() / QueryMinHistoryInfo()调用频率为1s~3s一次;
  • 实盘请确保控制查询接口调用频率。

Q28 行情查询接口的回调方法应如何使用?

  • 查询接口仅需调用一次,回调函数即不断接收查询数据,直至is_last标志为true,表示查询数据全部接收。回调函数接收数据时无需再次调用查询接口。

Q29 日志输出等级是否可选择?

  • 在调用CreateTraderApi()创建交易API实例时可选择日志等级,交易API日志不会产生控制台输出。
  • 在调用CreateQuoteApi()创建行情API实例时可选择日志等级,日志等级对控制台输出及日志文件均有影响。

Q30 为什么订阅逐笔行情时告知不支持该消息类型?

  • 需确保使用的账号支持L2行情权限。

Q31 查询最新快照信息与订阅快照行情有什么区别?

  • 查询接口为非实时行情,订阅接口返回实时行情。
  • 查询回调方法调用次数与查询数据量相关,订阅回调方法在退订前始终活跃。

Q32 行情API回调方法之间是单线程串行的吗?

  • 是。

Q33 行情API断线重连后需要重新订阅吗?

  • 在断线重连前执行成功的订阅会被恢复,无需用户发起重新订阅。

Q34 分时行情与实时行情有何区别?

  • 分时行情按分钟为周期推送,实时行情与交易所行情推送保持同步。建议积极使用实时行情。

Q35 仿真测试环境提供L2行情吗?

  • 仿真测试环境仅提供L1行情,暂不提供L2行情。

Q36 订单委托中的order_client_id如何填写?

  • 订单委托中入参order_client_id为客户报单编号,完全由客户自定义,订单推送中会将该字段带回。

Q37 OnOrderEvent如何区分该笔为委托还是撤单?

  • 可使用OnOrderEvent()回调EMTOrderInfo中的order_submit_status提交状态来判断,也可使用order_cancel_emt_id非0来判断。

Q38 如何唯一标识一笔成交?

  • 可使用OnTradeEvent()回调EMTTradeReport中的exec_id交易所成交编号来唯一标识一笔成交,当发现存在两笔成交回报exec_id相同,则为自成交。

Q39 请求接口中的request_id是什么规则?如果请求填写相同的request_id,会在应答中原样带回吗?

  • 请求接口中的request_id完全由用户自定义,请求中填写的request_id会在对应的应答回调方法中原样带回。

Q40 一个账户在多点登录的情况下,订单推送多个端都会收到,如何过滤本端自己的订单?

  • 推荐使用GetClientIDByEMTID()方法获取该笔订单下单的客户端id,由于不同端client_id各不相同,可用此方法过滤本端自己的订单。此方法为同步返回。

Q41 订单终态有哪些?

  • 订单终态可能为全部成交、部分撤单、已撤单、已拒绝。