当前位置: 首页 > 工具软件 > QuickFIX/J > 使用案例 >

QuickFIX/N使用:如何配置QuickFIX/N(三)

邴星洲
2023-12-01

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异常,提示配置缺少或格式不正确。

会话配置(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区分大小写的字符串
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 initiatorinitiator
acceptor
StartTime交易日的会话有效开始时间,这时FIX会话被激活UTC时间,格式: HH:MM:SS,
EndTime交易日的会话失效时间,FIX会话将被停止同上
StartDay对于为期一周的会话配置,一周会话开始的第一天。与STARTTIME结合使用。使用一周中某天的英语任何缩写都是有效的(比如,mo, mon, mond, monda,Monday都是有效的)
EndDay对于为期一周的会话配置,一周会话结束的最后一天。与EndTime结合使用。同上
MillisecondsInTimeStamp时间戳是否加入毫秒。FIX.4.2和更高版本可用。Y
N
Y
ResetOnLogon接收登录请求时,序列号是否要复位。只用于AcceptorY
N
N
ResetOnLogout正常注销登录时,序列号是否要复位Y
N
N
ResetOnDisconnect连接异常断开后是否要将序列号重置为1Y
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

验证配置

配置描述有效值默认
UseDataDictionary告诉会话是否使用数据字典,或不希望使用数据字典。 如果你要使用repeating group,你必须使用DataDictionary。Y
N
Y
DataDictionaryXML定义文件用于验证传入的FIX消息。如果没有提供DataDictionary,只会做基本消息的验证。

该配置只用于比FIXT.1.1还老的版本。详细参考FIXT.1.1的TransportDataDictionary和AppDataDictionary的配置
有效的XML数据字典文件。QuickFIX/N 配备默认的协议字典数据
FIX44.xml
FIX43.xml
FIX42.xml
FIX41.xml
FIX40.xml
TransportDataDictionaryXML定义文件用于验证传入的管理消息。如果没有提供DataDictionary,只会做基本消息的验证。该配置只用于FIXT.1.1(或更高版本)的会话。

更多信息请参考(FIX.4.0到 FIX.4.4)的DataDictionary。
有效的XML数据字典文件。QuickFIX/N 配备默认的协议字典数据

FIXT1.1.xml
AppDataDictionary用于验证应用层消息的XML定义文件。仅对FIXT.1.1(或更高版本)的会话有效。

该配置可以为每个会话指定一个自定义应用的数据字典。该配置仅用于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
N
Y
ValidateFieldsHaveValues如果设置为N,没有值的字段将不会被拒绝。用于连接到系统不当发送空标签。Y
N
Y
ValidateUserDefinedFields如果设置为N,用户自定义的字段将不会被拒绝,即使没有在数据字典中定义,或没出现在消息中。Y
N
Y

Initiator

配置描述有效值默认
ReconnectInterval尝试重新连接的时间间隔(秒)。仅用于 initiator。正整数30
HeartBtInt心跳间隔(秒)。仅用于initiator。正整数30
LogonTimeout登录超时时间间隔(秒)正整数10
LogoutTimeout注销登录超时时间间隔(秒)。正整数2
SocketConnectPortSocket服务端口,用于建立会话。仅用于 initiator正整数-
SocketConnectHost连接主机.仅用于 initiatorx.x.x.x格式IP地址或域名-
SocketConnectPort一组备用Socket端口,用于连接会话的故障转移,n是正整数。SocketConnectPort1,SocketConnectPort2 … 必须是连续的,并有一个与之相匹配的数组SocketConnectHost正整数-
SocketConnectHost组备用Socket服务主机,用于连接会话的故障转移,n是正整数。SocketConnectHost1, SocketConnectHost2… 必须是连续的,并有一个与之相匹配的数组SocketConnectPortx.x.x.x格式IP地址或域名-
SocketNodelay连接是否禁用Nagle算法。在[DEFAULT]配置节点定义。Y
N
Y

注:Nagle算法的目的是避免TCP发送大量的小数据包。TCP在接收到前一个小段的ACK消息之前,一直保存小数据包。然而Nagle算法和TCP的延迟确认策略间的交互会因一段暂时性的“死锁”而使应用程序产生严重的性能下降。

Acceptor

配置描述有效值默认
SocketAcceptPort监听接入连接Socket端口。仅用于acceptor正整数,有效的、开放的套接字端口-
SocketAcceptHost监听接入连接的Socket服务的主机。如果不提供,acceptor将监听所有网络端口(0.0.0.0)有效的x.x.x.x格式IP地址0.0.0.0
SocketNodelay连接是否禁用Nagle算法。在[DEFAULT]配置节点定义。Y
N
Y

Storage

配置描述有效值默认
PersistMessages
如果设置为N,被不会保存消息。这样将迫使quickfix总是发送GapFills,而不是重新发送消息。如果你知道你永远不需要重新发送消息,使用此配置。有用的市场数据流。Y
N
Y

File Storage

配置描述有效值默认
FileStorePath

存储序列号和消息的文件目录。 | 有效的文件存储目录,必须有写入权限。 | - |

Logging

配置描述有效值默认
FileLogPath

存储日志的目录。 | 有效的文件存储目录,必须有写入权限。 | - |

配置文件的样例

Initiator 配置文件的样例

只能用一个[DEFAULT]节点,可以有多个[SESSION]节点,多个[SESSION]节点是定义多个会话。

#
定义会话的默认配置(
对于全部会话有效,当然允许
 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
Acceptor 配置文件的样例
# 
定义会话的默认配置(

[DEFAULT]
FileStorePath=store
FileLogPath=log
ConnectionType=acceptor
ReconnectInterval=

SenderCompID=ARCA
 
# session definition
[SESSION]
# FileStorePath,FileLogPath,ConnectionType, 
#    ReconnectInterval and SenderCompID 
等配置延用
 default
的配置

BeginString=FIX.

TargetCompID=TW
StartTime=00:00:00
EndTime= 00:00:00

HeartBtInt=

SocketAcceptPort=

DataDictionary=somewhere/FIX41.xml
 
[SESSION]
BeginString=FIX.

TargetCompID=TW
StartTime= 00:00:00

EndTime= 00:00:00

HeartBtInt=

SocketAcceptPort=

DataDictionary=somewhere/FIX40.xml
 
[SESSION]
BeginString=FIX.

TargetCompID=TW
StartTime= 00:00:00
EndTime= 00:00:00

#
自定义
ReconnectInterval
时间间隔值,不用
default
配置节点的配置,仅本会话有效

ReconnectInterval=

HeartBtInt=

SocketAcceptPort=

# (可选) 仅监听指定主机的连接请求

SocketAcceptHost=
DataDictionary=somewhere/FIX42.xml

原文:https://www.cnblogs.com/justuntil/p/4888639.html

 类似资料: