Page tree
Skip to end of metadata
Go to start of metadata

XTP API常见问题

1问:VS下为什么编译的时候,发生链接错误?

答:由于我们的库文件目前只支持64位的,所以请看一下默认的编译选项是否是64位的,如果不是,请选择64位进行编译。


2问:接口是否为异步的?

答:API中登录Login()接口为同步的,返回后,可以视为已经登录成功。其余所有接口均为异步的。


3问:当调用接口失败时,如何知道失败原因?

答:可以调用api的接口GetApiLastError()来获取失败原因。如果调用api没有出错,GetApiLastError返回的则是上一次的错误。


4问:CreateTraderApi()中的client_id可以相同么?

答:可以。对于同一account,相同的client_id只能保持一个session连接,后面的登录在前一个session存续期间,无法连接。


5问:CreateTraderApi()中的save_file_path必须输入么?

答:必须输入,而且必须是一个有可写权限的实际存在的路径。


6问:同一个账户account可以多个客户端同时登陆么?

答:对于同一账户account的连接,由api的client_id来进行区分。同一个account,可以同时由不同的client_id来进行登陆连接,但是对于同一对account和client_id,一次只能有一个连接,client_id建议选择1~100以内,超过100的,属于xtp预使用区间,client_id的总使用个数建议不超过5个。


7问:同一个api支持多个账号account登录么?

答:支持。用户在登录后会得到一个session_id,用户需要记录下account对应的session_id,所有的接口函数都要用到session_id。


8问:连接成功后的session会失效么?

答:在同一个交易日内,如果没有出现断线,api也没有销毁,此次的session不会失效。当然,如果用户在登录后,因为阻塞或者其他什么原因导致心跳包无法按时发送到服务器,那么当其他用户用相同的account和client_id再次登录时,前一个session可视为失效。


9问:在响应函数中为何不很快返回有可能导致断线?

答:在服务器向客户端发送的数据量很大的情况下,当用户在响应函数中处理过慢,会导致数据接收缓冲区被填满,服务器无法向客户端发送数据,此时会触发断线。所以在实际使用中,请尽快从响应函数中返回。


10问:api会自动重连么?

答:api不会自动帮用户重连。用户可以在收到断线通知OnDisconnect()后选择不销毁api,不登出,继续登录login(),此时交易服务器会在用户重新登录后,从断点消息处续传。注意:行情服务器在断线后不会重新推送行情,除非用户重新订阅。


11问:同一个进程中支持几个api?

答:同一个进程中只允许存在一个api。当用户多账户登录时,请确保程序中只Create了一次api。


12问:平台系统支持过夜么?

答:不支持过夜,只支持当日交易时间段。


13问:login时选择Restart和Quick公共流订阅方式有什么区别?

答:公共流订阅方式必须在login之前设定,在login之后生效。Restart方式会将今日所有的公共流消息都重新发送一遍。Quick方式登录后,客户端只会收到登录后的一系列公有流消息。


14问:订单响应在哪几种状态下会推送?

答:对于一个订单而言,OnOrderEvent()中只会推送未成交、全成、部撤、全撤、废单5种状态,部成状态不会推送,可以由用户通过订单相关的成交回报OnTradeEvent()来确认订单的部成状态。


15问:调用查询接口,消息返回时,数据是按批过来的么?

答:所有查询数据都是按个推送的,每次推送一个,即当查询结果有N个数据时,会调用N次接口,当最后一个数据推送时,会设置参数is_last为true。


16问:为什么我没有做过撤单操作,可是最后订单被撤了?

答:当发生这种情况时,先确认没有其他人使用与你同样的account登录并操作。XTP平台支持同一account以不同的client_id登录,如果多人同时登录,可能会互相撤单。


17问:调用InsertOrder()后,返回的order_xtp_id是唯一的么?

答:在同一交易日内,保证唯一。所有数据均当日有效,不保证不同交易日唯一。


18问:成交回报有唯一标识么?

答:成交序号report_index ,对于单个账户来说,深交所每个平台(不同交易品种)唯一,上交所唯一。但是对于多账户来说,不唯一。


19问:如何检查自成交?

答:对于上交所,exec_id可以唯一标识一笔成交。当发现2笔成交回报拥有相同的exec_id,则可以认为此笔交易自成交了。对于深交所,exec_id是唯一的,暂时无此判断机制。


20问:在断线后,login()之前,调用登出logout()和不调用有何区别?

答:如果不登出就login(),公共流订阅方式不会起作用。用户只会收到断线后的所有消息。如果先logout()再login(),那么公共流订阅方式会起作用,用户收到的数据会根据用户的选择方式而定。


21问:用户重新登录行情服务器后,需要重新订阅么?

答:需要。无论用户因为何种问题需要重新登录行情服务器,都需要重新订阅行情。


22问:下单结构体XTPOrderInsertInfo中的order_client_id有什么作用?

答:order_client_id为用户自定义字段,用户下单时输入什么值,订单响应OnOrderEvent()返回时就会带回什么值,类似于备注,方便用户自己定位订单。当然,如果你什么都不填,也是可以的。合理的规划好order_client_id,将有助于用户更快定位订单。


23问:股票代码ticker字段有什么要求?

答:ticker中要以'\0'结尾,并且不能带任何空格。


24问:订单响应结构体XTPOrderInfo中的qty_left数量,为什么在撤单成功时不显示为0?

答:qty_left在订单为未成交、部成、全成、废单状态时,表示此订单还没有成交的数量,在部撤、全撤状态时,表示此订单被撤的数量。


25问:为何没有撤单成功响应函数?

答:对于撤单,如果成功响应了,原订单的状态肯定会变成部撤或者全撤,所以没有提供单独的撤单成功响应。只有撤单失败响应,告诉用户撤单失败的原因。


26问:GetAccountByXTPID()只能在登录之后调用么?

答:是的,只能在account登录后才能得到正确的结果。


27问:GetClientIDByXTPID()有何作用?

答:当多个客户端用同一个account登录时,可以通过此函数得到是哪个client_id的客户端下的单,并据此过滤出自己的订单。


28问:一个api里,调用多次login函数登陆多个账户,下单的时候就根据session_id来区分单子下到哪个账户里,但是收到成交回报之后,怎么区分是哪个账号的成交回报呢?

答:回调函数中增加了session_id参数可帮助用户进行区分,也可以通过GetAccountByXTPID()来获取此订单对应的账号,但是建议用order_client_id来区分,规划好order_client_id会更方便快捷。


29问:为何撤单失败提示错误,找不到原单?

答:请检查撤单时传入的xtp id是否是正确的,xtp id是64位的,请确保传入的xtp id与下单时返回的xtp id是一致的。


30问:为何有的时候下单后被拒,成为废单?

答:请先根据拒单原因检查一下订单,可以按如下项进行检查:

  1. 买入普通股票时,请检查报单数量,是否为100的整数倍,卖出时,可卖持仓数量不足100股的部分,应该一次性委托卖出。
  2. 普通股票单笔报单最大数量是否超过了100 万股。
  3. 限价买卖科创板股票,单笔申报数量是否小于200股,是否超过了10万股; 市价买卖科创板股票,单笔申报数量是否小于200股,是否超过了5万股。
    卖出时,可卖持仓数量不足200股的部分,应当一次性委托卖出。
  4. 卖出报单的数量,不能超过可卖持仓。
  5. 限价单的话,价格是否超过涨跌停价格。
  6. 价格类型是否正确,是否是交易所允许的价格类型。
  7. 股票代码是否正确,是否跟交易所类型匹配。
  8. 交易所类型是否正确。
  9. 是否下单数量过多,触发了风控。
  10. 是否撤单过多,触发了风控。
  11. 是否在允许报单时间内。
  12. business_type是否设置正确。
  13. position_effect是否设置正确

如果以上都不是,请看一下是否是模拟撮合环境,如果是模拟撮合环境,会有一定几率发生模拟交易所拒单。此时交易所拒单的error_code是11110000,或者11100000,error_msg通常为217或者10000或者29999。这是模拟拒单,方便您测试拒单情况,不代表您的报单有错误。


31问:在订单发生成交的时候,OrderEvent订单响应会有推送么?

答:OrderEvent只会在订单的开始状态(未成交),或者终止状态时(全部成交、部撤、已撤单、已拒绝)推送,部成的时候不会推送,部成状态需要用户根据成交回报来确定。


32问:为何成交回报TradeEvent中的成交数量,有的时候不是100的整数倍?

答:成交回报的数量取决于卖单的数量,如果卖单不是100的整数倍,那么成交数量是有可能不是100的整数倍的。交易所允许最后一单卖单,可以下非100的整数倍。


33问:全成的订单响应OrderEvent会在此订单的所有成交回报TradeEvent之后到达么?

答:我们的系统确保订单的开始状态OrderEvent在此订单的所有成交回报到达之前到达,同时也确保订单的结束状态OrderEvent在此订单的所有成交回报之后到达。


34问:每次login之后的session_id会变化么?

答:每次api初始化的session_id是一样,如果断线重连时,没有销毁api,重新login时session_id会不同。请每次登录后及时更新session_id。


35问:在查询资金接口中,为何总资产=可用资金+预扣资金?

答:总资产total_asset = 可用资金buying_power + 证券资产security_asset + 预扣资金withholding_amount,由于目前security_asset我们暂时不做统计,默认为0,因此总资产=可用资金+预扣资金。


36问:模拟撮合采取的撮合策略是怎样的?

