java quickfix_QuickFix Java 讲解(一)概述、下载方法,和协议内容

本系列力求手把手教你怎样利用 QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。

所有源码的地址(免费):

1. 什么是FIX,QuickFix,Quick Java?

1.1. 什么是FIX

官网以及其他翻译自官网的帖子都太官方了,这里我们设想一个情景:

你是一个交易员,现在客户打电话来让你下个单买点股票。你啪啪啪的在你的机器上熟练地输入了下单指令。系统显示:成交。

——有那么简单么?没有。

其中一个问题是:你下达的交易指令如何传到交易系统?

即便你没有专业的金融知识,你也知道,想要准确的下单,一条指令里面至少包含如下要素:下单编号:Order ID

买卖对象(你要买卖什么):Symbol

方向(买还是卖):Side

价格:Price

数量:Quantity

好了,那么我们假定用“”表示分隔符,把如上信息串起来,就可以得到:

OrdID=123Symbol=000123Side=1Price=88.8Qty=5000

好了么?好了。没问题了么?有问题:太长了。

如此长的信息会在网络传输中有各种各样的问题 ,在争分夺秒的交易市场,很可能会错过良机。

那咋办呢?

一般交易员和交易系统都是自家产品,那我们可以发明一种“暗号”,比如我说1,就代表下单编号;说2就代表买卖对象,等等。那如上指令就会变成:

1=1232=0001233=14=88.85=5000

长度减少了35%,这是肉眼可见的巨大提升。

那如果不都是自家产品呢?

——简单,发明一套全世界都统一的标准就可以了。这,就是FIX协议(Financial Information eXchange Protocol)。

1.2. 什么是QuickFIX和QuickFIX/J

有了这套协议,大家开始争先恐后的开发。消息生成的底层逻辑、网络传输的实现方法、断线重连的机制、消息解析的具体步骤……等等等等。每家都不太一样,可因为协议都是一样的,每家的实现方法又都差不多。

那为什么不维护一个简单便捷的版本呢?这样大家只要注意“上层建筑”就好了。

QuickFix 应运而生,它是一个基于 FIX消息的引擎(Message Engine)。用户只要通过简单的配置就可以实现FIX 消息的收法,不用去在意底层的实现,用就对了。

当然,除此之外,还有其他一些优秀的FIX 消息引擎,本作不做讨论。

谈到使用,QuickFix,势必就要知道它支持哪些语言。QuickFIX/J 就是一个由Java实现的,完全开源的信息引擎。

1.3. QuickFIX/J长什么样

因为QuickFIX/J完全开源,所以大家可以通过它的主页转入到各种所需的页面,比如:

下载源码之后,打开,可以看到很多文件夹。其中quickfixj-examples里面是一些我们可以运行的本地案例,而quickfixj-messages 就包含这一系列的协议和内容。FIX后面的内容代表协议的版本,不同的版本略有区别,一定要保证你和你的上下游用的是同一版本的协议!

本作以FIX4.4协议为例。

打开quickfixj-messages\quickfixj-messages-fix44\src\main\resources,里面有两个xml文件,就是协议本身。其中FIX44.modified.xml 可以作为你在工作中使用的密码范本。

打开FIX44.modified.xml,搜索NewOrderSingle,可以看到一个message 的标签组:

message表示一类消息。在message 一栏里:name 表示这个message 的名字,这里的的NewOrderSingle就是常用的用户新下单消息。

msgtype 表示消息类别,就是我们的“密码”,当我说“msgtype=D”的时候,就代表这是个“NewOrderSingle”。

msgcat 表示消息分类,“app”表示收发端是Application,这个暂时不讲,放到以后的章节。

一个消息,肯定要有内容,内容就是这里面的“field”(字段):“name”代表这个字段的名字。

“required”表示这个字段是否必须。如果必须,但是消息里没有,就会被接收方拒收。

“group”表示重复组,暂时不讨论,放到下次讲。

下一篇,我们讲如何在本地使用QuickFIX/J,并在本地搭建消息收发方。

你可能感兴趣的:(java,quickfix)