Acceptor或者Initiator能夠為您維護盡可能多的FIX會話,因而FIX會話標識的唯一性非常重要。在QuickFIX/N中,一個FIX會話的唯一標識是由:BeginString(FIX版本號)、SenderCompID(發送方ID)及TargetCompID(目標方ID)等標識字符組合而成。通常還會加上SessionQualifier來保證會話的唯一性。
每個FIX會話可以有很多與它們相關聯的配置信息。在編譯的時候,有些配置可能還是未知的,因此可以通過類SessionSettings來設置或加載。 SessionSettings是一個數據字典,可以隨意設置和查詢配置信息。
SessionSettings有兩個帶參數構造函數,其中一個是System.IO.TextReader的參數,它能夠解析TextReader的配置信息;另外一個構造參數是文件名,把配置文件的文件路徑作為參數傳入,它可以解析當中的配置信息 。當然,你也可以自己定義組件(例如,一個特定的數據庫存儲),然后使用SessionSettings存儲配置信息(SessionSettings提供了一個Set方法)。
配置文件當中有兩個類型的配置節點: [DEFAULT],[SESSION]。[SESSION]定義一個會話。[DEFAULT]節點定義與會話相關,但沒在會話當中明確定義的相關配置,比如連接對手方的IP、端口、心跳間隔等。QuickFIX/N並不會為所有必需配置的定義默認值。如果配置有任何一個QuickFIX/N必需的配置項缺失,它將拋出ConfigError異常,提示配置缺少或格式不正確。
1) 會話配置(SESSION)
配置 |
描述 |
有效值 |
默認 |
BeginString |
會話使用的FIX版本號(發送和接收消息起始字符串) |
FIXT.1.1 |
|
FIX.4.4 |
|||
FIX.4.3 |
|||
FIX.4.2 |
|||
FIX.4.1 |
|||
FIX.4.0 |
|||
SenderCompID |
會話當中定義本方的ID |
區分大小寫的字符串 |
|
SenderSubID |
會話相關的本方的子ID號 (可選) |
區分大小寫的字符串 |
|
SenderLocationID |
會話相關的本方的locationID號 (可選) |
區分大小寫的字符串 |
|
TargetCompID |
本會話當中的對方ID |
區分大小寫的字符串 |
|
TargetSubID |
本會話當中的對方SubID (可選) |
區分大小寫的字符串 |
|
TargetLocationID |
本會話當中的對方locationID (可選) |
區分大小寫的字符串 |
|
SessionQualifier |
附加的限定詞,用於消除歧義,保證會話的唯一性 |
區分大小寫的字符串 |
|
DefaultApplVerID |
僅FIXT1.1(或以上版本)需要。忽略早期版本的傳輸。指定會話的默認應用程序的版本ID。ApplVerID的枚舉值(請看ApplVerID字段詳細介紹),或默認BeginString。 |
FIX.5.0SP2 |
- |
FIX.5.0SP1 |
|||
FIX.5.0 |
|||
FIX.4.4 |
|||
FIX.4.3 |
|||
FIX.4.2 |
|||
FIX.4.1 |
|||
FIX.4.0 |
|||
ConnectionType |
定義會話當中本方的角色:acceptor或者r initiator |
initiator |
- |
acceptor |
|||
StartTime |
交易日的會話有效開始時間,這時FIX會話被激活 |
UTC時間,格式: HH:MM:SS, |
- |
EndTime |
交易日的會話失效時間,FIX會話將被停止 |
同上 |
- |
StartDay |
對於為期一周的會話配置,一周會話開始的第一天。與STARTTIME結合使用。 |
使用一周中某天的英語任何縮寫都是有效的(比如,mo, mon, mond, monda,Monday都是有效的) |
- |
EndDay |
對於為期一周的會話配置,一周會話結束的最后一天。與EndTime結合使用。 |
同上 |
- |
MillisecondsInTimeStamp |
時間戳是否加入毫秒。FIX.4.2和更高版本可用。 |
Y |
Y |
N |
|||
ResetOnLogon |
接收登錄請求時,序列號是否要復位。只用於Acceptor |
Y |
N |
N |
|||
ResetOnLogout |
正常注銷登錄時,序列號是否要復位 |
Y |
N |
N |
|||
ResetOnDisconnect |
連接異常斷開后是否要將序列號重置為1 |
Y |
N |
N |
|||
RefreshOnLogon |
確定是否應當從持久層登錄時恢復會話狀態。在創建熱故障切換會話時有用。 |
Y |
N |
N |
|||
EnableLastMsgSeqNumProcessed |
是否在header中添加最后一條消息的序列號(可選tag369)。 |
Y |
N |
N |
|||
MaxMessagesInResendRequest |
設置一次重發請求的消息的最大消息數。 |
任何大於0的整數。使用0為無窮大(默認)。 |
0 |
SendLogoutBeforeDisconnectFromTimeout |
指定是否因超時斷開連接之前發送logout消息。 |
Y |
N |
N |
|||
IgnorePossDupResendRequests |
當PossDupFlag(tag 43)設置為true時,是否忽略一次重發請求, |
Y |
N |
N |
2) 驗證配置
配置 |
描述 |
有效值 |
默認 |
UseDataDictionary |
告訴會話是否使用數據字典,或不希望使用數據字典。 如果你要使用repeating group,你必須使用DataDictionary。 |
Y |
Y |
N |
|||
DataDictionary |
XML定義文件用於驗證傳入的FIX消息。如果沒有提供DataDictionary,只會做基本消息的驗證。 |
有效的XML數據字典文件。QuickFIX/N 配備默認的協議字典數據 |
- |
該配置只用於比FIXT.1.1還老的版本。詳細參考FIXT.1.1的TransportDataDictionary和AppDataDictionary的配置。 |
FIX44.xml |
||
FIX43.xml |
|||
FIX42.xml |
|||
FIX41.xml |
|||
FIX40.xml |
|||
TransportDataDictionary |
XML定義文件用於驗證傳入的管理消息。如果沒有提供DataDictionary,只會做基本消息的驗證。該配置只用於FIXT.1.1(或更高版本)的會話。 |
有效的XML數據字典文件。QuickFIX/N 配備默認的協議字典數據 |
- |
更多信息請參考(FIX.4.0到 FIX.4.4)的DataDictionary。 |
FIXT1.1.xml |
||
AppDataDictionary |
用於驗證應用層消息的XML定義文件。僅對FIXT.1.1(或更高版本)的會話有效。 更多信息請參考(FIX.4.0到 FIX.4.4)的DataDictionary。 該配置可以為每個會話指定一個自定義應用的數據字典。該配置僅用於FIXT.1.1或更新的傳輸協議。使用FIXT傳輸時,該配置可以作為指定多個應用的數據字典的前綴。例如: DefaultApplVerID=FIX.4.2 # For default application version ID AppDataDictionary=FIX42.xml # For nondefault application version ID # Use BeginString suffix for app version AppDataDictionary.FIX.4.4=FIX44.xml |
有效的XML數據字典文件。QuickFIX/N 配備默認的協議字典數據 |
- |
FIX50SP2.xml |
|||
FIX50SP1.xml |
|||
FIX50.xml |
|||
FIX44.xml |
|||
FIX43.xml |
|||
FIX42.xml |
|||
FIX41.xml |
|||
FIX40.xml |
|||
ValidateFieldsOutOfOrder |
如果設置為N,字段放置區域錯誤(例如,body字段在header區域內,或在header字段在body區域內)將不會被拒絕。用於連接字段要求不嚴格的系統。 |
Y |
Y |
N |
|||
ValidateFieldsHaveValues |
如果設置為N,沒有值的字段將不會被拒絕。用於連接到系統不當發送空標簽。 |
Y |
Y |
N |
|||
ValidateUserDefinedFields |
如果設置為N,用戶自定義的字段將不會被拒絕,即使沒有在數據字典中定義,或沒出現在消息中。 |
Y |
Y |
N |
1) Initiator
設置
|
描述
|
有效值
|
默認
|
ReconnectInterval
|
嘗試重新連接的時間間隔(秒)。僅用於 initiator。
|
正整數
|
30
|
HeartBtInt
|
心跳間隔(秒)。僅用於initiator。
|
正整數
|
-
|
LogonTimeout
|
登錄超時時間間隔(秒)
|
正整數
|
10
|
LogoutTimeout
|
注銷登錄超時時間間隔(秒)。
|
正整數
|
2
|
SocketConnectPort
|
Socket服務端口,用於建立會話。僅用於 initiator
|
正整數
|
-
|
SocketConnectHost
|
連接主機.僅用於 initiator
|
x.x.x.x格式IP地址或域名
|
-
|
SocketConnectPort<n>
|
一組備用Socket端口,用於連接會話的故障轉移,n是正整數。SocketConnectPort1,SocketConnectPort2 ... 必須是連續的,並有一個與之相匹配的數組SocketConnectHost<n>
|
正整數
|
-
|
SocketConnectHost<n>
|
一組備用Socket服務主機,用於連接會話的故障轉移,n是正整數。SocketConnectHost1, SocketConnectHost2... 必須是連續的,並有一個與之相匹配的數組SocketConnectPort<n>
|
x.x.x.x格式IP地址或域名
|
-
|
SocketNodelay
|
連接是否禁用Nagle算法。在[DEFAULT]配置節點定義。
|
Y
|
Y
|
N
|
注:Nagle算法的目的是避免TCP發送大量的小數據包。TCP在接收到前一個小段的ACK消息之前,一直保存小數據包。然而Nagle算法和TCP的延遲確認策略間的交互會因一段暫時性的“死鎖”而使應用程序產生嚴重的性能下降。
2) acceptor
設置
|
描述
|
有效值
|
默認
|
SocketAcceptPort
|
監聽接入連接Socket端口。僅用於acceptor
|
正整數,有效的、開放的套接字端口
|
-
|
SocketAcceptHost
|
監聽接入連接的Socket服務的主機。如果不提供,acceptor將監聽所有網絡端口(0.0.0.0)
|
有效的x.x.x.x格式IP地址
|
0.0.0.0
|
SocketNodelay
|
連接是否禁用Nagle算法。在[DEFAULT]配置節點定義。
|
Y
|
Y
|
N
|
3) Storage
設置
|
描述
|
有效值
|
默認
|
PersistMessages
|
如果設置為N,被不會保存消息。這樣將迫使quickfix總是發送GapFills,而不是重新發送消息。如果你知道你永遠不需要重新發送消息,使用此配置。有用的市場數據流。
|
Y
|
Y
|
N
|
4) File Storage
設置
|
描述
|
有效值
|
默認
|
FileStorePath
|
存儲序列號和消息的文件目錄。
|
有效的文件存儲目錄,必須有寫入權限。
|
-
|
5) Logging
設置
|
描述
|
有效值
|
默認
|
FileLogPath
|
存儲日志的目錄。
|
有效的文件存儲目錄,必須有寫入權限。
|
-
|
6) 配置文件的樣例
(1) Initiator 配置文件的樣例
只能用一個[DEFAULT]節點,可以有多個[SESSION]節點,多個[SESSION]節點是定義多個會話。
#
定義會話的默認配置(
default節點,對於全部會話有效,當然允許
SESSIION
節點重寫)
[DEFAULT]
FileStorePath=store
FileLogPath=log
ConnectionType=initiator
ReconnectInterval=60
SenderCompID=TW
# session
定義
[SESSION]
# FileStorePath,FileLogPath,ConnectionType,
# ReconnectInterval and SenderCompID
等配置延用
default
的配置
BeginString=FIX.4.1
TargetCompID=ARCA
StartTime=12:30:00
EndTime=23:30:00
HeartBtInt=20
SocketConnectPort=9823
SocketConnectHost=123.123.123.123
DataDictionary=somewhere/FIX41.xml
[SESSION]
BeginString=FIX.4.0
TargetCompID=ISLD
StartTime=12:00:00
EndTime=23:00:00
HeartBtInt=30
SocketConnectPort=8323
SocketConnectHost=23.23.23.23
DataDictionary=somewhere/FIX40.xml
[SESSION]
BeginString=FIX.4.2
TargetCompID=INCA
StartTime=12:30:00
EndTime=21:30:00
#
自定義
ReconnectInterval
時間間隔值,不用
default
配置節點的配置,僅本會話有效
ReconnectInterval=30
HeartBtInt=30
SocketConnectPort=6523
SocketConnectHost=3.3.3.3
# (
可選
)
連接端口及連接服務主機列表
,
用於故障恢復時自動切換
SocketConnectPort1=8392
SocketConnectHost1=8.8.8.8
SocketConnectPort2=2932
SocketConnectHost2=12.12.12.12
DataDictionary=somewhere/FIX42.xml
(2) Acceptor 配置文件的樣例
#
定義會話的默認配置(
default節點)
[DEFAULT]
FileStorePath=store
FileLogPath=log
ConnectionType=acceptor
ReconnectInterval=
60
SenderCompID=ARCA
# session definition
[SESSION]
# FileStorePath,FileLogPath,ConnectionType,
# ReconnectInterval and SenderCompID
等配置延用
default
的配置
BeginString=FIX.
4.1
TargetCompID=TW
StartTime=
12:
30:
00
EndTime=
23:
30:
00
HeartBtInt=
20
SocketAcceptPort=
9823
DataDictionary=somewhere/FIX41.xml
[SESSION]
BeginString=FIX.
4.0
TargetCompID=TW
StartTime=
12:
00:
00
EndTime=
23:
00:
00
HeartBtInt=
30
SocketAcceptPort=
8323
DataDictionary=somewhere/FIX40.xml
[SESSION]
BeginString=FIX.
4.2
TargetCompID=TW
StartTime=
12:
30:
00
EndTime=
21:
30:
00
#
自定義
ReconnectInterval
時間間隔值,不用
default
配置節點的配置,僅本會話有效
ReconnectInterval=
30
HeartBtInt=
30
SocketAcceptPort=
6523
# (
可選
)
僅監聽指定主機的連接請求
SocketAcceptHost=
127.0.
0.1
DataDictionary=somewhere/FIX42.xml