答:模拟撮合目前默认采用轮询模式进行撮合,如果用户想要设置不同的撮合方式,普通现货测试账户的话,请至XTP官网的个人中心->账号设置->撮合模式配置来修改设置默认撮合方式。如果不设置就默认轮询模式。此设置约10分钟后生效,需要重新登录再报单。
设置模式包括上交所和深交所,其中上交所对应关系如下:

设置模式

撮合模式

alternate match

轮询(未成交、部成、全成、拒单轮流来)

all matched

全部成交

match half

部分成交

not match

全部订单都是未成交

match error

全部拒单

深交所对应关系如下:

设置模式

撮合模式

auto

轮询(未成交、部成、全成、拒单轮流来)

fail

全部拒单

pending

全部订单都是未成交

report

全部成交

part

部分成交

cancel

撤单

(注:2019年4月13日之前申请的测试账号适用以下规则:模拟撮合目前默认采取轮询的方式进行撮合,上交所模拟撮合会每秒去轮循一次,然后轮询按照不成交、部分成交、全部成交、拒单等方式给用户的订单进行模拟撮合,确保用户下单时,所有可能的报单情况都能给到用户。)

模拟撮合针对api下单,新增用户自定义撮合方式,利用InsertOrder时报单所填的order_client_id数值,按如下模式撮合:
深圳:1-未成交 2-全成 3-部成 4-撤单 5-废单
上海:1-未成交 2-全成 3-部分 4-废单


37问:实盘下交易频率是否有限制?

答:是有限制的。服务端会有相关风控规则,如果有相关高频率发单需求,可以将需求提交到管理员这边进行协商配置。


38问:公网测试环境的可测试时间段?

答:除了每日的23:30 - 00:30分,8:00 - 9:00分,服务器在重启或初始化,以及必要的维护时间,其余时间段,都可以测试。


39问:服务器支持过夜单么?

答:不支持过夜单。xtp服务器每日都重启。


问:目前XTP支持的业务有哪些?

答:目前公网测试环境支持的业务是:沪深A股买卖、单市场股票ETF(沪深市场)、跨市场股票ETF(沪深市场)买卖和申购赎回、新股申购业务、国债逆回购、配股业务、沪深300ETF期权和上证50ETF期权、可转债买卖、融资融券、沪市交易型货币基金、创业板股票、科创板股票。


40问:公网测试环境的订单响应速度不是那么快啊?

答:公网测试环境除了网络延迟比较大之外,模拟撮合的速度也有一定的延迟,以上交所模拟撮合为例,是1s一个周期进行轮询,如果你下单的时候正好进入下一个周期,那么最晚需要1s才会收到订单响应。


41问:公网测试环境行情数据更新频率怎样的?

答:公网测试环境行情来自于交易所的转发数据,股票快照行情的推送频率是行情有变化时3秒一次,行情无变化时60秒一次。收盘后是推送当天的行情回放数据、节假日是推送上一个交易日的回放数据,循环推送以供测试。注意看下此时行情的数据时间data_time。


42问:公网测试环境上的行情数据有的时候为什么不动了?

答:公网测试环境,因为带宽有限,请不要使用全市场订阅,以免影响行情数据的接收。在闭市时间段,只有静态行情,此时行情不会变化。如果在开市时间段,行情数据不刷新,请联系我们的技术人员。


43问:OnDisconnected()什么时候会调用?

答:在服务器与客户端断线的时候会被回调。如果此时用户想要重连,只需要在函数中再次调用Login(),并在登录成功后更新session_id即可。在用户主动调用Logout()时不会触发OnDisconnected()。


44问:API会自动断线重连么?

答:API不会主动帮助用户断线重连。当断线发生时,如果用户需要重连,则不要销毁api,不要调用logout,只需在OnDisconnected()函数中先sleep一下,然后再次调用Login(),并在登录成功后更新session_id即可。客户端此时会从上次收到的消息进行续传。


45问:OnError()什么时候调用?

答:只有在服务器发生错误的时候才会触发OnError()。一般情况下,都不会触发。


46问:在公网测试环境下,为什么我无法卖出我昨日买入的持仓?

答:因为公网测试环境是不做清算的,每日都会将账户初始化至最初的状态,也就是说你今日买入的持仓,在到第二日后不会进入昨日持仓,所有资金和持仓数据均保持初始状态。如果需要保留持仓,请将测试用户名、密码、交易服务器Ip和port,告知QQ群的管理员,让他们帮你做持仓保留。注意:保留持仓可能会失败。


47问:在查询持仓中股票名称ticker_name为何是乱码?

答:股票名称的编码是UTF-8,请检查一下编码是否正确。


48问:在断线后,如何系统恢复?

答:收到断线通知后,在不重启的情况下,在OnDisconnected()函数中不调用logout,直接调用Login(),就默认是resume方式,只会收到断线后的消息;如果是重启的情况下,只能通过restart方式,或者quick方式+查询。


49问:demo程序为何一直在下单?

答:demo测试程序采用的是乒乓测试下单,当收到OrderEvent时,会根据订单的状态来触发撤单或者新一轮下单。除了在xtp_api_demo.cpp文件中有InsertOrder的调用,在trade_spi.cpp文件的OnOrderEvent()响应函数中,也有InsertOrder的调用。如果用demo测试下单时,发觉所有订单都是拒单,可以自定义模拟撮合的方式。


50问:提示[XTP:1]Login Failed,trade way not allowed,please check it! 这个错误代表什么意思?

答:这个表示在调用void SetSoftwareKey(const char* key)这个函数时传入的key不对,请填入正确的key。此key在申请账号时会一并给出。每个账户对应的key可能不一样。


51问:现在提供level2的行情么?

答:实盘提供的。实盘Level2请使用UDP连接。公网测试环境,提供逐笔委托和逐笔成交行情,需使用TCP连接。


52问:程序编译可以通过,可是运行时提示确少某些运行库,怎么办?

答:请下载缺少的库,并放置到对应的位置上,下载安装必要的redist补丁包。


53问:只能在vs2015下编译运行么?

答:windows版推荐在win10,vs2015下编译运行,但不局限于此。其他版本的windows和vs可能需要安装部分补丁包和运行库。Linux版推荐ubuntu14,ubuntu16,redhat7.2。


54问:demo没有工程文件,请问可以提供工程文件么?

答:demo里包含cmake文件,请用cmake工具,选择好需要的generator,然后生成对应的工程文件。


55问:demo在release模式下编译时提示找不到对应的库文件。

答:请修改cmakelist文件中optimized后面引用的lib库文件名字改成debug的库文件。


56问:当全市场订阅行情时,为何一会儿就会断线?

答:请按如下顺序检查您的程序:

  1. 是否在收到行情回调时,能够迅速返回,所有处理过程在另一个线程里。
  2. 是否有屏幕输出?如果有,请减少屏幕输出,或者不输出。
  3. 接收行情线程是否有堵塞。

注意:在公网测试环境下,由于带宽有限,如果用户订阅行情数过多,容易导致缓冲区满,从而造成断线,请在公网测试环境下,少订阅几只股票。


57问:如何订阅全市场行情?

答:已提供全订阅/退订接口。如果是订阅全市场快照行情,可使用SubscribeAllMarketData接口订阅,参数exchange_id为XTP_EXCHANGE_UNKNOWN,表示沪深全市场。


58问:ETF申购后,对ETF报卖单,数量也是查询持仓中的可卖持仓,为何出现错误代码为11000107的拒单?

答:请检查你的报单数量是否超过100万股,交易所规定报单数量不能超过100万股。


59问:ETF申购后,返回的成交回报中,为何有些成分股的数量为0?

答:成分股成交数量为0时,表明此成分股发生现金替代,持仓数量没有变化。


60问:查询持仓时,如果账户没有持仓的话,有何返回结果?

答:当没有持仓的时候,OnQueryPosition()函数中的error_info.error_id =11000350,表明没有持仓。同样的,在查询其他记录时,如果没有记录信息,在返回的SPI函数中均有error_info.error_id =11000350。


61问:沪市level2的逐笔数据中有逐笔委托数据么?

答:有的,请至官网下载最新版SDK,沪市和深市都有逐笔委托、逐笔成交。上海股票(除债券外)逐笔委托和逐笔成交之间不是有序的,需要先根据XTPTickByTickStruct.seq进行排序,排序后再使用。


62问:可以通过哪些途径知道某只股票是停盘等状态的?

答:在行情marketdata数据中ticker_status字段有说明,

对于普通股票,具体值如下

第0位:
S=启动(开市前)
C=集合竞价(不分开盘收盘)
T=连续竞价 B=休市 E=闭市 P=停牌 A=盘后交易
V=波段性中断
第1位:
0=不可正常交易,
1=可正常交易,
无意义填空格
第2位:
0=未上市,
1=已上市;
(深交所忽略该字段) 
如图所示:

  1. 对于期权,具体值如下

第 0 位:
S=启动(开市前)
C=集合竞价
T=连续交易
B=休市
E=闭市 V=波动性中断
P=临时停牌
U=收盘集合竞价
M=可恢复交易的熔断(盘中集合竞价)
N=不可恢复交易的熔断(暂停交易至闭市)
第1位:
0=未连续停牌;
1=连续停牌;
(预留,暂填空格)
第2位:
0=不限制开仓
1=限制备兑开仓
2=限制卖出开仓
3=限制卖出开仓、备兑开仓
4=限制买入开仓
5=限制买入开仓、备兑 开仓
6=限制买入开仓、卖出开仓
7=限制买入开仓、卖出开仓、备兑开仓
第3位:
0=在当前时段不接受进行新订单申报
1=在当前时段可接受进行新订单申报 
如图所示:

