上海期货交易所交易系统接口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海期货交易所交易系统接口(客户端)说明
一、概述
除了交易行情是通过UDP端口实时广播外,PC端与交易主机/交易前置机的信息交换以TCP 协议实现。交易系统接收并维护来自各PC端的TCP连接,通过各连接链路接收每个PC端的登录、下撤单命令以及各类查询命令,同时交易系统将命令的应答发给相应的PC端。TCP 连接端口号分别是7150,7151,7152,7153。通讯的最小单元称为包,每个包大小限制在83字节与4096字节之间。通信包结构:
包头(55字节)+ 命令字和处理状态(28字节)+ 正文信息/回送信息(0/4013字节)
1.1数据包头结构
PC端发送的命令、交易系统返回的处理结果都包含一个开始的数据包头,大小固定为55个字节。里面包括交易系统用户名以及后续数据的长短。
struct {
char head; //开始标志,固定为0x01
char sadd[16]; //PC端填0x20,交易系统返回信息时填PC登录用户名
char suse[6]; //发送端用户名的前6个字节,可不用
char radd[16]; //PC端发送时填本地用户名
char ruse[6]; //可不用
char start; //信息开始符
char vary[2]; //命令类型,二进制
char stat; //信息状态… …/‟1‟:第一次发送,其他:非第一次
char line; //信息行号‘0’结束,‘1’有后续行
char leng[5]; //信息正文长度+ 28
char comm[8]; //命令字
char echo[20]; //处理状态
};
▪head:开始标志,必须为二进制0x01。
▪sadd:客户端发送时添ASCII空格‟ …。交易系统回送以二进制0结尾的客户端用户名(Null Terminated)。
▪suse:客户端发送时添ASCII空格‟ …。可不用。
▪radd:客户端发送时添以二进制0结尾的用户名(Null Terminated)。
▪ruse:客户端用户名的前6位。可不用。
▪start:二进制0x02。
▪vary:命令字类型,和命令字一起标示命令。根据命令不同,填充不同的二进制值。交易系统处理之后,返回的vary[0]加0x01,vary[1]不变。
▪stat:信息状态1。表示是否是本命令/处理回送结果的第一个数据包。ASCII值… …/‟1‟代表第一个数据包;其他数值代表后续包。对于PC机或其他客户端,请求的一条命令不会超过4013个字节,因此总是填… …/‟1‟。对于交易系统的处理结果,如查询客户,结果可能超过一个包的最大长度,必须分成不同的连续包进行传送。
▪line:信息状态2。表示是否是本命令/处理回送结果的最后一个数据包,主要在客户端查询命令的回送信息中使用。ASCII字符‟1‟代表是处理结果的非结束数据包,后面还有
数据包(可能是数据项为零的line字段为‟0‟的结束包)。ASCII字符‟0‟代表是处理结果的最后一个数据包。
▪leng:数据包除包头的长度,也就是“正文信息/回送信息”长度+28字节。
▪comm:命令字。命令由左对齐的ASCII码字符组成,不足8位后面补足ASCII空格。
服务器返回结果时使用‟OK ‟代表处理成功,‟ERROR …代表处理失败,在echo 字段给出失败原因。对于交易系统状态改变,如开盘、暂停、收盘等或告警命令,则有不同的命令字,不同于OK/ERROR。
▪echo:客户端发送时填入28个字节的ASCII空格‟ …,交易系统回送信息时为处理状态。
二、交易系统与客户端接口
以下为接口的各条命令,客户端向交易系统发送请求命令,系统处理后返回处理结果及相应的数据结构。每条命令对应的命令类型(vary)在标题栏的括号内以16进制方式表示。客户端程序必须认识到只有在命令字中返回”OK “时,命令表述的应答结构中的内容才有效,否则,要么不返回应答结构,要么结构中的内容不确定。
2.1 用户登录命令(0x0401)
客户端用户必须向交易系统登录后才能够进行其他后续处理。
命令字:login。命令结构:
struct {
unsigned char userid[15]; //交易员,字符型
unsigned char passwd[40]; //口令,字符型
};
若该交易员已经登录且其登录的IP地址与现在的IP地址不一致,则此次登录失败。若地址相同,可以进行其他合法性检查。口令检查通过后,将该交易员在此前所用的最大本地编号返回,该编号每个交易日从0开始往上增长。前置机、交易系统主机连接返回的结构有些不一致。必须想办法解决。
应答命令(0x0501),应答结构(交易系统):
struct {
unsigned char userid[15]; //交易员
unsigned char passwd[40]; //口令
unsigned char usernm[8]; //交易员姓名
unsigned char localno0[8]; //交易员用最大报单本地编号
unsigned char time[8]; //交易系统时间,格式为hhmmssuu
unsigned char sysstat[8]; //交易系统状态,1:系统初始化
// 21:系统开市
// 22:系统开盘
// 25:系统收盘,生成收盘价
// 26:系统收市,生成结算价
// 255:系统暂停
// 512;系统结算
unsigned char membid[8]; //所属会员
unsigned char section[2]; //当前交易节代码
unsigned char sstatus; //交易节状态,请参阅交易节状态变换图};
应答结构(前置机系统):
struct {