轉自: http://blog.csdn.net/songzhang/article/details/1778118
1. 什麼是FIX Financial Information eXchange(FIX)金融資訊交換協定的制定是由多個緻力于提升其互相間交易流程效率的金融機構和經紀商于1992年共同發起。這些企業把他們及他們的行業視為一個整體,認為能夠從對交易訓示,交易指令及交易執行的高效電子資料交換的驅動中獲利。FIX由此誕生,一個不受單一實體控制的開放消息标準,一個能夠被調整組建适用于任何一個企業的商務需求的協定。 FPL(FIX Protocol Limited)認為FIX的優勢在于:
- 就商務流程而言,FIX為機構,中間商,以及其他市場參與者提供了一個減少不必要的電話溝通和瑣碎的文檔傳遞方法,為面向特定個體傳遞高品質的資訊提供便利。
- FIX為于技術專家提供了一個開放的标準,對他們開發的努力和實踐産生了影響,使他們能高效地建立同一個更大範圍的參與者之間的聯系。
- FIX可以為賣主提供一條現成的通往行業的資訊存取路徑,減少了市場營銷的難度,增加了潛在的客戶群。
開放性已成為FIX成功的關鍵。出于開放的原因,當在鼓勵各方參與标準制定時,FIX保留了參與者需求的不确定性。同時FIX避免“過标準化over-standardization”。它不受限于一個簡單類型的載體,及一個簡單的安全協定。它把決定權交給使用它的多個企業。FPL希望這種鼓勵在非标準化領域的努力能夠促進技術的完善。 FIX現已被許多企業和銷售商使用。它已經成為行業内的推薦的消息協定。FIX已經從最初的買方-到-賣方的證券交易中得到發展。現在被廣泛的用于交易市場,及其它市場參與者。除了證券交易,FIX現在支援4種産品:Collective Investment Vehicles (CIVs)內建投資工具(?), Derivatives金融衍生産品,Fixed Income(?),Foreign Exchange外彙交易(?)。 FIX協定是一個消息标準,促進與安全交易相關的資訊交換,在希望進行自動通信的交易對手間進行使用。該消息協定将支援各種商務功能。 FIX最早用于支援美國國内的委托人間基于直接資訊流轉的證券交易。随着協定本身的發展,增加了大量的支援多邊界交易的、衍生工具及其它産品的資料域。同樣,該協定被擴充允許第三方參與于交易對手間的資訊傳遞。随着FIX後續版本的釋出,期待它的功能将繼續得到發展。
FIX協定包含2個層次:會話層和應用層。會話層與資料的通信相關;而應用層定義了商務相關資料内容。
2006年10月,FPL釋出了FIX5.0。FIX5.0引入TI(the transport independence )傳輸無關架構。TI将FIX會話層從應用層協定中分離出來。在TI架構下,應用層協定消息可以通過任意合适的傳輸技術進行傳送,在這裡,FIX會話層協定是FIX應用層消息的可選傳輸傳輸協定之一。兩個協定層的版本标注将會有所不同,FIX X.Y為FIX應用層協定版本;FIXT X.Y 為FIX會話層協定版本編号。
2. FIX5.0新增特性概述
2.1.TI——the transport independence

