02.常见问题答疑
订单立即部分成交后未收到XTF_OS_Queuing的Order消息¶
如订单发送后,立即部分成交或全部成交,将不会产生“未成交还在队列”的Queuing状态,onOrder直接进入PartTraded或AllTraded状态。
开平标志说明¶
不通交易所有各自的规则,目前情况如下:
- 对于中金所、大商所、广期所,请求填Close 、CloseToday、CloseYesterday时,都转化为Close,交易所默认先平昨后平今;回报返回Close;如果平仓错误,柜台会将客户填入的com_offset_flag再返回给客户。
- 对于上期所、能源所时,平今只能用CloseToday,回报返回的是CloseToday;平昨可以使用Close、CloseYesterday,都转化为CloseYesterday,回报中是closeyesterday;如果平仓错误,柜台会将客户填入的com_offset_flag再返回给客户。
在上述规则下,释放仓位时,遵循先成交的仓,先被平的规则。
回报中OrderLocalNo收到负值¶
- 柜台清流启动后的历史报单OrderLocalNo固定为“0xd8888888”
- 非本柜台报单OrderLocalNo固定为“0x88888888”
- 错误为1172,“请求中的报单编号不存在”时,返回0
- 本柜台Monitor管理端平仓的客户端报单编号固定为“0xe8888888”
- 其他情况返回订单真实编号
actionlocalno收到负值¶
非本柜台报单固定为“0x86666666”
调用API时遇到 /sys/firmware/dmi/tables/smbios_entry_point: Permission denied 或者 /dev/mem: Permission denied 错误,或错误码为2058¶
根据看穿式监管的要求,投资者登录柜台时需要采集硬件信息,采集的时候需要调用dmidecode,没有赋予API root权限将会遇到该错误,解决方法如下:
- 赋予root权限,以sudo的方式运行程序
- 使用root用户增加dmidecode的s位,具体命令为chmod +s /usr/sbin/dmidecode,这样就可以用普通用户权限得到看穿式监管需要的信息
以上两种方案均可解决获取权限失败的问题,请用户根据实际情况选择处理。
如使用crontab任务执行,需在执行脚本或计划任务命令中添加export PATH=${PATH}:/usr/sbin
或source /etc/profile
指定dmidecode命令位置,。
TCP连接后,是否会发送心跳?¶
如果是初次建立TCP连接,而没有任何其他操作,API不会发送心跳数据。柜台在一段时间后,会断开该TCP连接。
如果用户登录后再登出,此时TCP连接依然保持,且会发送心跳数据。
如何获得合约属于哪个交易所?¶
首先根据合约ID查询XTFInstrument对象;\ 然后通过XTFInstrument的getExchange()接口,即可获得交易所对象;
示例代码:
C++ | |
---|---|
1 2 |
|
如何获得交易日信息?¶
Text Only | |
---|---|
1 2 |
|
示例代码:
C++ | |
---|---|
1 2 |
|
如何获取最后一次报单的本地编号?¶
报单的本地编号是由用户自身维护的,一般在报单过程中是递增的,以保证编号的唯一性。如果API发生重启,最后一次的本地编号会丢失。API在重新登录柜台后,柜台会把上一次API报单的最后一个本地报单编号,返回给用户。可以通过下面的方法获取:
C++ | |
---|---|
1 2 |
|
如何获得交易所报单通道号?¶
- 首先获得交易所对象指针,对于双交易所需要按需查询;
- 然后通过交易所对象的getChannelCount()查询交易所通道数量;
- 最后用getChannel(int pos)接口获得通道号的值;
示例代码:
C++ | |
---|---|
1 2 3 4 5 |
|
裸协议报单后收不到API回报¶
- 未登录或者登录掉线后的报单将无法收到回报
- MessageId错误
- clientindex或token错误,可通过以下方法获取
C++ | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
C++ | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
API登录提示错误的资金账号¶
资金账号填写错误或API更换accountid未重新初始化
获取不到合约涨跌停价时,该合约不支持自成交风控¶
使用investorid作为accountid登录柜台后,accountid变成investor_1¶
- API登录AccountID不以_结尾的客户账号都识别替换为_1结尾
- API登录AccountID以_3、_4、_5结尾的客户账号都识别替换为_2结尾
大量回报接收时,出现TCP断链¶
TCP链接的缓存区大小受内核参数影响,柜台在某些极速场景下,可能会由于客户端接收缓存区不足而导致断链,可以在配置文件中 /etc/sysctl.conf 增加如下配置即可:
Text Only | |
---|---|
1 2 3 4 5 |
|
“3.3 API”的结构体定义和“协议报单”的结构体定义,同名结构体定义有差别(例如“struct CXeleFtdcOrderField”)。使用时,应该以哪边的为准呢?¶
裸协议报单,用协议报单的结构体定义;API报单,用API头文件里面的定义。