本系列力求手把手教你怎样利用 QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。
所有源码的地址(免费):
https://github.com/zongzhec/QuickFixPractise
本节我们主要讨论如何在配置QuickFIX的收发方。
上一节我们说过,FIX是一种协议,或者说一种“暗号”。想体验这种“暗号”的作用,咱们至少得要准备通信的双方:一个发送消息,一个接受并处理消息。
通常来说,发送方我们称为 Initiator,接收方称为 Acceptor。当然了,你也可以这么称呼:发送方为客户端(Client),接收方为服务器端(Server)。
看到这里,你可能会问:通信是双向的,为什么会有“发送”和“接收”这一说?
——这里我们的立足点是新建的订单。一个订单在交易员那里生成了,则会由交易机器发送给中央系统进行交易。一个中央系统会对应很多的交易机器。
因此,我们要新建两个项目,一个模拟发送方(客户端),一个模拟接收方(服务器端)。
简单起见,我们只依赖于quickfix,暂时不引入其他依赖。
dependencies {
compile group: 'org.quickfixj', name: 'quickfixj-all', version: '2.2.0'
}
配置文件,简化来讲,有两个:一个是程序调用的properties,另一个是传输时候的字典,相当于“密码本”。
两个文件都放在src/main/resources下面即可。
先看一下文件内容:
#quickfix-server.properties
[default]
# 这些字段接的改成你的设置
FileStorePath=fileStore
SocketConnectHost=XXX.XXX.XXX.XXX
SocketConnectPort=XXXXX
TargetCompID=QUICKFIX_ACCEPTOR
# 以下字段可以不改
ConnectionType=initiator
HeartBtInt=30
ReconnectInterval=10
FileLogPath=log
UseDataDictionary=N
DataDictionary=src/main/resources/FIX44.modified.xml
ContinueInitializationOnError=Y
BeginString=FIX.4.4
StartTime=00:00:00
EndTime=23:00:00
ResetOnLogon=Y
ResetSeqNumFlag=Y
MaxMessagesInResendRequest=1
[session]
SenderCompID=QUICKFIX_INITIATOR1
[session]
SenderCompID=QUICKFIX_INITIATOR2
首先能看到,配置被分为3大类:开头的[default],然后是两个[session]。
session的意思是,你作为发送方时,不一定发给一个人。或者你作为接收方时,不一定只接收一个人的信息。每个session下面配了不同的SenderCompID,意思就是可能会有很多Sender给我发消息,因此我要根据不同的SenderComID来区别不同的发送方。这个名字可以随便起,只要保证收发双方一致。
其他公用的部分可以放在[default]里面,其中:
在实际业务中,我们会对字典进行一定修改,比如让某些字段从“必须有”到“可以有”,增减某些消息里面的某些字段,甚至定义自己的新消息。在这个时候,我们就可以在原有FIX44.xml的基础上维护我们自己的“密码本”,取个名字:FIX44.modified.xml。
你可以点击这里查看本教程的FIX44.modified.xml:https://github.com/zongzhec/QuickFixPractise/blob/master/FixAcceptor/src/main/resources/FIX44.modified.xml
在这里我们能看到如下架构(以MarketDataRequestReject为例):
每一个消息都在message的标签内:
下一节我们讲怎么搭建Initiator端。