java quickfix_QuickFix Java 讲解(一)概述、下载方法,和协议内容
本系列力求手把手教你怎樣利用 QuickFix Java 搭建自己的 FIX 協(xié)議收法平臺(tái),以及其中的注意事項(xiàng)。
所有源碼的地址(免費(fèi)):
1. 什么是FIX,QuickFix,Quick Java?
1.1. 什么是FIX
官網(wǎng)以及其他翻譯自官網(wǎng)的帖子都太官方了,這里我們?cè)O(shè)想一個(gè)情景:
你是一個(gè)交易員,現(xiàn)在客戶打電話來(lái)讓你下個(gè)單買點(diǎn)股票。你啪啪啪的在你的機(jī)器上熟練地輸入了下單指令。系統(tǒng)顯示:成交。
——有那么簡(jiǎn)單么?沒有。
其中一個(gè)問題是:你下達(dá)的交易指令如何傳到交易系統(tǒng)?
即便你沒有專業(yè)的金融知識(shí),你也知道,想要準(zhǔn)確的下單,一條指令里面至少包含如下要素:下單編號(hào):Order ID
買賣對(duì)象(你要買賣什么):Symbol
方向(買還是賣):Side
價(jià)格:Price
數(shù)量:Quantity
好了,那么我們假定用“”表示分隔符,把如上信息串起來(lái),就可以得到:
OrdID=123Symbol=000123Side=1Price=88.8Qty=5000
好了么?好了。沒問題了么?有問題:太長(zhǎng)了。
如此長(zhǎng)的信息會(huì)在網(wǎng)絡(luò)傳輸中有各種各樣的問題 ,在爭(zhēng)分奪秒的交易市場(chǎng),很可能會(huì)錯(cuò)過良機(jī)。
那咋辦呢?
一般交易員和交易系統(tǒng)都是自家產(chǎn)品,那我們可以發(fā)明一種“暗號(hào)”,比如我說1,就代表下單編號(hào);說2就代表買賣對(duì)象,等等。那如上指令就會(huì)變成:
1=1232=0001233=14=88.85=5000
長(zhǎng)度減少了35%,這是肉眼可見的巨大提升。
那如果不都是自家產(chǎn)品呢?
——簡(jiǎn)單,發(fā)明一套全世界都統(tǒng)一的標(biāo)準(zhǔn)就可以了。這,就是FIX協(xié)議(Financial Information eXchange Protocol)。
1.2. 什么是QuickFIX和QuickFIX/J
有了這套協(xié)議,大家開始爭(zhēng)先恐后的開發(fā)。消息生成的底層邏輯、網(wǎng)絡(luò)傳輸?shù)膶?shí)現(xiàn)方法、斷線重連的機(jī)制、消息解析的具體步驟……等等等等。每家都不太一樣,可因?yàn)閰f(xié)議都是一樣的,每家的實(shí)現(xiàn)方法又都差不多。
那為什么不維護(hù)一個(gè)簡(jiǎn)單便捷的版本呢?這樣大家只要注意“上層建筑”就好了。
QuickFix 應(yīng)運(yùn)而生,它是一個(gè)基于 FIX消息的引擎(Message Engine)。用戶只要通過簡(jiǎn)單的配置就可以實(shí)現(xiàn)FIX 消息的收法,不用去在意底層的實(shí)現(xiàn),用就對(duì)了。
當(dāng)然,除此之外,還有其他一些優(yōu)秀的FIX 消息引擎,本作不做討論。
談到使用,QuickFix,勢(shì)必就要知道它支持哪些語(yǔ)言。QuickFIX/J 就是一個(gè)由Java實(shí)現(xiàn)的,完全開源的信息引擎。
1.3. QuickFIX/J長(zhǎng)什么樣
因?yàn)镼uickFIX/J完全開源,所以大家可以通過它的主頁(yè)轉(zhuǎn)入到各種所需的頁(yè)面,比如:
下載源碼之后,打開,可以看到很多文件夾。其中quickfixj-examples里面是一些我們可以運(yùn)行的本地案例,而quickfixj-messages 就包含這一系列的協(xié)議和內(nèi)容。FIX后面的內(nèi)容代表協(xié)議的版本,不同的版本略有區(qū)別,一定要保證你和你的上下游用的是同一版本的協(xié)議!
本作以FIX4.4協(xié)議為例。
?
打開quickfixj-messages\quickfixj-messages-fix44\src\main\resources,里面有兩個(gè)xml文件,就是協(xié)議本身。其中FIX44.modified.xml 可以作為你在工作中使用的密碼范本。
打開FIX44.modified.xml,搜索NewOrderSingle,可以看到一個(gè)message 的標(biāo)簽組:
?
message表示一類消息。在message 一欄里:name 表示這個(gè)message 的名字,這里的的NewOrderSingle就是常用的用戶新下單消息。
msgtype 表示消息類別,就是我們的“密碼”,當(dāng)我說“msgtype=D”的時(shí)候,就代表這是個(gè)“NewOrderSingle”。
msgcat 表示消息分類,“app”表示收發(fā)端是Application,這個(gè)暫時(shí)不講,放到以后的章節(jié)。
一個(gè)消息,肯定要有內(nèi)容,內(nèi)容就是這里面的“field”(字段):“name”代表這個(gè)字段的名字。
“required”表示這個(gè)字段是否必須。如果必須,但是消息里沒有,就會(huì)被接收方拒收。
“group”表示重復(fù)組,暫時(shí)不討論,放到下次講。
下一篇,我們講如何在本地使用QuickFIX/J,并在本地搭建消息收發(fā)方。
總結(jié)
以上是生活随笔為你收集整理的java quickfix_QuickFix Java 讲解(一)概述、下载方法,和协议内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用计算机cmd算数,计算命令:怎么在
- 下一篇: yolov5s 预训练模型_GitHub