上圖描述了在TI架構下傳輸機制的變化。它能夠用于承載所有FIX應用層協定的消息。 2.2.Application Versioning 2.3.Service Pack Mangement 2.4.Extension Pack Mangement Flexibility Provided by FIX 5.0 FIX 5.0 提供的靈活性 3. FIX協定文法概述 目前,FIX協定存在2種文法格式。 1 “标記=值”文法格式 2 “FIXML文法”文法格式 同一個商業資訊流适用于任何一種文法。 3.1.普通FIX文法規則(Common FIX Syntax Rules) 普通FIX文法規則,是對“标記=值”和“FIXML”2種文法都适用的一般規則。 3.1.1 Data Type
- int:整型 沒有小數點,逗号,可以包含正負号的數字序列。注,int的值前面可以包含0。(如 “00023” = “23”).
Examples: 723 in field 21 would be mapped int as | 21=723|. -723 in field 12 would be mapped int as | 12=-723|
- float: 浮點數。可包含小數點和正負号的數字序。累計總長度為15個數字。前面可以有0,小數末尾可加零,或截尾
- String: 字元串。是大小寫敏感的。
- char: 字元。除分界符号SOH外的字元。大小寫敏感。.
- data: 原始資料。 沒有格式和内容限制。之前緊接有一個長度域。長度域應制定data資料域包含的位元組數(不好含分界符所占位元組)。資料中可能包含分界符位元組,是以需要用data類型資料長度來輔助差別。
3.1.2 Pattern Data Type 結構資料 結構化資料用于建立和提供資料域的有效值是否基于FIX資料類型或其它結構資料類型一些限制 3.1.3 Required Fields 必選資料域 協定每個消息由必選、可選和條件必選(根據其他域的不同)資料域構成。系統應當設計成可支援隻提供必選和條件必選資料域的相關操作。 3.1.4 FIX “Tag=Value” SYNTAX “标記=值”文法 3.1.4.1 Message Format消息格式 FIX消息的一般格式為:一個标準頭+消息體+一個标準的尾部 每個消息由一個包含多個 ,由分界符隔開的,“标記=值”資料域的流構成。标記為TagNum資料類型。所有的标記都有一個特定的值。可選域可以不出現。無值消息将會産生一個Reject消息。 1. FIX消息的一般格式為:一個标準頭+消息體+一個标準的尾部 2. 消息頭的前三個域為 BeginString(tag #8)+BodyLenth(tag#9)+MsgType(tag#35) 3. 标準消息尾的最後一個域為CheckSum(tag#10) 4. 在重複資料組内的資料域必須按照FIX規範文檔中規定的順序明确定義。Noxxx域,xxx表示循環組的計數,必須放置在循環組資料内容的的前面。 5. 一個特定的tag 數應當是唯一的。如果重複,将被認為是一個違反規範文檔的錯誤。錯誤應當向FIX Global Technical Committee報告 此外,某些資料類型為Multiple CharValue的資料域,可以包含多個由空格隔開,由一個SOH技術的多個部分。 在同一個消息裡,包含明文部分和密文部分的資料的資料域也是可能的。通常用于驗證和認證。比如 3.1.4.2 3.1.4.2 Field Delimiter: 域分界符 資料域分界符,在FIX一個消息内的所有資料域由一個分界字元标記結尾。用ASCII碼的“SOH”(#001,hex:0x01)進行間隔。所有消息由“8=FIX.x.y<SOH>”标記開始,最後由“10=nnn<SOH>“标記結束。 3.1.4.3 Repeating Groups:循環組 允許在一個循環組裡出現重複的資料域。372=x<SOH>為循環組的第一個域 · 如果使用循環組,循環組的第一個域是必選項,作為新循環組的一個分界。該第一域緊跟在NoXXX後面,然後,當NoXXX值大于0時,變成當條件必選。 · NoXXX域(比如,NoTradingSessions,NoAllocs)定義了循環組執行個體的數量,對一個循環組隻出現一次,且必須在循環組内容之前。 · 如果在一個循環組中的一個域是必選的,則NoXXX是必選的。如果所有循環組中的成員是可選的,則NoXXX域也應該是可選的。 · 如果一個循環組域被列為必選,則它必須出現在該循環組的每一個執行個體中。 · 循環組在消息中被設計成通過縮排,和 à符号進行定義。一些循環組可以在其他循環組中級聯出現。可大于一層的級聯。 Example of nested repeating group
Portion of New Order - List message showing a nested repeating group for allocations for each order. Note the NoAllocs repeating group is nested within the NoOrders repeating group and as such each instance of the orders repeating group may contain a repeating group of allocations. | |||||
73 | NoOrders | Y | Number of orders in this message (number of repeating groups to follow) | ||
-〉 | 11 | ClOrdID | Y | Must be the first field in the repeating group. | |
-〉 | 526 | SecondaryClOrdID | N | ||
-〉 | 67 | ListSeqNo | Y | Order number within the list | |
-〉 | 583 | ClOrdLinkID | N | ||
-〉 | 160 | SettlInstMode | N | ||
-〉 | component block <Parties> | N | Insert here the set of "Parties" (firm identification) fields defined in "COMMON COMPONENTS OF APPLICATION MESSAGES" | ||
-〉 | 229 | TradeOriginationDate | N | ||
-〉 | 1 | Account | N | ||
-〉 | 581 | AccountType | N | ||
-〉 | 589 | DayBookingInst | N | ||
-〉 | 590 | BookingUnit | N | ||
-〉 | 591 | PreallocMethod | N | ||
-〉 | 78 | NoAllocs | N | Indicates number of pre-trade allocation accounts to follow | |
-〉 | -〉 | 79 | AllocAccount | N | Required if NoAllocs > 0. Must be the first field in the repeating group. |
-〉 | -〉 | 467 | IndividualAllocID | N | |
-〉 | -〉 | component block <NestedParties> | N | Insert here the set of "Nested Parties" (firm identification "nested" within additional repeating group) fields defined in "COMMON COMPONENTS OF APPLICATION MESSAGES" | |
-〉 | -〉 | 80 | AllocQty | N | |
-〉 | 63 | SettlmntTyp | N | ||
-〉 | 64 | FutSettDate | N | Takes precedence over SettlmntTyp value and conditionally required/omitted for specific SettlmntTyp values. | |
Rest of the message not shown |
3.1.4.4 User Defined Fields: 使用者自定義域 為給使用者提供最大的靈活性,FIX協定允許使用者自定義域。 這些域在認同的參與者之間實作、應用,并且應注意避免沖突。 Tag數在5000 到9999保留用于使用者自定義域。這些tag值用于企業聯盟的資訊交換。可以通過FIX網站進行注冊。 10000以上保留用于單一企業内部使用。不用注冊。 3.1.4.5 Precautions when using UNICODE 使用UNICODE的注意事項 如果使用 UNICODE 編碼,則 SOH 可能出現在編碼内容中。是以一個 FIX 引擎必須使用 EncodedLen 值去摘取正确長度的位元組資料。