+2

FIX PROTOCOL AND QUICKFIX ENGINE

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-format2.jpg

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

FX-Model2.jpg

Ở 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.

Quoting-Model2.jpg

Link tham khảo:


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí