FIX PROTOCOL AND QUICKFIX ENGINE
Bài đăng này đã không được cập nhật trong 3 năm
1. FIX Protocol
FIX (Financial Information eXchange) là tập hợp các quy tắc, kỹ thuật cho việc truyền và nhận thông tin tài chính, thương mại dưới dạng gói tin.
Các tổ chức sử dụng: Ngân hàng, Công ty FX, Brocker và ECNs.
2. FIX Message format
Cấu trúc gói tin FIX bao gồm 3 phần: Header, Body, Trailer
FIX message được biểu diễn dưới hai dạng:
Dạng 1: Tag=Value (55=XAUUSD).
Mỗi cặp tag=value được phân cách nhau bởi chỗi ký tự SOH theo mã ASCII, hay 0×01 theo số Hexa.
Ví dụ: dưới đây là gói tin đặt lệnh mua New Order Single.
8=FIX.4.4<SOH>9=153<SOH>35=D<SOH>49=Sender1<SOH>56=Receiver1<SOH>34=1<SOH>50=30737<SOH>97=Y<SOH> 52=20000809-20:20:50<SOH>11=90001008<SOH>1=10030003<SOH>21=2<SOH>55=USDJPY<SOH>54=1<SOH>38=4000<SOH> 40=2<SOH>59=0<SOH>44=30<SOH>47=I<SOH>60=20000809-18:20:32<SOH>10=061<SOH>
Dạng 2: FIXXML
Chi tiết cấu trúc gói tin FIX với định dạng Tag=value như sau:
Header
-
Phần header luôn bắt đầu bằng thẻ 8. Thẻ 8 quy định FIX version sử dụng.
-
Các thẻ bắt buộc khác:
-
Tag 9=(Độ dài Body gói tin)
-
Tag 35=(Loại gói tin): A-Logon; 5-Logout; 0-Heatbeat; D-Order; 8-Execution Report,…
-
Tag 49=(ID phía gửi)
-
Tag 56=(ID phía nhận)
-
Tag 34=(Số thứ tự gói tin)
- Một số thẻ không bắt buộc:
-
Tag 52=(Thời gian gửi tin)
-
Tag 50=(Sub ID phía gửi)
-
Tag 57=(Sub ID phía nhận)
Trailer
-
Phần trailer luôn kết thúc bằng thẻ 10 và chuỗi <SOH>.
-
Một số thẻ không bắt buộc:
-
Tag 89=(Chữ ký)
-
Tag 93=(Độ dài chữ ký)
Body
Phần body gói tin thay đổi theo từng loại gói tin.
Cụ thể một số gói tin như sau:
1. Gói tin Administrator
*** 1.1 Logon***
- Phần header có thẻ 35=A
Các thẻ bắt buộc phần body:
-
Tag 98=(0 – Không mã hóa; 1 – Mã hóa)
-
Tag 108=(Thời gian định kỳ gửi gói Heatbeat)
Các thẻ không bắt buộc:
-
Tag 553=(Username)
-
Tag 554=(Password)
*** 1.2 Logout***
- Phần header có thẻ 35=5
Thẻ không bắt buộc:
- Tag 58=(Text)
- Heatbeat
- Phần header có thẻ 35=0
Các thẻ bắt không buộc:
- Tag 112=(ID của gói tin Test request nếu nhận được trước đó)
*** 1.3 Reject***
- Phần header có thẻ 35=3
Thẻ bắt buộc:
- Tag 45=(Số thứ tự của gói tin bị reject)
Thẻ không bắt buộc:
-
Tag 58=(Text)
-
Tag 373=(Mã lý do reject)
** 2. Gói tin Application**
*** 2.1 New Order Single***
- Phần header có thẻ 35=D
Thẻ bắt buộc:
-
Tag 11=(ID của gói tin)
-
Tag 54=(1 = lệnh mua; 2 = lệnh bán)
-
Tag 60=(Thời gian gửi gói tin)
-
Tag 40=(1 = lệnh Market; 2 = Limit; 3 = Stop;…)
-
Tag 55=(Tên cặp tiền tệ)
-
Tag 38=(Khối lượng đặt lệnh)
Thẻ không bắt buộc:
-
Tag 44=(Giá đăt lệnh)
-
Tag 117=(ID của rate đặt lệnh)
-
Tag 1=(Số tài khoản)
*** 2.2 Execution Report***
- Phần header có thẻ 35=8
Các thẻ bắt buộc:
-
Tag 37=(ID của gói tin New Order Single)
-
Tag 17=(ID của gói tin report)
-
Tag 150=(Loại báo cáo)
-
Tag 39=(Trạng thái khớp lệnh. 1=Mới nhận, 2=Đã khớp lệnh, 8=không khớp lệnh)
-
Tag 55=(Tên cặp tiền tệ)
-
Tag 54=(Loại lệnh. 1=mua, 2=bán)
-
Tag 14=(Khối lượng khớp)
-
Tag 6=(Giá khớp trung bình)
-
Tag 13=(Giá khớp cuối)
*** 2.3 Order Status Request***
- Phần header có thẻ 35=H
Các thẻ bắt buộc:
-
Tag 11=(ID của gói tin cần truy vấn trạng thái)
-
Tag 55=(Mã cặp tiền tệ)
-
Tag 54=(Loại lệnh. 1=mua, 2=bán)
Thẻ không bắt buộc:
- Tag 1=(Tài khoản)
3. Quickfix Engine
Là một engin mã nguồn mở sử dụng giao thức FIX để gửi, nhận gói tin FIX. Quickfix hỗ trợ tất cả các phiên bản FIX từ 4.0 – 5.0.
Các lớp cơ bản của Quickfix.
-
FIX::Acceptor. Là lớp start engin phía server.
-
FIX::Initiator. Lớp start engin phía client.
-
FIX::Application. Lớp ứng dụng chính thực hiện các tác vụ: đăng nhập, đăng xuất (các gói tin Admin), gửi, nhận gói tin Application (Quote request, New Order, Quote, Execution report,…).
-
FIX::SessionSettings. Lớp đọc, xử lý các thiết lập giao thức FIX từ file .xml.
Ba lớp sau thực hiện việc log của engin.
-
FIX::LogFactory
-
FIX::MessageStoreFacroty
-
FIX::MessageFactory
Các file cấu hình
-
.xml file. Là file cấu hình theo version của giao thức FIX. Thông thường dùng cấu hình mặc đinh.
-
.cfg file. Gồm 2 file. Một dùng cấu hình phía server, một dùng cấu hình phía client.
*** 3.1. Cấu hình phía server***
[default] #group default (# ký tự comment)
ConnectionType=acceptor # Loại kết nối là server
FileStorePath=~/quickfix_Server/logs/store # đường dẫn đến thư mục log store
FileLogPath=~/quickfix_Server/logs/store # đường dẫn đến thư mục log
DataDictionary=~/quickfix_Server/conf/FIX4.4.xml # đường dẫn đến file config .xml
StartTime=00:00:00 # thời gian service tự động logon lại
EndTime=23:59:59 # thời gian service tự động logout
ResetOnLogon=Y # Y- thiết lập số thứ tự lại = 1 khi logon
HeartBint=10 # thiết lập thời gian gửi gói hearbeat
SocketAcceptPort=9876 #cổng lắng nghe kết nối đến từ client
[Session]
BeginString=FIX.4.4 # khai báo version FIX là 4.4 (thẻ 8=FIX.4.4)
SenderCompID=Server1 # ID phía gửi (server)
TargetCompID=Client1 # ID phía nhận (client)
*** 3.2. Cấu hình phía client***
[default] #group default (# ký tự comment)
ConnectionType=initiator # Loại kết nối là server
FileStorePath=~/quickfix_Client/logs/store # đường dẫn đến thư mục log store
FileLogPath=~/quickfix_Client/logs/store # đường dẫn đến thư mục log
DataDictionary=~/quickfix_Client/conf/FIX4.4.xml # đường dẫn đến file config .xml
StartTime=00:00:00 # thời gian service tự động logon lại
EndTime=23:59:59 # thời gian service tự động logout
ResetOnLogon=Y # Y- thiết lập số thứ tự lại = 1 khi logon
HeartBint=10 # thiết lập thời gian gửi gói hearbeat
SocketConnectionHost=192.168.1.1 # địa chỉ Ip server
SocketConnectPort=9876 #cổng server nhận kết nối
[Session]
BeginString=FIX.4.4 # khai báo version FIX là 4.4 (thẻ 8=FIX.4.4)
SenderCompID=Client1 # ID phía gửi (server)
TargetCompID=Server1 # ID phái nhận (client)
4. Demo
Mô hình tổng quan hệ thống FX sử dụng FIX protocal
Ở mô hình trên giao thức FIX được sử dụng trong việc kết nối gửi nhận thông tin giữa công ty FX với các ngân hàng (CP).
Mô hình demo tác vụ Logon, Quote request, và gửi/nhận Quote.
Link tham khảo:
All rights reserved