63问:在行情marketdata数据中,instrument_status 和ticker_status字段的区别?

答:上交所新债券 Level2 行情快照中,XTPMD.ticker_status 不再有意义,请使用 XTPMD.bond.instrument_status 替代判断当前债券所处的交易状态。其他快照行情还是使用ticker_status判断交易状态。


64问:xtp交易的结构体中有很多时间,哪些时间是交易所时间,哪些是xtp本地时间?

答:报单的委托时间insert_time、更新时间update_time是xtp本地时间,其余都是交易所时间。


65问:报单时报单数量允许报非100的倍数么?

答:(1)如果是买单,普通股票报单数量必须是100的整数倍,但如果是科创板,报单数量最低200股,1股起加。
       (2)如果是卖单,如果持仓中有零散股,只允许将零散股一次性报出。普通股票,不足100股为零散股,科创板股票,不足200股为零散股。

        例如:持仓中A股票有132股报单卖出:

        如果是普通股票,那么可以分100股、32股两笔报单,也可以132股一笔报单。

        如果是科创板股票,那么只能132股一次性报出。


66问:科创板股票报单最低值200股,xtp中能通过静态数据i获取到吗?

答:可调用QueryAllTickersFullInfo接口获取,参见 XTPQuoteFullInfo结构体中的bid_qty_unit、ask_qty_unit,限价买/卖委托数量单位。


67问:MFC客户端在模拟环境下,为何订阅的行情不会主动刷新?

答:由于公网测试环境仅支持TCP连接,而MFC客户端默认UDP连接,因此需要修改客户端的设置文件config.ini,在LOGIN下面添加 MdProtocal=TCP


68问:公网测试环境中,订阅行情为何总是断线?

答:由于公网测试环境带宽有限,所有用户共用2m带宽,当有用户订阅的股票数目比较多时,会造成网路堵塞,不光影响自己,也影响他人,会造成频繁断线。请在公网测试环境中订阅比较少的数量来进行连通性测试。


69问:xtp支持哪几种语言接口?

