fix(金融信息交换协议)
////////什么是fix
/*
fix协议是国际FIX协会组织提供的一个开放式协议,目标是把各类证券金融业务需求流程格式化,使之成为一个个可用计算机语言描述的功能流程,并在每个业务功能接口上统一交换格式,方便各个功能模块的连接。
*/
////////通信模型
/*
Initial: 发起者,建立通信链路,通过发送初始Logon消息发起会话的参与方。
Accept:接收方,FIx会话的接收方。负责执行第一层次的认证和通过传输Logon消息的确认正式声明连接请求被接受。
原则: 先发起者为Initiator,接受者为Acceptor。
标准模式以网关为Acceptor,客户端为Initiator做为常用模式。
*/
////////fix connection
/*
fix连接 由三部分组成:Logon登录, message exchange消息传输,logout注销。
fix session: FIX会话由一个或多个Fix Connection Fix 连接组成。 一个Fix会话可以有多次登录。
*/
////////协议特点
/**
1.序列号,用于标识FIX消息。
每一个FIX会话开始时被初始化为1,并在整个会话期间递增。
监控序列号可以使会话参与者识别和处理丢失的消息,当在一个FIX会话中重新连接时能够快速进行应用程序同步。
每个会话将建立一组互不依赖的接受和发送序列。
会话参与者将维护一个赋予发送消息的序列和一个监控接受消息的消息块间隙序列号。
2.心跳,消息交互期间周期性的Heartbeat消息可以监控通信链路状态及识别接收序列号间隙。
发送Heartbeat的周期间隔由会话发起者使用在Logon消息中HeartBtInt域进行定义。
Heartbeat心跳消息的时间间隔应当在每一个消息发送后复位,即发送一个消息后,在间隔给定的时间内无其它消息发送则发送一个Heartbeat心跳消息。
HeartBtInt的值应当被会话双方认同,由会话发起方定义并由会话接收者通过Logon消息进行确认。
同一个HeartBtInt被会话双方——登录的发起者和登录的接受者共同使用
3.数据完整校验。
消息数据内容的完整性可以参用两种方式来验证:消息长度和校验码检查。
程序通过计算BodyLength域到CheckSum标记(“10=”)分界符的字符数,域BodyLength标示的消息长度进行比较来完成完整性校验。
CheckSum完整性检查,通过计算从域“8=”中“8”开始,包括紧跟在CheckSum标记域的分界符每个字符的2进制和同CheckSum进行比较得到。
一个FIX消息校验和通过计算到CheckSum域(但不包括)的消息的每个字节和得到。
4.消息格式。
数据类型:int,float,char,boolean,string,data.
域:
常见域;
域语法:
开头部分是消息头,随后是正文,最后是消息尾;
消息头的前3个域的次序不能改变:起始串(Tag=8)、消息体长度(Tag=9),消息类型(Tag =35);
消息尾的最后一个域应是校验和域(Tag=10);
重复组中,域出现的顺序应遵循该重复组在消息或组件中定义时的次序;
在一条消息中,除重复组域外任何其他域不能重复出现。
5.消息。
消息头:每一个会话或应用消息有一个消息头,该消息头指明消息类型、消息体长度、发送目的地、消息序号、发送起始点和发送时间。
消息尾:每一个消息(会话或应用消息)有一个消息尾,并以此终止。消息尾可用于分隔多个消息,包含有 3 位数的校验和值。
**/
////数据完整性校验////
样例:8=FIX.4.29=7335=A34=149=CLIENT52=20181119-10:42:48.76856=SERVER98=0108=30141=Y10=208
1、消息长度:9=7335=A34=149=CLIENT52=20181119-10:42:48.76856=SERVER98=0108=30141=Y(这段长度,9=,然后到10=结束)
2、校验码检查
char *GenerateCheckSum( char *buf, long bufLen ) {
static char tmpBuf[ 4 ]; long idx;
unsigned int cks;
for( idx = 0L, cks = 0; idx < bufLen; cks += (unsigned int)buf[ idx++ ] ); sprintf( tmpBuf, “%03d”, (unsigned int)( cks % 256 ) );
return( tmpBuf );
}
Logon登录
Logout注销
更多信息请戳