上证所Level-2行情接口开发
上证所Level-2行情接口开发
高昀
主要内容
Level-2产品介绍
Level-2系统接入
Level-2数据解码
一、Level-2产品介绍
Level-1行情的不足
Level-1行情Show2003.dbf不足之处
内容
信息量少,市场深度反映不够--Show2003只有29个有效字段
实时信息产品单一--Show2003为仅有的实时行情产品
按同一模式显示不同的交易品种--显示债券、基金信息时出现“市盈率”字段名
技术
5秒钟一次的快照,文件交换方式,发布延时明显
信息内容可扩展性差--dbf文件是固定字段,只能通过增加数据库字段方式来增加信息内容
从Level-1到Level-2
商业模式:“免费”->收费
发布路径:券商->信息商
行情深度:五档->十挡,新增委托明细和全部成交信息
行情频率:5秒->3秒
数据格式:dbf->FIX/STEP->FAST
交换方式:文件->文本数据流->二进制数据流
行情延时:3秒->28毫秒->20毫秒
Level-2内容
ReferenceData(UA101)
Transaction(UA3101)
MarketData(UA3102,UA3113)
OrderQueue(UA3111)
行情展示
OrderQueue(UA3111)
MarketData(UA3102)
Transaction(UA3111)
二、Level-2系统接入
SSEtoVendorConnection
VDE(VendorDataEngine)
VSS(VendorSuppliesSystem)
VDEtoVSSConnection
DailyProcedure
三、Level-2FAST数据解码
Level-2FAST的介绍
FIXAdaptedforStreaming(FAST)
为解决FIX协议传输市场数据存在冗余度高,带宽需求大的问题,芝加哥商品交易所于2003年11月17日向FPL提交了一个隐示标记(Implicittags)方案
FPL于2004年12月27日宣布成立市场数据优化工作组(MDOWG,MarketDataOptimizationWorkingGroup).
2005年5月开始MDOWG根据一系列POC的结果,开始进行协议标准制定
2006年初完成FAST(FIXAdaptedforSTreaming)V1.0
2006年12月完成FASTV1.1
Level-2FAST的介绍
中国证券市场的特点
1.2亿交易帐户
较高的换手率,上海证券交易所日交易金额峰值超过3000亿,成交笔数超过4000万
市场数据的发展趋势和挑战
产品越来越多、挂牌证券数量越来越大
更多的价格档位、更多的市场深度
更少的延时
Level-2FAST的介绍
STEP协议的优缺点
基于FIX,已成为事实上的证券数据标准
语法简单,定义灵活,易扩展
数据相对冗余
8=STEP.1.0.0<SOH>9=112<SOH>35=D<SOH>49=Sender<SOH>56=Target<SOH>34=235<SOH>1=A123456789<SOH>55=青岛啤酒<SOH>48=600600<SOH>54=B<SOH>44=8.520<SOH>38=1000<SOH>60=20030703-09:35:28<SOH>11=825<SOH>10=157<SOH>
STEP的冗余
平均每条消息长度为467字节,FAST编码后为127字节
平均每条消息长度为160字节,FAST编码后为25字节
Level-2FAST的介绍
FAST的技术优势
高压缩比(70-80%)
低资源消耗
算法简单,效率高,每秒百万级别消息的处理能力
FAST系统测试结果
带宽利用率与STEP系统对比测试结果比较
测试结果:
FAST版本
最大值为0.679Mbps;
平均值为0.162Mbps
STEP版本
最大值为2.23Mbps;
平均值为0.668Mbps
FAST版本平均值为STEP版本的24.2%
FAST关键技术
FieldEncoding
隐式标签(ImplicitTag)(模版Template)
提供消息层面的优化
操作符(Operator)
消息层面和tag层面的优化
TransferEncoding
二进制数据流
PresenceMap(PMAP)
StopBitEncodedEntities
FieldEncoding—ImplicitTag
Implicittag
将FIX的tag=value格式进行分离,变成消息模板和消息内容。
消息模板在双方通信之前就确定,实际只需要传输消息内容
FieldEncoding
常用数据类型
FieldEncoding
FieldEncodingOperator
FieldEncodingOperator
ConstantValue
用途:主要用于表示模板中的固定数据
FieldEncodingOperator
DefaultValue
用途:主要用于表示默认值
FieldEncodingOperator
CopyValue
用途:主要用于表达相邻数据相同的情况
FieldEncodingOperator
IncrementValue
用途:主要用于表示前后数据有规律的递增的情况
FieldEncoding
FieldEncoding-Template
定义和语法,包括:
Field(MessageStructure)
FieldEncodingOperator
DataType
如何表示:
XML语言
FieldEncoding-Template
XML格式的模板示例
Transfer Encoding
对FIX数据实现二进制Byte/Bit Level优化
根据模板生成数据流,并且同步进行压缩的协议
本身具有通用性,是一个与具体的应用无关的协议。
Transfer Encoding
stream ::= message* | block*
block ::= BlockSize message+
message ::= segment
segment ::= PresenceMap TemplateIdentifier? (field | segment)*
field ::= integer | string | delta | ScaledNumber | ByteVector
integer ::= UnsignedInteger | SignedInteger
string ::= ASCIIString | UnicodeString
delta ::= IntegerDelta | ScaledNumberDelta | ASCIIStringDelta | ByteVectorDelta
Transfer Encoding-Stop Bit
最高比特位
0:下一个字节属于同一个实体
1:下一个字节不属于同一个实体
编码举例:
Transfer Encoding-Presence Map
在每一条消息的开头处增加标志串(BYTE 数组)
每一个Bit标示后面的各个field存在与否,1存在,0不存在
不用传送的field不用进行编码,减少了数据量
Transfer Encoding-Presence Map
Presence Map and NULL
NULL一般用来指示这一field没有出现(absent)
Data Type Example
uInt32 Example—Optional Number
如何解析Level-2 FAST 的消息
VSS
1 Initial
2 ReadTemplates
3 Connect VDE
4 Logon
5 Receive Data
6 Decode
7 业务处理