答:目前xtp支持的语言接口包括:

  1. C++(xtp官网可下 https://xtp.zts.com.cn/
  2. Python(https://github.com/ztsec/xtp_api_python)
  3. Java(https://github.com/ztsec/xtp_api_java

以下为热心用户封装

  1. C#

https://github.com/zerochocobo/XTP.NET
https://github.com/rongyuhuang/XTP.NET

  1. Go (https://github.com/leochan007/XTP.GO


70问:Python接口中,有接入说明么?

答:请参阅接口调用的两个test:https://github.com/ztsec/xtp_api_python/tree/master/bin/test

具体的结构体里的说明参阅C++的说明文档,Python里接口首字母小写(而C++是大写),其他都一样。


71问:登录失败,提示"Login Failed,get user identity failed."是何原因?

答:这是因为您使用的client_id过多导致,请将client_id固定下来使用,(建议1~99),我们对client_id的总共使用个数做了限制,超过最大使用个数就不让登录了。


72问:xtp推荐的运行环境是多少?

答:推荐系统windows 10、redhat7、ubuntu16、centos7。


73问:quote日志中有"service function is not exists(2018)"这个warning语句是何意?

答:这个warning是因为api的版本和服务器版本不一致导致的,用户程序的api用的是1.1.19版本,服务器是2.2.27版本,2.2.27版本相比1.1.19版本新增了部分协议,导致1.1.19版本无法解析,建议升级api至最新版本。


74问:一账号两中心节点之间如何进行资金划转?

答:如果是做转入操作,且知道对方节点的可用资金是多少,那么可以直接发起划拨请求。如果不知道对方节点可用资金是多少,那么可以先通过QueryOtherServerFund()查询到对方节点的资金,然后设置合适的资金,再次发起请求。


75问:为什么账号开通XTP之后,用Smart客户端或者其他xtp客户端登录一直提示"The password is incorrect",而用融易汇相同的密码却能登录?

答:请检查账户的操作权限,是否开通Smart等客户端的权限,如果没有开通,也会一直提示密码错。


76问:如果某只股票发生配股,需要配股的话,可以如何操作?

答:查询持仓的时候,可根据position_security_type过滤出配售类型的持仓,包含配股、配债等。其中:
       yesterday_position表示总可配股数量
       sellable_qty表示剩余可配股数量
       total_qty表示已配股数量
       假如沪市股票A可配股票B 1000股,那么初始时yesterday_position = 1000,sellable_qty=1000,total_qty=0
       报单操作配了200股后,查询持仓中对应的数据:yesterday_position = 1000,sellable_qty=800,total_qty=200


77问:XTP支持配债吗?API方式如何报单呢

答:仅现货账号支持配债,两融账号不支持配债。配债跟配股一样报单,调用InsertOrder接口报单,business_type = 6,side = 1,price_type= 1。


78问:账户配债了一只沪市的债券、一只深市的债券,然后查询资金,发现买入成交证券占用资金fund_buy_amount,累计了沪市配债的金额,但没有计算深市配债的金额,这是什么原因呢?

答:沪市的配股配债有成交回报,fund_buy_amount会累计该笔成交金额,但深市的配股配债没有成交回报,没有成交金额,只会预扣资金。


79问:新股申购如何操作?

答:可以根据QueryIPOInfoList()和QueryIPOQuotaInfo()查询今日可申购新股信息的最大允许申购数量和可申购额度,所能申购的最大数量为:min(新股可申购额度,最大允许申购数量)。


80问:为什么我调用某些接口函数时,没有期望的spi函数调用?

答:请检查您编译时连接的库版本和实际运行时链接的库版本是否一致,如果不一致,请更新一下。(可通过log日志看到实际运行的版本号)


81问:担保品划转是实时扣减数量么?

答:对于担保品转出,会实时扣减数量。当收到订单确认消息,即视为转出成功。对于担保品转入,不会实时扣减。当收到订单确认消息时,不是真正的转入成功,需要等盘后清算时确认。


82问:会发生InsertOrder()接口还没返回,但是先收到订单确认状态的情况么?

答:会发生这种情况,当调用InsertOrder接口的线程被挂起时,可能会晚于订单确认消息返回。用户需注意收到不存在的订单时,不要丢弃。


83问:Python版本的demo如何运行?

答:需要把bin目录下对应的系统下封装的.so文件和原api的dll放到bin/test,即可运行demo。如果运行自己写的Python程序可以将相应的文件放到引用目录或者程序所在目录。


84问:XTP能交易港股吗?

答:目前XTP还没有开通港股功能。


85问:XTP可以交易可转债吗?

答:XTP支持可转债交易,您如果在线下打新,也可以股份到账后在xtp卖出。但现在还不支持在xtp直接申购,也不支持转股操作。


86问:为什么订阅了行情只收到一条行情信息?

答:请检查连接XTP的方式是否和服务器一致,目前测试环境的服务器是TCP连接,实盘环境level1是TCP连接,level2服务器是UDP连接。


87问:如何能够申请XTP账户,需要什么条件?

答:需要达到专业投资者的条件,可以在齐富通app中进行专业投资者认证。

88问:XTP账户如何做转账操作?

答:银证转账可以使用融易汇或齐富通,主柜台和XTP之间的资金划拨,客户端方式可以使用smartX,api方式使用FundTransfer接口函数。


89问:smart怎么连接测试环境?

答:需要设置连接地址:smarttest.ztqft.com


90问:XTP实盘的api交易程序可以在互联网登录吗?

答:不可以,XTP实盘api程序必须托管在机房,程序运行在内网。可使用smartX客户端在互联网登录。


91问:为什么使用测试环境极速通无法登录,如果出现图中显示的情况怎么处理?




答:需要进行高级行情设置,登录类型选择"使用传统行情数据"。

92问:如何将程序上传到托管机?

答:文件上传需要发送至我们的专用邮箱:xtp.up@zts.com.cn,我们会有专人代客户上传,一般预计5到10分钟传到服务器。邮件中请简要说明上传文件的内容,比如是修复程序BUG,更改策略等等,再附上您的客户名称,服务器IP地址。


93问:程序登录失败,显示:{'error_id': 1, 'error_msg': '\[XTP:1\]read_ptr function failed.(remain_bytes < bytes). remain_bytes: 254 bytes: 1937047552.'\}

答:首先请检查一下账号和密码是否配置正确,包括行情账户和交易账户,如果都配置正确请再检查一下是否上一次登录的程序未完全退出。如果都没有问题可以临时更改一下client id进行登录。


94问:程序登录失败,显示:Failed to connect to host server, error code is 1, error message is \[XTP:1\]read_some function failed.(remain_bytes <total_bytes). Remain_bytes: 254 total_bytes: 258..

答:请检查一下monitor guest是否在线。


95问:测试环境极速通登录不上,如果出现下面几个提示是什么原因?



答:请联系运维人员检查极速通服务是否在线。


96问:QT版客户端无法登录测试环境?


答:请检查一下行情服务器和交易服务器的IP和端口是否设置正确,如果是api程序方式,请检查一下login的参数是否正确。


97问:为什么下载的java中的demo编译不了,有很多builder方法没有定义?


答:java为了减少写代码的工作量,引入了builder模式。需要安装Lombok插件。


98问:这是什么错误Tgw of the pbu id not found?

答:如果是实盘,这个是账户设置问题,分配的服务器没有配置指定的tgw,需要联系营业部检查账户开户设置的情况。如果是测试环境,请确认报单的合约和市场是否正确。


99问:可转债支持市价单吗?

答:可转债是无涨跌幅证券类型,不支持市价单。


100问:下单时返回0,然后使用GetApiLastError又没有错误信息描述,error_id为0,error_msg为空,怎么排查这个问题呢?

答:请检查下单的参数是否有误,如:session id ....
如果最近有升级api版本,请检查一下使用的头文件和库文件的版本是否一致。可直接替换头文件和库文件,重新编译一下再运行。


101问:为什么我通过程序api下单会出现自动撤单的情况,上交所的订单正常,只有深交所的股票会出现这种情况?

答:请检查下单时使用的order_client_id,模拟撮合会根据order_client_id给出相应的撮合结果,详细请看本文档第36问。


102问:下单时报错:Failed to get ticker quotes,ticker does not exist or can not be traded!

答:请检查一下证券代码是否正确,如果无误请检查一下交易市场是否正确。行情api和交易api使用的是不同的市场类型,如果都没问题请确认一下是不是XTP不支持的品种。

103问:在下单的时候,在接收回调函数报单通知时,会不会保证按照正常的订单生命周期对应的时间顺序;举个例子,全成会在部成后面出现,而不会是部成在全成后面出现。

答:api对消息顺序保序,一般情况都是按时间推送的,部成不推送消息。


104问:OnOrderEvent中撤单时,返回的cancel_time指的是哪个时间,交易所撤单时间?还是xtp接收到交易所返回撤单信息的时间?

答:cancel_time是交易所撤单时间。


105问:CreateQuoteApi 和CreateTraderApi直接返回NULL是什么原因?

答:请检查是否创建了过多的api对象,对于行情可以创建2个,对于交易只能创建1个;如果数量没有超过限制请检查输入参数是否有误,client id需设定为1-99;还有一个可能的原因是库文件和头文件的版本不一致。


106问:OnQueryOrderByPage接口返回的记录中包含委托和撤单委托,怎么能方便的把委托和撤单委托区分出来?

答:前三个是委托订单,后面三个是撤单。
/////////////////////////////////////////////////////////////////////////
///@brief XTP_ORDER_SUBMIT_STATUS_TYPE是报单提交状态类型
/////////////////////////////////////////////////////////////////////////
typedef enum XTP_ORDER_SUBMIT_STATUS_TYPE
{
    XTP_ORDER_SUBMIT_STATUS_INSERT_SUBMITTED = 1, ///<订单已经提交
    XTP_ORDER_SUBMIT_STATUS_INSERT_ACCEPTED,///<订单已经被接受
    XTP_ORDER_SUBMIT_STATUS_INSERT_REJECTED,///<订单已经被拒绝
    XTP_ORDER_SUBMIT_STATUS_CANCEL_SUBMITTED,///<撤单已经提交
    XTP_ORDER_SUBMIT_STATUS_CANCEL_REJECTED,///<撤单已经被拒绝
    XTP_ORDER_SUBMIT_STATUS_CANCEL_ACCEPTED ///<撤单已经被接受
}XTP_ORDER_SUBMIT_STATUS_TYPE;


107问:上证云测试环境有orderbook吗?

答:上证云没有orderbook,只有快照数据和逐笔数据。


108问:SetSoftwareKey,软件开发Key,能否申购多个测试账号时是同一KEY?

答:这个key是按渠道来的,多个测试账号开通了同一个渠道,那么key就是同一个。


109问:集合竞价期间有orderbook数据吗?

答:集合竞价期间没有orderbook,要到开盘以后9:30才有orderbook。


110问:测试环境下,两融账户可能保留持仓吗?

答:两融账户目前不能保留持仓。


111问:xtp有没有那种正常的仿真交易环境?就是类似simnow那种的?

答:XTP的现货测试账户可以设置保留持仓,类似于simnow。


112问:如何申请测试账号?

答:登录XTP官网xtp.zts.com.cn申请测试账号,填写账户申请表如下图所示,公司审核之后会将账号发送到您的邮箱。

113问:XXXXXXX login failed, errorMsg=\[XTP:1\]Login Failed, get user info failed,please check if user info is perfect.\[OS:106\]Transport endpoint is already connect

答:请检查一下账户和登录的服务器是不是对应的,比如是不是普通测试账户登录了期权测试服务器或者两融测试服务器。


114问:\[XTP:1\]Login Failed,trade key invalid or not set,set assigned key first!

答:请检查一下配置文件的account_key设置是否正确。


115问:OnDepthMarketData和OnTickByTick,是深圳和上海各一个线程,还是两个市场共用一个线程?

答:OnDepthMarketData在使用UDP的时候可能是两个线程,通常对于一只股票来说,第一个行情快照是TCP线程,后续的都是UDP线程,OnTickByTick是共用一个UDP线程。


116问:xtp可以进行正回购吗?

答:xtp不支持正回购。


117问:如果自己写的交易策略,用XTP API,走托管流程,穿透式监管,要审核源代码吗?

答:不审核源码。


118问:ETF申购赎回,返回11000010(Failed to get ticker quotes, ticker does not exist or cannot be traded!)

答:请检查一下ETF代码,XTP统一使用二级市场证券代码申购赎回和交易。


119问:ETF申赎的成交记录中,一级市场和二级市场代码都有吗?

答:没有一级市场代码,成交回报中 ETF申赎代码和资金代码 统一为ETF的二级市场买卖代码。成交类型可通过XTPTradeReport.trade_type来区分。


120问:如果要进行量化交易,在上线前需要先验证哪些功能正常?是否需要先批量下单测试?

答:需要先进行联通性测试,以及批量下单测试,做好接入测试后再上实盘。


121问:哪些测试环境可以做ETF申购赎回?

答:普通现货测试环境支持ETF申赎。


122问:测试环境支持期权的锁定和解锁、备兑开仓和备兑平仓吗?

答:测试环境不支持。


123问:测试环境可以进行资金划拨操作测试吗?

答:资金划拨需要开启kesb的环境,目前测试环境没有开启,所以不支持资金划拨测试。


124问:如何获取撤单的数量?

答:撤单成功后,原单会收到OnOrderEvent消息,报单状态为部分撤单或已撤单,此消息中的qty_left就代表撤单的数量。


125问:XTP行情支持中金所的股指期权吗?

答:目前只有上交所和深交所的数据。


126问:沪深ETF,债券和股票,都可以下fak和fok订单吗?

答:部分支持,具体请参考price_type对应枚举值的注释。


127问:如何理解价格类型里面的注释?

答:只有标注了期权的才可用于期权下单,没有标注期权的只能普通股票适用。如果标注了沪深,则沪深两市都可用。如果仅标注了沪,则沪市可用,深市不可用。
/////////////////////////////////////////////////////////////////////////
///@brief XTP_PRICE_TYPE是价格类型
/////////////////////////////////////////////////////////////////////////
typedef enum XTP_PRICE_TYPE
{
    XTP_PRICE_LIMIT = 1, ///<限价单-沪 / 深 / 沪期权 / 深期权 (除普通股票业务外,其余未特指的业务均使用此种类型)
    XTP_PRICE_BEST_OR_CANCEL, ///<即时成交剩余转撤销,市价单-深 / 沪期权 / 深期权
    XTP_PRICE_BEST5_OR_LIMIT, ///<最优五档即时成交剩余转限价,市价单-沪
    XTP_PRICE_BEST5_OR_CANCEL, ///<最优5档即时成交剩余转撤销,市价单-沪深 / 深期权
    XTP_PRICE_ALL_OR_CANCEL, ///<全部成交或撤销,  市价单-深 / 沪期权 / 深期权
    XTP_PRICE_FORWARD_BEST, ///<本方最优,市价单-深 / 深期权
    XTP_PRICE_REVERSE_BEST_LIMIT, ///<对方最优剩余转限价,市价单-深 / 沪期权 / 深期权
    XTP_PRICE_LIMIT_OR_CANCEL, ///<期权限价申报FOK
    XTP_PRICE_TYPE_UNKNOWN, ///<未知或者无效价格类型
}XTP_PRICE_TYPE;


128问:price_type某些设置注释是 沪/ 深期权,这是什么意思?

答:仅沪市股票,深市期权可用。


129问:XTP哪个客户端支持算法交易?

答:目前只能通过smart客户端进行算法交易。


130问:XTP可以申购货币基金吗?

答:可以买卖沪市的货币基金,但不支持申赎。


131问:使用UDP接收行情时,设置接收行情线程绑定的cpu,这个是逻辑CPU还是物理CPU呢?

答:这个是逻辑cpu。


132问:模拟环境中的股票状态和实盘是一致的吗?

答:模拟环境的行情中ticker_status跟实盘一致,只是模拟环境中的停牌的股票也可交易测试。


133问:为什么行情期权数据没有找到行权价和到期日?

答:请使用QueryOptionAuctionInfo查询,exercise_price为行权价,exercise_end_date为结束日期。


134问:可以同时用xtp和普通柜台交易吗?

答:不能,开通xtp实盘后,只能使用xtp客户端或程序api交易,登陆普通柜台只能查询历史,不能委托交易。


135问:行情数据里面的时间是哪里的时间呢?

答:行情数据里的data_time时间都是交易所时间。


136问:上海和深圳机房的时间是PTP同步还是NTP同步的

答:ntp同步,需要使用机房内的时钟源,具体请查阅运维给的参数文档。


137问:实盘环境的开放时段是什么时候呢?

答:交易日的 8:45-16:30左右。实盘一般8:45左右开始启动,最晚不会超过9:15。


138问:XTP可以交易个股期权吗?

答:目前只能交易50ETF期权和300ETF期权。


139问:XTP的接口函数是线程安全的吗?

答:报单、查询等函数均可多线程调用,是线程安全的。


140问:在vs2019 里面编译xtp的demo,怎么提示:严重性代码说明项目文件行禁止显示状态错误LNK2019无法解析的外部符号"public: static class XTP::API::TraderApi * __cdecl XTP::API::TraderApi::CreateTraderApi(unsigned char,char const *,enum XTP_LOG_LEVEL)" (?CreateTraderApiAPIEPBDW4XTP_LOG_LEVEL@@@Z),该符 号 在 函 数_main 中 被 引 用 xtpdemo D:\doc\XTP_API_20190401_1.1.18.19\Demo\XTPApiDemo-1.1.18.19\xtpdemo\xtp_api_demo.obj ?
答:请检查一下是否包含了相应的头文件,是否链接了相应的库文件,如果都没有问题请检查一下编译选项是否为x64。


141问:为什么执行java sdk单元测试的时候,执行第n次insert测试时,前面n-1次测试的所有log都会盖上当前时间戳重新打印一次啊?结果就是每天执行测试的时候,每一次测试log越来越多。

答:请检查SubscribePublicTopic这个接口的调用参数,可使用quick方式登录只收到登录后的一系列公有流消息。


142问:两融仿真测试,所有交易委托订单都被拒绝:error_info=&get; error_id:11000909, error_msg:Order is invalid in current debt expire status! 这是什么原因?

答:存在逾期的两融负债合约,需要先还清负债。


143问:程序运行时提示缺少dll文件是怎么回事?


答:运行环境缺少必要的库文件,请到群文件下载redist_x64_dll.zip,解压后放到程序所在目录。


144问:xtp的TradeSpi里面的回调,是多线程执行还是单线程的?

答:查询的回调都是一个线程,OnOrderEvent和OnTradeEvent这些可能会存在两个线程;Quote spi中,TCP连接是一个线程,UDP连接会有两个线程。


145问:TradeSpi中,查询响应、OnOrderEvent和OnTradeEvent,使用的是同一个线程吗?

答:不一定,查询响应和通知推送,通常是同一个线程,但是,一些超时消息是通过超时线程推送的。例如:您报单后,报单A的订单响应和成交回报没有收到,您退出了登录。过了一段时间,您使用quick方式重新登录服务器,此时如果报单A的全成消息正好回来,那么这条全成消息就会通过超时线程推送给您。


146问:TradeSpi中,可能会被两个线程回调的函数有哪些?

答:会有超时线程的4个回调函数:OnOrderEvent、OnTradeEvent、OnOptionCombinedOrderEvent、OnOptionCombinedTradeEvent。


147问:QuoteSpi回调线程有几个?

答:Level1行情,TCP连接是一个线程;Level2行情,如果L2服务器是单路组播,则一个TCP线程,一个UDP线程,如果L2服务器是多路组播,则一个TCP线程,多个UDP线程(快照UDP线程,逐笔UDP线程,订单薄UDP线程)。


148问:XTP哪个客户端可以在互联网做实盘交易?

答:我们提供的互联网客户端有 smartX。


149问:融易汇里看到的持仓是实时更新的吗?

答:不是,XTP里的持仓需要在T日清算后才同步到融易汇中。


150问:XTP下单的新股申购,是在XTP柜台缴款,还是在普通柜台缴款?

答:新股申购中签后,应确保XTP账户留有足够的新股认购资金。


151问:XTP的行情日志 占用比较大的存储空间。需要定期手动清理吗?还是XTP会自动删除过期的日志?

答:在权限允许的情况下,XTP会自动删除7天前的日志,不过建议您监控好硬盘存储空间。


152问:撤单失败是什么原因导致的呢?

答:OnCancelOrderError 返回Error.\[order_xtp_id:1140851691,order_cancel_xtp_id:1140853695, session_id:572522497,error_code:11000305,error_msg:Failed to find original order!\] 答:撤单时order_xtp_id填错了,order_xtp_id数据类型是uint64_t。


153问:XTP可以查询新股中签的情况吗?

答:可以通过融易汇在主柜台查询。


154问:融资可用余额怎么查

答:不提供融资头寸查询。可以参考QueryCreditFundInfo返回的line_of_credit,包括融资和融券的。


155问:做融券业务时出现failed to check credit stock position. (11010503)是什么问题?

答:信用账户对应的融券头寸(融券券池)没有足够的可用数量。如果是实盘的话,请联系营业部。


156问:如果发生除权,昨收价是除权前的价格还是除权后的价格?

答:xtp中的行情价格都是除权除息后的价格,没有复权。


157问:api的log是同步写的吗?

答:quote.log和trade.log是同步写的日志。Level2行情udpseq开头的日志是异步日志。


158问:申购50ETF失败,错误提示:11010203,Cash ratio is overflow in ETF creation,什么原因?

答:申购ETF份额时,允许使用现金替代全部或部分成份股,但不能超过最大现金替代比例。


159问:申购50ETF失败,错误提示:11010123,Invalid security quantity. 怎么修改?

答:ETF申赎数量,必须满足最小申赎单位或其整数倍。


160问:恒生ETF 159920,市场是深证,但是查询静态信息返回是未知类型XTP_TICKER_TYPE_UNKNOWN,正常吗?

答:正常的,xtp中不支持申赎159920,不支持的品种,证券类型都是 XTP_TICKER_TYPE_UNKNOWN。


161问:查的是510050的成分股,Quote_Spi中QueryETFBasket返回的是510051的成分股,哪里弄错了?

答:510051是510050的ETF申赎代码,510050是ETF证券代码,也就是二级市场的买卖交易代码。


162问:XTP中ETF申赎,比如510051,申赎报单时是510050,我们去查报单委托,返回的代码也是510050,这里跟其他的柜台不一样

答:XTP中将ETF申赎和ETF买卖,在报单时统一成了买卖代码,也就是要使用ETF证券代码,而不是ETF申赎代码。


163问:ETF申赎,深市的跨市场资金成交记录中,证券代码159900是什么含义?

答:深市的跨市场ETF申购成交类型中,159900是一个虚拟成份股票,实际上是沪市成份股票的现金替代总金额。


164问:ETF申赎时的现金替代和跨市场成交,往往返回两笔数据,一笔成交数量为1,一笔成交数量往往是1000000,不知道这两笔数据分别的含义是什么?

答:因为成交金额超限,接口库里字段存不下,所以将成交数量拆分成了两条记录显示。


165问:当天申购的ETF,当天可以赎回吗?当天ETF赎回获得的股票,当天可以用来申购吗?

答:当日以一篮子股票申购的ETF基金份额,当日可以卖出,但不得赎回。
       当日赎回的ETF基金份额获得的一篮子股票,当日可以卖出,但不得用于申购ETF基金份额。


166问:ETF申赎和ETF买卖,它们之间有什么关联?

答:关联交易规则如下:

(1)当天买入的股票,当天可以用来申购ETF。

(2)当天买入的ETF份额,当天可以赎回,但是当天不能卖出ETF份额。

(3)当天赎回得到的股票,当天可以卖出。

(4)当天申购的ETF份额,当天可以卖出,但是当天不能赎回ETF份额。


167问:为什么实盘收不到tick和orderbook数据?

答:请先确认已经开通level2权限了,如果开通了请确认使用的是UDP连接。


168问:逐笔成交如何对应到逐笔委托?

答:深市中XTPTickByTickTrade.bid_no/ask_no 与 XTPTickByTickEntrust.seq对应,沪市中XTPTickByTickTrade.bid_no/ask_no 与 XTPTickByTickEntrust.order_no对应。


169问:如何判断深交所逐笔成交的单子是主动买,还是主动卖呢?

答:主动买,代表卖方委托早于买方委托;主动卖,代表买方委托早于卖方委托。

       逻辑上,一般是和上一笔成交对比,如果比上一笔价格高,说明这笔委托推动了价格上涨,就是主动买。

       深市可通过 XTPTickByTickTrade.bid_no和ask_no的大小来判断方向,no小的表示先报单。 bid_no > ask_no,则是一笔主动买单;ask_no > bid_no,则是一笔主动卖单。


170问:用UDP来接收逐笔数据是有序的还是序的?

答:一般来说api会保证逐笔数据的顺序。


171问:XTPOrderInfo里面的时间是交易所时间吗?

答:insert_time、update_time是xtp柜台时间,cancel_time是交易所时间。


172问:在哪儿查询两融标的证券及保证金比例?

答:http://www.zts.com.cn/rzrq/rzrq1.aspx?action=GetBdstockNoticesPager&tab=2&keyword=


173问:下单时资金是怎么预扣的?

答:如果是限价单,按报单的价格预扣,如果是市价单,按涨停价或保护价预扣。


174问:两融账户可以交易逆回购吗?

答:不可以,只有普通现货账户可以。


175问:monitor client 突然登录不上了,报错如下图所示:


答:请检查monitor guest 端是不是退出了。


176问:如何查询资金流水和手续费?

答:可以通过融易汇在主柜台查询。https://www.zts.com.cn/download/download.html


177问:期权有逐笔数据吗?

答:期权没有逐笔数据,只有快照数据。


178问:开通xtp后,还能不能在普通客户端或者手机App下单?

答:开通XTP后,如果想使用XTP进行程序化交易或者使用XTP客户端交易,则需要将账户转入XTP柜台;如果想使用融易汇客户端或者齐富通手机App交易,则需要将账户转出到主柜台。当账户转入XTP后,融易汇或者齐富通不可以交易,但是可以查看。


179问:xtp有查询所有可交易股票的接口吗?

答:可通过QueryAllTickers接口来获取所有可交易合约。


180问:如果有一只股票已经订阅过了,还没有退订,然后在某个地方又发起了订阅请求,这样会有什么影响吗?

答:允许重复订阅,不影响。


181问:不同的进程中trader能收到其他进程的订单消息和成交回报,那么quote是否会收到其他进程的订阅和查询消息呢?

答:不会的,不同的进程quote消息互不影响,trader查询消息也互不影响。


182问:OrderEvent和TradeEvent之间的时序是怎么样的?

答:基本上保证TradeEvent在OrderEvent的未成和结束状态之间;基本上不存在未成的订单响应在成交回报之后来,全成的订单消息肯定在成交回报后面到来。


183问:请问官网上的Monitor是做什么用的?

答:Monitor连接托管交易程序用的,可以通过Monitor启动交易策略、停止交易策略、设置一些参数以及传输一些配置文件。


184问:请问如何保留每天的交易数据?

答: 请补充以下内容发送邮件到运维的邮箱 wb_chennan@zts.com.cn
设置内容:保留账户持仓
账号:
密码:
交易服务器IP:
交易服务器port:。


185问:请问没有新股申购额度如何测试新股申购?

答: 请补充以下内容发送邮件到运维的邮箱 wb_chennan@zts.com.cn
设置内容:增加新股申购额度
账号:
密码:
交易服务器IP:
交易服务器port:。


186问:请问逐笔成交里有些撤单价格为0是什么意思?

答:这是因为报单时使用的是市价委托。

187问: 请问一下实盘下单XTP_ORDER_STATUS_REJECTED是什么原因?

答:请到交易所官网下载相应的错误代码文件,
       上交所:http://www.sse.com.cn/services/tradingservice/tradingtech/technical/other/
       深交所:http://www.szse.cn/marketServices/technicalservice/interface/,深圳证券交易所 Binary 交易数据接口规范。


188问:为什么我登录客户端时一直提示账户密码错误,检查了几遍还是提示错误?

答:请将账号和密码复制到word,然后将字体改为Tahoma或者verdana,检查一下是不是因为字形相近导致输入错误了。


189问:The config.json file parse error 请问这是什么错误?

答:读取配置文件失败,请检查配置文件是否存在,一般应该和程序文件放在同一目录,如果文件没有问题请检查配置参数的语法是否正确。


190问:请回如何调整撮合模式?

答:可以联系运维更改,更改后次日生效;如果是官网申请的现货测试账号,也可以登录官网后自行更改,更改后一刻钟生效,需要重新登录客户端或api程序。

191问:可以多账户登录吗?多账户时共用一个socket还是每个账户一个socket?

答:api支持多个账户连接,多次调用login即可,一个账户一个socket连接,不会共享连接。


192问:请问期权行情多久刷新一次呢?

答:连续竞价期间,上海期权,有变化 0.5 秒一次,无变化 30 秒一次;

深圳期权,有变化 0.5 秒一次,无变化 60 秒一次。


193问:请问getApiLastError 这个函数是线程安全的吗?

答:这个函数不是线程安全的。


194问:订阅快照行情成功,OnDepthMarketData没有推送行情数据,为什么使用getApiLastError返回error_id为0?

答:getApiLastError这个函数仅在调用api出错时使用,对回调函数不生效。


195问:xtp提供回测平台吗?提供回测用的量价和基本面数据吗?

答:目前xtp暂未提供回测平台,测试环境的模拟撮合也不是根据当时的行情和对手方给出的结果,因此无法对策略的有效性进行测试。


196问:申请实盘账号流程是怎样的?

答:在测试环境做好连通性接入测试后,可以申请实盘账号。如果是做api程序化交易,需要先开通程序化交易权限。申请实盘交易权限,请联系营业部申请。


197问:python版本的api是否支持MacOS?

答:目前支持Windows、Linux平台运行,但是不支持MacOS。


198问:python版本的api使用Anaconda会跟python不兼容吗?

答:我们编译时使用的python,不能使用Anaconda,如果要直接使用我们封装的库,就只能安装python2.7或python3.6系列的版本。


199问:运行python版本Demo程序报错ImportError: DLL load failed,所有的.dll,.pyd,.lib文件都已经在当前目录了,为什么还找不到指a定的模块?

答:python版本api是用vs2010封装的,如果未安装vs的运行环境安装包,运行测试程序时会提示该错误。需根据python的位数安装对应的vs运行库,python是32位就选vcredist_x86.exe,64位选vcredist_x64.exe。


200问:在windows下运行Python版本的Demo, 错误提示:ImportError: DLL load failed,这是什么原因?
答:是否未安装VS的运行环境?需要安装VS2010的vcredist,根据python的位数选择对应的vcredist运行库,X64位的python选择exe,X32位的python选择vcredist_x86.exe。


201问:登录行情时,错误提示:connect server failed,这是什么原因?

答: 能ping通服务器的话,请检查一下Login时local_ip的值,默认为NULL使用本地网卡的ip。如果传入127.0.0.1就默认本机,就连接不上服务器,local_ip不能输入空串,需传入网卡的ip,不是外网ip。


202问:[XTP:1]connect server failed.[OS:10049]The requested address is not valid in its context。这个行情连接是什么错误?

答:请检查一下login的参数local_ip是否不对。


203问:报单回报中需要资金账户这个字段,请问如何处理?

答:登录成功后,可根据session_id和资金账户做一个映射,那么在收到报单回报时,可以通过session_id获取到资金账户。


204问:session_id在进程重启后会重复吗?

答:进程重启就相当于重启api,重新Login时初始化的session_id是一样的,如果断线重连时没有销毁api,重新Login时session_id会不同。


205问:怎么知道程序中的心跳是否正常?

答:SetHeartBeatInterval设置心跳检测时间间隔默认是15秒,一般在断点调试时,会长时间没有消息通讯,如果心跳间隔值设置短了容易断线,可以适当的设置大点,方便本地调试,比如设置1000秒试试。


206问:同一台机器可以开两个进程接收行情吗?开多个进程接收Level2行情有影响吗?

答:可以,两个进程请使用不同的client id。但是同一台机器开多个进程订阅Level2行情容易丢包,为了确保程序能正常接收行情,一般来说不能超过2个,因为行情数据太多,开多了可能数据推送不过来。


207问:国债逆回购,上交所和深交所回购品种的报单数量各有什么限制?

答:上交所回购品种,报单数量为1000张的整数倍。深交所回购品种,报单数量为10张的整数倍。1手 = 10张。


208问:国债逆回购后,smartX客户端显示的总资产不包含国债逆回购资金吗?

答:如果买入超过1天期的国债逆回购,只能在买入当日看到国债逆回购的持仓。到了第二天,xtp中不会显示国债逆回购的持仓,由于没法计算的市值,总资产也就不会显示逆回购资金。

       如果买入1天期的国债逆回购,T+1日早上就会自动回购,所以看不到持仓。但是收益会到账进入可用资金。


209问:可转债在行情和交易中数量的单位不一致?

答:在行情中,可转债的成交数量qty,上交所是"手"为单位,深交所是"张"为单位。但是在交易中,可转债的报单数量quantity是以"张"为单位。1手=10张。


210问:ETF申赎支持哪些品种?

答:请参见官网上的XTP支持业务列表,第一列交易类是可买卖交易的种类,第二列申购赎回中的白名单是支持申赎的ETF代码,不在白名单里的ETF不能申赎,但可以买卖交易。


211问:SubscribeMarketData订阅行情,包括指数行情吗?如:中证500指数。

答:交易所的实时行情,xtp系统中都有,包括股票、债券、ETF、指数、期权行情。


212问:QueryAllTickers返回的合约静态信息中包括指数吗?

答:该接口查询对应市场的可交易合约(股票/基金/债券/期权)基本信息,不包括指数。


213问:在行情数据里,如何区分一个合约代码是股票还是基金还是指数?比如000828,既是股票又是指数,也是开放式基金,数据源里怎么区分?

答:exchange_id + ticker唯一确定一个证券标的,如果要区分是股票/基金/指数,需要自己针对合约代码特征来识别。可以先使用QueryAllTickersFullInfo接口查询静态信息,通过security_type来判断,然后在本地建立好映射表。


214问:为什么Level2行情是用tcp订阅的MarketData?

答:所有的订阅都是通过tcp发起的请求,只是使用udp来接收行情数据。


215问:采用UDP方式连接时,如何设置行情接收缓冲区大小?

答: 可以通过SetUDPBufferSize接口设置,建议将UDP的缓存设置大点。2.2.30及以上版本的API,可以设置比以前小一些,默认是64M,256M就够,512M就足够。


216问:接收Level2全市场行情数据时CPU占用率一直保持在200%左右,即使盘后没有收到任何行情数据也是这样,请问正常吗?

答:这是正常的,cpu占用率在tcp连接时比较低,udp连接方式会很高,因为除了一个接收线程接收行情外,还有一个解析线程一直在解析行情,如果关闭异步日志,可以减少一个核的占用。


217问:用UDP接收Level2行情时,如何设置线程绑定cpu?

答:分别使用SetUDPRecvThreadAffinity 、SetUDPParseThreadAffinity函数设置接收、解析行情线程绑定cpu。


218问:异步日志文件太大,异步日志的作用是什么?建议是开启还是关闭?

答:异步日志仅在UDP接收Level2行情时会有,主要用来排查丢包情况。建议在调试初期开启,调试稳定后可以关闭,使用SetUDPSeqLogOutPutFlag接口关闭异步日志。


219问:快照行情中last_price和upper_limit_price都是double类型,为什么一只股票的涨停价是2699999, 但是买一价是5.270000?

答:这是因为浮点数导致,股票价格有效位是小数点后两位,请按四舍五入原则处理,保留小数点后两位即可。


220问: 集合竞价的时候,快照数据里面的last_price是有数据的么?

答:集合竞价时候,last_price为0,因为没有成交,就不会有成交价。


221问:OnDepthMarketData返回的十档申买申卖,9:15-9:25之间没有数据?

答:在集合竞价阶段,十档申买申卖字段仅买一卖一有值,即:bid\[0\],ask\[0\],bid_qty\[0\],sk_qty\[0\]有值。


222问:OnDepthMarketData返回的买一卖一队列,什么时候有值?

答: 9:25分Level2行情开始有买一卖一队列数据,也就是十档行情里的买一卖一。


223问:买一卖一队列的有效委托笔数和总委托笔数有什么区别呢?

答:总委托笔数是市场里的委托笔数,而有效委托笔数是系统揭示的委托笔数,xtp中买一卖一队列最多提供50笔数据,如果max_bid1_count >= 50则bid1_count = 50,如果max_bid1_count < 50则max_bid1_count = bid1_count。


224问:股票熔断时,深度行情数据里有标志吗?

答:有标志的,请参见:XTPMarketDataStruct 里的ticker_status,V=波段性中断。


225问:9:15- 9:30行情数据中ticker_status\[0\]是'C'才对啊,为什么会是'B'呢?

答:9:15-9:25为开盘集合竞价时间,ticker_status\[0\]是'C',9:25-9:30之间是'B'。


226问:停牌的股票,行情数据中ticker_status为什么是T0?

答:P肯定是停牌的,但T也可能不能交易,是否可以交易要看第1位,因为停牌的股票,交易所可能发P,也可能发T。


227问:开盘前,想要获取当日股票的涨跌停价格,有接口吗?

答:9:15之前可通过QueryAllTickers获取涨跌停价,参见XTPQuoteStaticInfo。


228问:OnTickByTick推送的逐笔数据中channel_no是什么意思?

答:交易所为不同的证券分配了不同的频道代码,一个channel_no里面可能会有多只股票,一只股票的逐笔委托和逐笔成交数据中channel_no 都相同。在同一个channel_no内seq唯一,从1开始连续。


229问:OnTickByTick返回的逐笔成交数据中交易所时间错乱,如果收到数据直接保存指针,然后对指针所指向的内存数据进行处理会有影响吗?

答:api提供的tickbytick数据,仅在OnTickByTick回调函数中有效,如果您仅仅保存指针,而不是指针所指向的内存数据,就会因为内存在api内部循环使用,导致您后面使用指针的时候,内存数据就不正确了。


230问:查询持仓返回的yesterday_position字段是不是不会变?怎么计算当前仓位中当有多少是今天开的仓位?

答:昨日持仓yesterday_position是不变的。如果仅做普通买卖的话,也没有任何未完结的挂单,那么 总持仓 = 可卖持仓 + 今日买入的持仓。日初的时候,总持仓 = 可卖持仓 = 昨日持仓。


231问:查询回调函数中参数is_last为true时,这最后一个响应有实际的消息数据吗?

答:有实际的消息数据,可能消息只是error_info有效,判断时请先看error_info的error_id是否为0,如果为0,再判断其他参数。不为0的话,其他的参数可能无效。


232问:OnQueryAllTickers返回的ETF合约静态信息中,ticker_type值为什么是6而不是2?

答:交易所官网可以查到每只ETF的交易商名单,如果我们公司不在该名单里,就不支持该ETF,ticker_type 就为6。可参考:http://www.sse.com.cn/assortment/fund/etf/list/。


233问:ETF申赎时,T日申购赎回清单中公布的当日现金差额的估计值是哪个字段?

答:XTPQueryETFBaseRsp中的estimate_amount为T日预估现金差额。cash_component,目前这个字段没有使用。


234问:如果发生分红、配股之类的,通过什么方式去查询呢?

答:如果是普通现货账号,可以通过查询持仓看到分红送股后的总持仓,参见XTPQueryStkPositionRsp中的total_qty。如果是信用账户,可以通过查询负债看到负债合约中增加的权益数量,通过查询持仓可以看到担保品持仓中送股后的总持仓。


234问:融券期间发生的分红、配股,这些权益应该怎么计算?

答:如果有分红送股,在融资融券负债信息XTPCrdDebtInfo中due_right_qty应偿还权益数量会体现。假如融券某只股票1000股,查询负债合约中未偿还融券数量是1000,此时应偿还权益数是0,如果某天这只股票10送3,那么在除权除息日之后,您的负债合约中应偿还权益数量是300,未偿还融  券的数量就变成了1300。


236问:qty_upper_limit是指账户对这只股票的最大申购数量吗?错误提示:11010413 The quantity of IPO order exceeds the quota。

答:qty_upper_limit是指这只股票的最大允许申购数量,需查询可申购额度quantity,参见XTPQueryIPOQuotaRsp,请使用min(可申购额度,最大允许申购数量)进行新股申购。


237问:报市价单是否可以不用填价格?

答:市价单的price没有意义。主板股票市价委托,可以不填价格。科创板市价委托需要填一个价格,市价委托有保护限价概念,买入不高于这个限价范围。成交通知中返回的是成交价格。


238问:查询报单和报单是不是共用一个线程?

答:是共用一个socket,如果查询消息没有处理完,会堵塞后续订单响应消息。报单后,如果有查询消息在处理,则会等待查询结果发送完毕,再发送报单的回报消息,那么收到订单确认消息就晚了。


239问:报单全部成交时,OnTradeEvent推送快还是OnOrderEvent更快一点?

答:对于全部成交的情况,最后有一个全部成交的状态,这个状态在OnTradeEvent之后推送。也就是OnOrderEvent先推送一个初始状态,有成交时OnTradeEvent推送成交信息,全成时OnOrderEvent再推送一个最终的全成状态。


240问:订单已全部成交,其后对该订单进行撤单,在查询成交结果里面,只有order_xtp_id,无法和其他订单关联,原订单也不存在,order_cancel_xtp_id,如何处理?

答:查询成交返回的订单,并不是按照成交顺序返回的。目前撤单废单无法关联到原单。逐笔成交里面,看不到沪市的撤单信息。


241问:查询ETF基本信息和ETF成分股信息是两个单独的回调函数,申赎ETF时如何判断成分股全都收到了,中间有没有丢失?

答:OnOrderEvent返回的order_status为全部成交状态时,就表明ETF成分股都收到了。


242问:报单后会返回一个初始的未成交状态吗?然后对该订单进行撤单,OnOrderEvent会返回几种报单状态?

答:报单状态order_status,初始化状态是报单到柜台,未成交状态是收到了交易所确认,撤单前OnOrderEvent会返回初始化、未成交两种状态。如果撤单时订单部分成交,会返回一个部分撤单状态。


243问:报单后撤单,会有先收到撤单成功,再收到成交通知的情况吗?

答:xtp 撤单的时候,如果是部分成交,一般是先收到部分成交的通知,再收到撤单成功的通知,但如果成交回报消息超时,就有可能先收到撤单成功,再收到部分成交的通知。


244问:是否能根据order_cancel_xtp_id判断是报单还是撤单?

答:具体报单还是撤单,要根据order_submit_status来区分。如果一个报单是全撤状态,那么订单的order_cancel_xtp_id != 0成立,但是order_cancel_xtp_id != 0 时订单不一定就是报单,我们允许对撤单进行撤单,只是会拒单。


245问:在收到撤单回报之后,又收到之前的成交回报,这种情况是否会发生?

答:交易所本身发送的消息是存在这种情况的,但是xtp在某种程度上保证消息顺序,会一直等到成交回报到齐之后再发送撤单成功消息给用户。


246问:查询股票持仓,返回的数据中purchaseRedeemableQty应该是和ETF相关的,为什么普通A股这个字段有数据?

答:如果是ETF的成分股,就代表可用于申购的数量。如果是ETF,就代表可用于赎回的数量。


247问:15点收盘交易结束时,未成交的单子会自动撤回吗?

答:实盘中申报的订单,15点收盘以后,未成交的订单在晚间清算时会按撤单处理,冻结的资金,清算后为可用资金。


248问:QueryTrades可以查询所有历史成交记录吗?怎么返回find none record?

答:xtp不能查询历史记录,服务器每天都重启,仅保持一天的数据,api和客户端都只能查询到当天的订单记录。


249问:信用账户买卖交易报单,错误提示:11000310,User type not match with business type. 这是什么原因?

答:信用户不能进行普通交易,可以担保品买入或卖出,business_type = 4,Side = 28/29。


250问:融资买入的时候,可用资金也会减少?

答:不会,担保品买入时可用资金会减少。


251问:现券还券可以指定使用今仓或昨仓吗?

答:现券还券优先使用当日买入的持仓,然后再使用昨仓。不可以指定用昨仓还券。


252问:融资融券现金还款,错误提示:11000905,Do not have enough fund to do cash repay! 要先查询可用资金,再查一下负债all_debt,然后用两者最小值来还?

答:先查可用资金,如果申请金额大于可用资金余额,报单会拒单,如果申请金额大于所有负债未偿还金额,则不会拒单,最终以实际使用金额为准。


253问:融资买入产生的挂单,会冻结资金吗?信用额度会减少吗?

答:对于融资买入,未成交或部分成交的挂单,会冻结融资头寸,授信额度也会减少,可参考XTPCrdFundInfo结构体中的line_of_credit字段。


254问:担保品划转是实时扣减数量么?

答:对于担保品转出,会实时扣减数量,当收到订单确认消息,即视为转出成功。对于担保品转入,不会实时扣减,当收到订单确认消息时,不是真正的转入成功,需要等盘后清算时确认。


255问:查询指定证券的融券负债,XTPCrdDebtStockInfo中stock_repay_quantity是指可以用来还券的数量吗?今日融券总数量如何计算?

答: stock_repay_quantity指的是融券负债中今日可还券的数量,不包含当天融券卖出的数量,今日融券卖出的数量 = 融券负债未还总数量 - 融券负债可还券数量。


256问:使用现券还券偿还融券负债后,当天能恢复"两融授信额度"和"可融券数量"吗?

答:"两融授信额度"和"可融券数量"是两个相互独立的概念,在柜台是分别校验的。两融授信额度line_of_credit是实时恢复的,可融券数量left_qty当天不能恢复,需要等到晚间清算后才能恢复。


257问:OnQueryCreditTickerAssignInfo返回的是剩余可融数量。请问哪个接口能返回总的融券头寸?

答:目前没有这个字段,可以根据剩余可融券数量与负债中未偿还融券数量进行累计。


258问:OnQueryCreditTickerAssignInfo返回的yesterday_qty 是不是昨夜的总融券头寸?

答:yesterday_qty这个字段没有启用。


259问:资产里的持仓总市值和持仓里的持仓市值,这两个值没有,后续有计划提供吗?

答:由于交易服务器没有连接行情服务器,目前不太好提供这个数值。


260问:融券卖出后,融券卖出所得资金余额会马上增加,还是T+1日增加?

答:repay_stock_aval_banlance会马上增加。


261问:融券卖出报错:11010503,Failed to check credit stock position. 是什么意思?

答:该证券的剩余可融券数量不足,请根据可融券头寸信息中的剩余可融券数量来下单。


262问:买券还券时,使用的是账户资金里的可用资金吗?

答:会优先使用融券卖出所得资金余额,如果不够的话,会自动使用可用资金。


263问:融券负债中应偿还权益数量是什么意思?remain_qty不包含due_right_qty吗?

答:融券卖出后分红送股的数量,也就是应偿还权益数量due_right_qty,这部分数量也要偿还。remain_qty不包含due_right_qty,需要还券总数量为due_right_qty + remain_qty。


264问:现券还券操作没有报错,但是OnTradeEvent没有响应,怎样才能成交?

答:现券还券属于非交易类型,没有成交回报,订单确认就可以,负债信息中的未偿还融券数量、持仓相应的都会更新。


265问:现券还券报单后会冻结仓位吗?

答:订单确认后,如果使用的今仓则总持仓会减少,如果使用的昨仓则可卖持仓会减少。


266问:信用账户查询持仓,同一个证券如何区分哪些是融资买入,哪些是担保品买入?

答:OnQueryPosition 返回的总持仓不区分融资买入和担保品买入。卖出时可以都填担保品卖,如果有对应的融资负债,会自动转换成卖券还款。


267问:如何在XTP两融账户里买卖货币基金?

答:使用担保品买、担保品卖。


268问:购买货币基金,只能使用融券卖出的所得资金吗?

答:购买货币基金时,会优先使用融券卖出所得资金余额,再使用自有资金。在卖出货币基金成交后,会先增加融券卖出所得资金余额,剩余部分增加到账户可用资金。


269问:QueryAllTickers获取不到交易日停牌的股票静态信息?

答:可以使用QueryAllTickersFullInfo来获取所有合约的静态信息。


270问:只是创业板和科创板股票有价格笼子概念吗?

答:目前受价格笼子限制的有:创业板、科创板、新三板,以及无涨跌幅限制的可转债。


271问:创业板股票使用涨停价下单,为什么一直是挂单状态?

答:创业板在连续竞价阶段限价申报要遵守价格笼子的规定,超出范围的报单就进入挂单状态,暂存在交易系统后台,当价格波动使其进入有效竞价范围时,交易主机自动取出申报,参加竞价。


272问:可转债是没有涨跌停价格限制的,报单任意一个价格都可以吗,还是也需要有指定的价格范围?比如,可转债挂了1元的买单,交易所会拒单吗?

答:可转债在连续竞价阶段也有价格笼子的限制,超出价格笼子的报单。如果是深交所,不会拒单,暂时不会进入撮合系统,等到价格笼子范围内再取出撮合,如果是上交所,就会直接拒单。


273问:沪市逐笔成交行情中,trade_flag是不是盘前盘后集合竞价都是N,连续竞价是B或者S?

答:是的,集合竞价阶段trade_flag = 'N',不存在主动买和卖的区分。


274问:不同的进程中trader能收到其他进程的订单消息和成交回报,那么quote是否会收到其他进程的订阅和查询消息呢?

答:不会的,不同的进程quote消息互不影响,trader查询消息也互不影响。


275问:有接口可以查询到现在还没有成交的挂单吗?

答:可通过QueryUnfinishedOrders接口查询未完结的报单。


276问:purchase_redeemable_qty是今日可申购赎回数量,还是今日已申购赎回数量?

答:是可申购或者可赎回的数量。如果是ETF的成分股,就是可用于申购的数量,如果是ETF,就是可用于赎回的数量。


277问:除了调用Login登录,还需要LoginALGO登录么?

答:如果要使用算法功能,则需要LoginALGO登录,否则不需要。


278问:是先调用ALGOUserEstablishChannel,再调用LoginALGO吗?

答:不是,先调用Login和LoginALGO成功后,再调用ALGOUserEstablishChannel,建立算法通道。


279问:如果只想QueryStrategy查询策略,也要调用ALGOUserEstablishChannel吗?

答:只查询也要调用。


280问:如果主动logout登出oms,客户端和algobus建立的连接会断开吗?重新登录oms会有新的session吗?

答:oms断开的时候,algobus不会断开。重新登录oms后会得到新的session_id,需要使用新的session_id报算法单,但不需重新建立算法通道。


281问:调用InsertAlgoOrder后,算法单的母单号ID对应哪个字段呢

答:m_xtp_strategy_id就是母单号ID,参见OnInsertAlgoOrder返回的结构体XTPStrategyInfoStruct。


282问:成交回报的order_client_id就是算法单的m_client_strategy_id吗?

答:不是,可通过GetAlgorithmIDByOrder函数获取子单的母单ID,如果返回为0,则表示不是算法单。


283问:在OnTradeEvent成交回报里,有办法能获取母单的client_strategy_id吗?

答:目前没有办法获取。


284问:不知道母单的合约代码,如何获取算法单的母单ticker?

答:OnQueryStrategy返回值有母单的报单参数,解析strategy_param字符串,可以获取ticker。


285问:如果启动使用restart模式,OnStrategyStateRepot会推送本交易日的历史数据吗?

答:OnStrategyStateRepot不会,OnOrderEvent和OnTradeEvnet则会从本交易日重传推送。


286问:母单收到了OnInsertAlgoOrder,但是没有收到OnStrategyStateReport,这是为什么?

答:因为这个单子的状态没有变化。


287问:已停止状态的母单,可能还会一直推送OnStrategyStateReport消息吗?

答:可能会,比如:母单执行完停止了,但是时间还没有到用户设定的end_time,这时市场价格还是会不停地刷新。


288问:CancelAlgoOrder成功后,母单是已停止状态还是已销毁状态?

答:CancelAlgoOrder的参数cancel_flag,如果是true,就是已停止,如果是false,就是已销毁。不管是已停止还是已销毁,都不会再有交易。


289问:CancelAlgoOrder,cancel_flag为false会撤子单吗?

答:false也会撤子单,但是只会撤一次。


290问:当我收到一个非本客户端发出的母单回报时,都要query一下才能拿到剩余信息,还有其他方式获取吗?

答:OnStrategyStateReport返回的strategy_state,可计算出剩余信息, 请参考 XTPStrategyStateReportStruct结构体。


291问:OnAlgoConnected函数,第一次登陆不会被调用吗,只有重连的时候才会被调用吗?

答:是的,仅在断线重连成功才会被调用。


292问:algo算法对零散股的处理逻辑是什么样的呢?

答:有些算法,不支持零散股报单,会有报错提示。


293问:可转债报单的价格精度,沪深两个市场一样吗?

答:不一样,上海申报可转债价格最小变动范围是0.01元,深圳是0.001元。如果跟报单价格跟交易所的精度不一致,会导致拒单。


294 问:订单薄行情,推送频率是间隔多长时间?

答:订单薄是实时推送,没有间隔时间限制。


295 问:ETF申赎,休市期间可以撤单吗?

答:不可以,xtp系统不再支持 休市期间 对ETF申赎的撤单委托。


296问:沪市ETF申赎,多码合一后,交易所推送的成交回报有什么变化?

答:ETF申赎同一个市场,资金替代只会有一条资金成交回报。成份股中成交数量为0的成交记录,现金替代金额为0的成交记录,成交回报中不再推送。



  • No labels