src/API/oesApi0.17.5.8/include/mds_api/UpdateGuide.md
include/mds_api/CHANGELOG.mdinclude/mds_api/UpdateGuide.mdMdsStockSnapshotBodyT' 结构体定义, 增加如下深交所债券行情专用字段:
- 深交所债券加权平均价 BondWeightedAvgPx, 仅适用于深交所质押式回购及债券现券交易产品, 表示质押式回购成交量加权平均利率及债券现券交易成交量加权平均价
- 深交所债券匹配成交的最近成交价 BondAuctionTradePx, 仅适用于深交所债券现券交易产品
- 深交所债券匹配成交的成交总量 BondAuctionVolumeTraded, 仅适用于深交所债券现券交易产品eMdsSubStreamTypeT' 枚举类型定义, 增加行情数据类别:
- 深交所债券现券交易匹配成交大额逐笔行情 (MDS_SUB_STREAM_TYPE_BOND_BLOCK_TRADE, 仅适用于深交所逐笔行情)MdsStockSnapshotBodyT' 结构体定义, 增加如下深交所债券行情专用字段:
- 深交所债券加权平均价 BondWeightedAvgPx, 仅适用于深交所质押式回购及债券现券交易产品, 表示质押式回购成交量加权平均利率及债券现券交易成交量加权平均价
- 深交所债券匹配成交的最近成交价 BondAuctionTradePx, 仅适用于深交所债券现券交易产品
- 深交所债券匹配成交的成交总量 BondAuctionVolumeTraded, 仅适用于深交所债券现券交易产品eMdsSubStreamTypeT' 枚举类型定义, 增加行情数据类别:
- 深交所债券现券交易匹配成交大额逐笔行情 (MDS_SUB_STREAM_TYPE_BOND_BLOCK_TRADE, 仅适用于深交所逐笔行情)__channelNo' 和 '行情数据的更新版本号 __dataVersion', 则需要升级到最新版本eMdsMsgSourceT 枚举类型的取值有调整, 如果使用到该枚举类型, 也需要升级到最新版本eMdsSubStreamTypeT' 枚举类型定义, 用于标识具体行情数据类别 (如: 股票、债券、基金、指数、期权等)eMdsMdStreamTypeT' 枚举类型定义
@see eMdsMsgTypeTsubStreamType 字段 @see eMdsSubStreamTypeTeMdsMsgSourceT' 的枚举类型取值 (@note 取值发生变化)MdsMktDataSnapshotHeadT' 结构体定义
mdStreamType' 字段 => '快照数据对应的消息类型 bodyType'subStreamType', 用于标识具体行情数据类别 (如: 股票、债券、基金、指数、期权等)__channelNo:uint8' 的定义顺序, 并重新定义为 => '频道代码 __channelNo:uint16'__dataVersion:uint32' 的定义顺序, 并调整数据类型 => uint16MdsL2StockSnapshotBodyT' 结构体定义, 增加如下债券行情专用字段:
BondWeightedAvgPx, 适用于质押式回购及债券现券交易产品, 表示质押式回购成交量加权平均利率及债券现券交易成交量加权平均价BondAuctionTradePx, 仅适用于深交所债券现券交易产品BondAuctionVolumeTraded, 仅适用于深交所债券现券交易产品BondAuctionValueTraded, 仅适用于深交所债券现券交易产品MdsL2TradeT' 和 '逐笔委托 MdsL2OrderT' 结构体定义
ChannelNo:int32' 的数据类型 => uint16subStreamType', 用于标识具体行情数据类别 (如: 股票、债券、基金等)__channelNo'MdsTradingSessionStatusMsgT' 和 '证券实时状态 MdsSecurityStatusMsgT' 结构体中的内部字段定义
__dataVersion:uint32' 的数据类型 => uint16__channelNo'MdsStockStaticInfoT 中添加字段:
pricingMethod', 目前仅适用于债券现券交易产品以下枚举类型的取值或定义发生调整, 如果使用到, 需要升级到最新版本
eMdsMsgSourceT 枚举类型的取值有调整eMdsMdStreamTypeT 枚举类型已经废弃
@see eMdsMsgTypeTsubStreamType 字段 @see eMdsSubStreamTypeT以下内部字段发生调整, 如果使用到, 需要升级到最新版本
__dataVersion:uint32' 的数据类型 => uint16__channelNo:uint8' (快照行情将该字段重新定义为 => '频道代码 __channelNo:uint16')Lv2快照行情 MdsL2StockSnapshotBodyT 中新增的债券行情字段通过 union 的方式复用了仅适用于基金、期权或上交所的行情字段, 使用时需要按照行情数据类别或交易所代码进行区分
BondWeightedAvgPx 字段可以根据 '行情数据类别 subStreamType' 进行区分, 例如: - IOPV = pSnapshot->head.subStreamType != MDS_SUB_STREAM_TYPE_BOND ? pSnapshot->l2Stock.IOPV : 0;
- BondWeightedAvgPx = pSnapshot->head.subStreamType != MDS_SUB_STREAM_TYPE_BOND ? 0 : pSnapshot->l2Stock.BondWeightedAvgPx;
BondAuctionTradePx、深交所债券匹配成交的成交总量 BondAuctionVolumeTraded、深交所债券匹配成交的成交总金额 BondAuctionValueTraded 这三个字段可以根据交易所代码进行区分, 例如: - BondAuctionTradePx = pSnapshot->head.exchId == MDS_EXCH_SZSE ? pSnapshot->l2Stock.BondAuctionTradePx : 0;
- BondAuctionVolumeTraded = pSnapshot->head.exchId == MDS_EXCH_SZSE ? pSnapshot->l2Stock.BondAuctionVolumeTraded : 0LL;
- BondAuctionValueTraded = pSnapshot->head.exchId == MDS_EXCH_SZSE ? pSnapshot->l2Stock.BondAuctionValueTraded : 0LL;
服务端兼容 v0.15.5.1 版本API, 客户可以选择不升级
fix: 在上海增量快照中增加最高价/最低价字段,以修复可能会丢失增量快照中的最高价/最低价变化的问题
fix: 增加对Windows下的CPU绑定操作的支持, 并完善Windows下的进程号、线程号处理
增加对上交所逐笔委托行情的支持:
为异步API增加内置的查询通道,并整合查询通道管理和查询接口到异步API中
增加查询通道相关的配置接口
| API | 描述 |
|---|---|
| MdsAsyncApi_SetBuiltinQueryable | 设置是否启用内置的查询通道 (即启动异步API时自动创建一个内置的查询通道) |
| MdsAsyncApi_IsBuiltinQueryable | 返回是否启用内置的查询通道 |
| MdsAsyncApi_SetBuiltinQueryChannelCfg | 设置内置的查询通道的配置信息 |
| MdsAsyncApi_LoadBuiltinQueryChannelCfg | 从配置文件中加载内置的查询通道的配置信息 |
| MdsAsyncApi_GetBuiltinQueryChannelCfg | 返回内置的查询通道的配置信息 |
| MdsAsyncApi_GetBuiltinQueryChannelRef | 返回内置的查询通道的会话信息 |
增加异步API查询接口
| API | 描述 |
|---|---|
| MdsAsyncApi_QueryMktDataSnapshot | 查询证券行情快照 |
| MdsAsyncApi_QuerySnapshotList | 批量查询行情快照 |
| MdsAsyncApi_QuerySnapshotList2 | 批量查询行情快照 |
| MdsAsyncApi_QuerySecurityStatus | 查询(深圳)证券实时状态 |
| MdsAsyncApi_QueryTrdSessionStatus | 查询(上证)市场状态 |
| MdsAsyncApi_QueryStockStaticInfoList | 批量查询证券(股票/债券/基金)静态信息列表 |
| MdsAsyncApi_QueryStockStaticInfoList2 | 批量查询证券(股票/债券/基金)静态信息列表 |
样例代码参见: samples/mds_sample/01_mds_async_tcp_sample.c
增加辅助的异步API接口, 以支持对通信线程、回调线程等异步API线程进行初始化处理
| API | 描述 |
|---|---|
| MdsAsyncApi_SetOnCommunicationThreadStart | 设置通信线程的线程初始化回调函数 |
| MdsAsyncApi_SetOnCallbackThreadStart | 设置回调线程的线程初始化回调函数 |
| MdsAsyncApi_SetOnIoThreadStart | 设置异步I/O线程的线程初始化回调函数 |
增加辅助的行情订阅和会话管理接口
| API | 描述 |
|---|---|
| MdsAsyncApi_DefaultOnConnect | 连接完成后处理的默认实现 (执行默认的行情订阅处理) |
| MdsAsyncApi_SubscribeByQuery | 查询证券静态信息并根据查询结果订阅行情信息 (异步API) |
| MdsApi_SubscribeByQuery | 查询证券静态信息并根据查询结果订阅行情信息 (同步API) |
| MdsApi_GetClientId | 返回通道对应的客户端编号 |
| MdsHelper_AddSubscribeRequestEntry2 | 添加待订阅产品到订阅信息中 (没有数量限制) |
调整UDP行情组播的心跳间隔时间为: 10秒 (如果超过3倍心跳时间没有收到任何组播消息, 就可以认为组播链路有故障)
增加对组播地址连接的高可用处理, 为异步API增加组播地址的自动切换处理 (连接异常时自动尝试下一个组播地址), 为同步API增加相应的辅助接口
| API | 描述 |
|---|---|
| MdsApi_SetUdpReconnectFromNextAddrAble | 设置重建连接组播通道时是否从下一个地址开始尝试 |
| MdsApi_IsUdpReconnectFromNextAddrAble | 返回重建连接组播通道时是否从下一个地址开始尝试 |
isEnd 标志为 TRUE 的现象
(@note 修改后存在如果最后一轮查询结果为空的话, 会导致 isEnd 一直都无法被设置上的问题,这个问题需要客户端在查询接口执行完成以后自行判断和处理一下)tickType 默认取值为1| API | 描述 |
|---|---|
| MdsApi_SetUdpReconnectFromNextAddrAble | 设置重建连接组播通道时是否从下一个地址开始尝试 |
| MdsApi_IsUdpReconnectFromNextAddrAble | 返回重建连接组播通道时是否从下一个地址开始尝试 |
服务端兼容 v0.15.5.1 版本API, 客户可以选择不升级
fix: 在上海增量快照中增加最高价/最低价字段,以修复可能会丢失增量快照中的最高价/最低价变化的问题
fix: 增加对Windows下的CPU绑定操作的支持, 并完善Windows下的进程号、线程号处理
增加对上交所逐笔委托行情的支持:
MDS_MSGTYPE_L2_SSE_ORDER, 仅适用于上交所)MDS_SUB_DATA_TYPE_L2_SSE_ORDER, 仅适用于上交所)为异步API增加内置的查询通道,并整合查询通道管理和查询接口到异步API中
增加查询通道相关的配置接口
| API | 描述 |
|---|---|
| MdsAsyncApi_SetBuiltinQueryable | 设置是否启用内置的查询通道 |
| MdsAsyncApi_IsBuiltinQueryable | 返回是否启用内置的查询通道 |
| MdsAsyncApi_SetBuiltinQueryChannelCfg | 设置内置的查询通道的配置信息 |
| MdsAsyncApi_LoadBuiltinQueryChannelCfg | 从配置文件中加载内置的查询通道的配置信息 |
| MdsAsyncApi_GetBuiltinQueryChannelCfg | 返回内置的查询通道的配置信息 |
| MdsAsyncApi_GetBuiltinQueryChannelRef | 返回内置的查询通道的会话信息 |
增加异步API查询接口
| API | 描述 |
|---|---|
| MdsAsyncApi_QueryMktDataSnapshot | 查询证券行情快照 |
| MdsAsyncApi_QuerySnapshotList | 批量查询行情快照 |
| MdsAsyncApi_QuerySnapshotList2 | 批量查询行情快照 |
| MdsAsyncApi_QuerySecurityStatus | 查询(深圳)证券实时状态 |
| MdsAsyncApi_QueryTrdSessionStatus | 查询(上证)市场状态 |
| MdsAsyncApi_QueryStockStaticInfoList | 批量查询证券(股票/债券/基金)静态信息列表 |
| MdsAsyncApi_QueryStockStaticInfoList2 | 批量查询证券(股票/债券/基金)静态信息列表 |
样例代码参见: samples/mds_sample/01_mds_async_tcp_sample.c
增加辅助的异步API接口, 以支持对通信线程、回调线程等异步API线程进行初始化处理
| API | 描述 |
| ------------------------------------------| -------------------- |
| MdsAsyncApi_SetOnCommunicationThreadStart | 设置通信线程的线程初始化回调函数 |
| MdsAsyncApi_SetOnCallbackThreadStart | 设置回调线程的线程初始化回调函数 |
| MdsAsyncApi_SetOnIoThreadStart | 设置异步I/O线程的线程初始化回调函数 |
7. 增加辅助的行情订阅和会话管理接口
| API | 描述 |
| ------------------------------------------| -------------------- |
| MdsAsyncApi_DefaultOnConnect | 连接完成后处理的默认实现 (执行默认的行情订阅处理) |
| MdsAsyncApi_SubscribeByQuery | 查询证券静态信息并根据查询结果订阅行情信息 (异步API) |
| MdsApi_SubscribeByQuery | 查询证券静态信息并根据查询结果订阅行情信息 (同步API) |
| MdsApi_GetClientId | 返回通道对应的客户端编号 |
| MdsHelper_AddSubscribeRequestEntry2 | 添加待订阅产品到订阅信息中 (没有数量限制) |
__channelNo' 的定义顺序, 如果使用了该字段就需要升级到最新版本;__origTickSeq', 该字段没有业务含义通常不会被使用到, 如果使用了该字段, 需要修改或删除相关代码。MdsStockStaticInfoT 中新增证券子类型:
- 新增 基础设施基金 OES_SUB_SECURITY_TYPE_FUND_REITS| API | 描述 |
| ------------------------------| -------------------- |
| MdsApi_GetClientType | 返回通道对应的客户端类型 |
| MdsApi_GetClientStatus | 返回通道对应的客户端状态 |
| MdsApi_SetRetainExtDataAble | 设置是否保留(不清空)由应用层自定义使用的扩展存储空间数据 (__extData) |
| MdsApi_IsRetainExtDataAble | 返回是否保留(不清空)由应用层自定义使用的扩展存储空间数据 |
eOesSecurityAttributeT 枚举类型MdsStockStaticInfoT' 中启用 证券属性 securityAttribute 字段WSACleanup 资源释放处理,避免额外调用 WSACleanup 导致外部系统的网络操作异常struct timespec 结构体未按64位对齐的问题| API | 描述 |
| ----------------------------------------| -------------------- |
| MdsAsyncApi_GetAsyncQueueTotalCount | 返回异步API累计已入队的消息数量 |
| MdsAsyncApi_GetAsyncQueueRemainingCount | 返回队列中尚未被处理的剩余数据数量 |
| API | 描述 |
| -----------------------------------| -------------------- |
| MdsAsyncApi_IsAllTerminated | 检查所有线程是否均已安全退出 |
4. 同步API新增如下接口
| API | 描述 |
| -----------------------------------| -------------------- |
| MdsApi_QueryStockStaticInfoList | 批量查询证券(股票/债券/基金)静态信息列表 |
| MdsApi_QueryStockStaticInfoList2 | 批量查询证券(股票/债券/基金)静态信息列表 (字符串指针数组形式的证券代码列表) |
| MdsApi_GetChannelGroupLastRecvTime | 返回通道组最近接收消息时间 |
| MdsApi_GetChannelGroupLastSendTime | 返回通道组最近发送消息时间 |
| MdsApi_HasStockStatus | 返回现货产品是否具有指定状态|
| __MdsApi_CheckApiVersion | 检查API版本是否匹配 (检查API头文件和库文件的版本是否匹配) |
5. 为支持创业板注册制改革, 证券静态信息 MdsStockStaticInfoT 中新增如下字段:
| 字段 | 描述 |
| -------------------------- | -------------------- |
| isRegistration | 是否注册制 |
| currType | 币种 |
| qualificationClass | 投资者适当性管理分类 |
| securityStatus | 证券状态 |
| securityAttribute | 证券属性 (保留字段) |
| suspFlag | 连续停牌标识 |
| isDayTrading | 是否支持当日回转交易 |
| isCrdMarginTradeUnderlying | 是否为融资标的 |
| isCrdShortSellUnderlying | 是否为融券标的 |
| isCrdCollateral | 是否为融资融券担保品 |
| isNoProfit | 是否尚未盈利 |
| isWeightedVotingRights | 是否存在投票权差异 |
| isVie | 是否具有协议控制框架 |
| lmtBuyQtyUnit | 限价买入单位 |
| lmtSellQtyUnit | 限价卖出单位 |
| mktBuyQtyUnit | 市价买入单位 |
| mktSellQtyUnit | 市价卖出单位 |
| parValue | 面值 (重命名 parPrice) |
| auctionLimitType | 连续交易时段的有效竞价范围限制类型 |
| auctionReferPriceType | 连续交易时段的有效竞价范围基准价类型 |
| auctionUpDownRange | 连续交易时段的有效竞价范围涨跌幅度 |
| listDate | 上市日期 |
| maturityDate | 到期日期 (仅适用于债券等有发行期限的产品) |
| underlyingSecurityId | 基础证券代码 |
| securityLongName | 证券长名称 (UTF-8 编码) |
| securityEnglishName | 证券英文名称 (UTF-8 编码) |
| securityIsinCode | ISIN代码 |
6. 证券静态信息 MdsStockStaticInfoT 中新增证券子类型(同OES):
- 创业板存托凭证 OES_SUB_SECURITY_TYPE_STOCK_GEMCDR
- 可交换债券 OES_SUB_SECURITY_TYPE_BOND_EXG
- 商品期货ETF OES_SUB_SECURITY_TYPE_ETF_COMMODITY_FUTURES
7. 优化异步API
- 为异步API增加是否优先使用大页内存来创建异步队列的配置项
- 为异步API的I/O线程增加追加模式输出的配置项
- 为异步API的I/O线程增加支持忙等待的配置选项,以使异步队列的延迟统计结果更接近实际情况
8. 优化时间戳精度, 将系统下的时间戳全部升级为纳秒级时间戳, 以提高时延统计的精度
- 时间戳字段的数据类型从 STimevalT / STimeval32T 变更为 STimespecT / STimespec32T
- 协议保持兼容, 但如果使用到了时间戳字段下的微秒时间 tv_usec 字段, 则需要修改为纳秒时间 tv_nsec 字段,
否则会因为时间单位的调整而导致时延计算错误
9. API中添加vs2015工程样例
__origTickSeq 的问题tv_usec 字段, 则需要升级API到最新版本
tv_usec 字段, 如果使用到了该字段, 则需要改为使用纳秒时间 tv_nsec 字段,
否则会因为时间单位的调整而导致时延计算错误tv_usec 字段。如果没有编译错误就无需再做额外的调整SIGPIPE 信号的屏蔽处理,以避免连接断开以后重复 send 导致程序异常退出MdsAsyncApi_CreateContextMdsAsyncApi_AddChannelMdsAsyncApi_StartMdsAsyncApi_StopMdsAsyncApi_ReleaseContextmds_api/samples/mds_sample/01_mds_async_tcp_sample.cMdsAsyncApi_SubscribeMarketDataMdsAsyncApi_SubscribeByStringMdsAsyncApi_SubscribeByStringAndPrefixesmds_api/samples/mds_sample/03_mds_async_udp_sample.coutstandingShare' 和 '流通股数量 publicFloatShare' (API保持兼容)eMdsMdStreamTypeT 中新增类型 '深交所国证指数快照行情 MDS_MD_STREAM_TYPE_SZSE_CN_INDEX'CloseIdx 字段的注释信息, 深圳指数快照行情也将提供收盘指数eMdsMdStreamTypeT 中新增了数据类型 '深交所国证指数快照行情 MDS_MD_STREAM_TYPE_SZSE_CN_INDEX',
可以通过该类型来区分普通指数快照和国证指数快照。mds_api/samples/01_mds_async_tcp_sample.ctickRebuildFlag', 用于标识是否订阅重建到的逐笔数据@see eMdsSubscribeModeTbeginTime 和 isRequireInitialMktData 订阅参数SubscribeByString 设置附加订阅参数的API接口
MdsApi_SetThreadSubscribeTickTypeMdsApi_SetThreadSubscribeTickRebuildFlagMdsApi_SetThreadSubscribeTickExpireTypeMdsApi_SetThreadSubscribeRequireInitMdMdsApi_SetThreadSubscribeBeginTimeMdsApi_SetThreadAutoSubscribeOnLogonMdsCsvParser_DecodeCsvRecord| 错误码 | 描述 |
| ---- | --------------- |
| 1037 | 集群编号不匹配 |
| 1038 | 无此操作权限 |
10. 替换头文件中使用的 likely / unlikely 关键字, 以避免与第三方库的同名函数冲突
- 若编译时提示 likely 与 boost 库中的函数名称冲突, 可以通过指定宏 __NO_SHORT_LIKELY 来解决
mdStreamType, eMdsMdStreamTypeT 的取值, 使其可以标识出快照行情的具体数据类型
securityType => mdProductType, 以避免与交易端的证券类型混淆
- securityType => mdProductType
- eMdsSecurityTypeT => eMdsMdProductTypeT| API | 描述
| ---------------------------- | ---------------
| MdsApi_QueryStockStaticInfo | 查询证券(股票/债券/基金)静态信息
| MdsApi_QuerySnapshotList | 批量查询行情快照接口
| MdsApi_InitAllByCfgStruct | 按照配置信息结构体初始化客户端环境接口
| MdsApi_SendChangePasswordReq | 修改客户端登录密码
| MdsApi_SetCustomizedIp | 设置客户端自定义的本地IP地址
| MdsApi_GetCustomizedIp | 获取客户端自定义的本地IP
| MdsApi_SetCustomizedMac | 设置客户端自定义的本地MAC地址
| MdsApi_GetCustomizedMac | 获取客户端自定义的本地MAC
| MdsApi_SetCustomizedDriverId | 设置客户端自定义的本地设备序列号
| MdsApi_GetCustomizedDriverId | 获取客户端自定义的本地设备序列号
8. 新增错误码1029、1034、1035、1036, 调整错误码1007、1022的描述信息
| 错误码 | 描述
| ---- | ---------------
| 1007 | 非服务开放时间
| 1022 | 尚不支持或尚未开通此业务
| 1029 | 密码未改变
| 1034 | 密码强度不足
| 1035 | 非法的产品类型
| 1036 | 未通过黑白名单检查
MdsApi_SubscribeByString 接口的字符串缓存太小, 最多只能订阅14000只证券的问题securityType => mdProductTypemdStreamType, eMdsMdStreamTypeT 的取值tickType=0 的模式订阅行情时, 服务器端会对重复的快照行情做去重处理, 不会再推送重复的数据tickType=1 的模式订阅行情。该模式会和之前版本的行为保持一致, 只要行情时间有变化, 即使数据重复也会对下游推送