IMIX(Inter-bank Market Information eXchange),狭义上指IMIX协议,全称是银行间市场业务数据交换协议,是一种用于在银行间市场交易活动(包括人民币、外汇和衍生品等各类产品的交易、发行、确认和清结算等)中实现金融信息实时传输的电子通信协议。IMIX协议是金融行业标准,起草单位为中国外汇交易中心。经全国金融标准化委员会审核通过,该标准于2011年6月2日由中国人民银行发布实施,标准号JR/T 0066-2011。
广义上,IMIX指银行间市场统一业务数据交换体系。该体系结合标准制修订、标准宣贯和系统实施,编制了IMIX协议、《银行间市场基础数据元》和《银行间市场数据接口》三项基础行业技术标准,完成了数据引擎、接口开发工具和开发包、开发规范、开发社区等配套应用基础设施。
2016年2月25日,基于IMIX协议标准开发的ISO20022(金融服务:金融业通用报文方案)外汇交易后确认和交易获取的报文正式注册发布。这两组报文是国际标准化组织(ISO)首次发布中国金融领域的相关报文。
IMIX协议,全称为银行间市场业务数据交换协议(Inter-bank Market Information eXchange Protocol),是一种用于在银行间市场交易活动中实现实时传输金融信息的电子通信协议。
IMIX协议基于FIX协议制定,其数据模型兼容了FIX协议,制定过程遵循稳定性和开放性的原则,并结合中国银行间市场的实际业务进行了扩展。协议标准规定了应用环境、会话机制、报文格式、报文定义、扩展方式、安全加密、数据完整性、数据字典等。
IMIX协议定义了银行间市场各类金融产品交易的交易前、中、后各环节中的数据交互,IMIX报文已覆盖了所有银行间市场产品的报价、订单、交易执行、行情数据发布和成交回报等环节。
数据类型用于定义协议传输内容的取值类型,协议中规定的数据类型包括基本数据类型(整数int、浮点数float、单字符char、字符串string、二进制数据块data)和在此基础上扩展的数据类型组成。在文本表示格式中,除“data”数据类型外,其他数据类型均以UTF-8编码形式的字符串存储和传输。
域是基本的数据元素,由“域号”、“域名”和“域值”组成。每个域都有唯一的域号和域名作为标识,域号是自然数,域名则是由英文字母组成的字符串。域具有特定的数据类型属性和取值范围属性,限定了域值的类型和有效值范围。通常一个域表达了一个基本的业务要素,比如“价格”要素由组成为“域号 44、域名Price、基本数据类型是浮点数、取值范围是所有实数”的域来表达。
在传输和存储过程中,IMIX协议允许有多种的表示格式,常见的有文本格式、XML格式、二进制格式等等。不同的表示格式下,域的表示方式也有不同。在最常见的文本表示格式中,域表示为“域号=域值”,并在域值尾以固定的域界定符分隔。这种表示格式中,域名不直接出现,域名和域号的对应定义在域字典中。同时域字典还详细定义了所有域的数据类型和取值范围。
在报文中,域的使用有三种方式:必需的,可选的,条件限制选择(即根据其他相关域的存在与否或取值来决定)。在已定义的域法满足使用需求时,协议允许使用者扩展定义新的域,即自定义域。与普通域一样,自定义域同样需遵循协议规范,如使用同样的分隔符、同样的编码等。为了保证域的唯一性,自定义域的域号不能与协议中定义的域号重复,且应大于10000。
在文本表示格式中,报文中所有的域(包含data类型数据域)都有一个分隔符来界定分隔,该分隔符就是ASCII码中的“SOH”字符(#001,hex:0x01,本文中以<SOH>表示)。除data数据类型域外,其他数据域内容都不应包含域界定符。任何报文都严格由多个“域号=值”的基本结构组成,“域号=值”基本结构用域界定符<SOH>分隔,形成的报文组成见图。
重复组是由重复次数和若干组同类数据组成的域集合。指明重复的次数的域只能出现一次,并位于重复组的开始处。重复组可以嵌套,且使用子重复组时不能省略父重复组。重复组内,同类数据域集合的第一个域是必需的,并用作判定重复内容的“分隔”用途,表明新的重复域集合的开始。示例如下。
示例中如果备选债券数量为2,则数据内容为:454=2<SOH>455=600600<SOH>456=101<SOH>455=000001<SOH>456=102<SOH>
报文由报文头、报文正文和报文尾组成。各组成部分都由一系列“域”组成。在遵循以下规则前提下,“域”可以是任意的次序:
以下是一个报文格式的例子:
8=IMIX1.0<SOH>9=xxx<SOH>35=8<SOH>49=CFETS<SOH>56=290008811000000000000<SOH>57=MHBJ.DEALER@MHBJ<SOH>34=13<SOH>52=20070913-10:20:59<SOH>11=MHBJ_ORDER_002<SOH>15=AUD<SOH>17=5.1.3293<SOH>31=0.771<SOH>32=50000<SOH>54=1<SOH>60=20061122-10:21:34<SOH>63=0<SOH>64=20061124<SOH>75=20061122<SOH>120=AUD<SOH>150=F<SOH>194=0.771<SOH>1056=38550<SOH>10176=12<SOH>10038=22<SOH>10042=MT<SOH>10317=5<SOH>10315=2<SOH>10296=20061124<SOH>1028438547.5<SOH>22=5<SOH>48=AUDUSD=CFHA<SOH>55=AUD.USD<SOH>453=2<SOH>448=119000043010000000000<SOH>452=I14<SOH>802=3<SOH>523=CCCB.DEALER@CCCB<SOH>803=101<SOH>523=CCCB<SOH>803=102<SOH>523=ChangshaCityCommercialBank<SOH>803=5<SOH>448=290008811000000000000<SOH>452=I13<SOH>802=3<SOH>523=MHBJ.DEALER@MHBJ<SOH>803=101<SOH>523=MHBJ<SOH>803=102<SOH>523=MizuhoCorporateBankBeijing<SOH>803=5<SOH>10=XXX<SOH>
对于每一条IMIX报文,它的报文结构可以分解如图所示。
报文头指明协议版本、报文类型、报文体长度、发送目的地、报文序号、发送起始点和发送时间等基础信息。
每个报文都有一个报文尾,包含3位数的校验和值并以此终止一条报文。报文头和报文尾通常用于数据传输,不直接描述业务内容。
由一系列域组成,用于描述特定业务内容。
IMIX体系中,除了《银行间市场业务数据交换协议》(IMIX协议)外,还包含另外两项行业技术标准,分别是《银行间市场基础数据元》和《银行间市场数据接口》。三项标准形成了一个基础数据标准系列。《银行间市场业务数据交换协议》、《银行间市场基础数据元》规定了业务要素定义和数据格式规范,解决了数据怎么组织的问题;《银行间市场数据接口》则规定了系统间的接口,解决了数据怎么交互的问题,是在前两项标准发布实施的基础上,调研金融机构需求及应用情况后编写而成的。这三项标准中,以IMIX协议为核心,基础数据元和数据接口标准分别提供基础定义和传输辅助定义。因此称这一系列标准为JR/T 0066系列标准。
《银行间市场基础数据元》定义了银行间市场业务术语的唯一表达,对银行间市场数据的描述、存储、传输等方面提供了统一的定义,为银行间市场系统建设提供了数据字典。具体包含以下几方面内容:
《银行间市场数据接口》标准规定了银行间市场业务(外汇交易、信用拆借、债券回购、现券买卖、票据等)数据交换和共享所使用的应用接口规范、使用方式和所使用的银行间市场数据交换报文的内容、格式及其使用方法。标准内容覆盖应用编程接口描述、数据传输压缩接口规范、数据落地接口规范、日志接口规范、配置接口规范、业务报文内容快速访问接口规范、订阅发布模式接口规范、业务数据精度标准。该标准适用于银行间市场业务活动中涉及到的业务系统数据接口及所有使用银行间市场数据交换协议的系统。具体包含以下几方面内容:
银行间市场技术标准工作组(以下简称工作组)是金标委在金融领域设立的首个专项技术标准工作组,是我国金融行业内从事银行间市场标准研究、制定及推动实施的技术组织。其职责是负责有关银行间市场的标准研究、体系规划、国际合作、标准宣贯工作。
工作组于2013年5月31日正式成立,由银行间市场中介机构和市场成员共同参与,首批成员包括中国外汇交易中心、中央国债登记结算公司、上海黄金交易所、上海清算所、工商银行、交通银行、浦发银行、上海银行、汇丰银行、道富银行、中信证券、平安保险、中国金融电子化公司等13家单位。除成员单位外,工作组邀请做市商单位参与到银行间市场标准化的具体工作中,已有中国农业银行、兴业银行、蒙特利尔银行等单位参与。工作组成立后,IMIX协议等银行间市场行业技术标准的制修订等相关工作在工作组管理框架下开展。2013年9月24日,工作组组长当选为ISO20022 FX SEG副召集人。
IMIX体系(或称“银行间市场统一业务数据交换体系”)通过结合标准制订和系统实施,旨在形成银行间市场统一的信息交换体系,以规范行业发展、促进产品创新、提高市场运营质量和监管效率。该体系建立了业务领域模型、制定了一系列基础技术标准、构建了数据交换引擎、接口开发类库和开发包等应用基础设施,最终达到了银行间市场各信息系统之间的互联互通和信息共享。
对于IMIX体系的使用者来说,接口开发类库是主要的介质之一。接口开发类库封装了IMIX协议标准和数据接口标准定义的内容,旨在帮助开发人员理解和应用行业技术标准。具体类别细分如下:
协议标准类库是一组对象/接口定义的集合,是对IMIX协议定义的报文(Message)、重复组(Group)、域(Field)等数据结构的具体实现。通过使用协议标准类库,开发人员可以以对象和接口调用的方式,封装和解析IMIX数据,替代了传统的按照数据字典编写冗长的数据接口代码的做法,便于提高开发效率、提升开发质量。通常称协议标准类库为“IMIX协议包”。协议标准类库的设计原则如下:
是为简化系统接入程序开发而制定的一组应用编程接口(API)。接口类库常被称为“IMIX基础组件”或“IMIX应用开发包”。针对不同类型的系统接入程序,接口类库可分为以下3类:
接口开发类库,加上辅助开发使用的规范文档、示例程序和工具等,形成了API开发包。其实质上是一种软件开发工具集(SDK, Software Development Kit)。IMIX体系中的API开发包一般由中国外汇交易中心负责维护,并通过中国货币网发布。
根据国际标准化组织(ISO)提出的开放式系统互联通信参考模型(Open System Interconnection Reference Model,定义于ISO/IEC 7498-1),计算机系统互连互通的标准框架可划分为7层,即OSI模型。IMIX体系本质上是针对OSI模型中上面三层(应用层、表示层和会话层)的一套解决方案。其中,JR/T 0066标准定义了三层中的语法和协议部分;JR/T 0065标准和JR/T 0078标准定义了三层中包含语义基础的元数据和开发者使用的应用编程接口(API)规范;应用基础设施则完成了三层的一种具体实现。
会话层的主要功能是对话管理,数据流同步和重新同步等。IMIX协议中对于此部分内容的定义称为IMIX会话层(或传输层)协议,即IMIXT(IMIX Transport)协议。应用基础设施中的数据交换引擎和接口类库则实现这部分定义,使用者可以通过引擎或调用类库实现基于IMIXT的通信。IMIX体系未强制要求必需使用IMIXT协议,是否使用IMIXT由互联双方商议而定。对于终端系统而言,可以使用其他实现(如商用的消息中间件等)完成会话层功能。
表示层用于数据传输过程的格式化和转换,供应用层做进一步的处理或展示。表示层的典型服务包括数据转换、编码转换、压缩和加解密等。IMIX体系中,表示层包含了IMIXTV(IMIX Tag=Value,基于UTF-8编码文本)、IMIXML(基于XML)、IMAST(基于模板压缩)和加解密(基于国密算法和CA证书)等适用于不同场景的语法和数据格式定义,并在协议类库等应用基础设施予以实现。
应用层定位于面向终端用户(可以是自然人,也可以是应用系统)的用户界面展示。IMIX体系应用层的核心内容有二:
除此之外,IMIX样式表语言(IMIX Stylesheet Language,简称ISL)等基于路径表达语法为简化解析和封装IMIX报文设计的领域语言及配套的应用基础设施也属于这一层次。
2014年1月8日,基于IMIX协议标准开始开发外汇交易后确认和交易获取两组ISO 20022报文,并向注册机构提交。2016年2月25日,两组报文正式注册并发布。这两组报文在ISO 20022报文库中的划分为外汇交易业务领域。