如何配置QuickFIX/N
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 |
连接异常断开后是否要将序列号重置为 |
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=
SenderCompID=ARCA
# session definition
[SESSION]
# FileStorePath,FileLogPath,ConnectionType,
# ReconnectInterval and SenderCompID等配置延用default的配置
BeginString=FIX.4.1
TargetCompID=TW
StartTime=12:30:
EndTime=23:30:
HeartBtInt=
SocketAcceptPort=
DataDictionary=somewhere/FIX41.xml
[SESSION]
BeginString=FIX.4.0
TargetCompID=TW
StartTime=12:00:
EndTime=23:00:
HeartBtInt=
SocketAcceptPort=
DataDictionary=somewhere/FIX40.xml
[SESSION]
BeginString=FIX.4.2
TargetCompID=TW
StartTime=12:30:
EndTime=21:30:
#自定义ReconnectInterval时间间隔值,不用default配置节点的配置,仅本会话有效
ReconnectInterval=
HeartBtInt=
SocketAcceptPort=
# (可选)仅监听指定主机的连接请求
SocketAcceptHost=127.0.0.1
DataDictionary=somewhere/FIX42.xml
如何配置QuickFIX/N的更多相关文章
- QuickFIX/N入门:(三)如何配置QuickFIX/N
Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要.在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号 ...
- VIM配置
Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器. 本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器. 有两种比较流行的方式: 自动安装 手动 ...
- vim IDE平台-打造属于自己的配置
vim IDE平台-打造属于自己的配置 一.前言 目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又 ...
- QuickFIX/N 动态存储配置信息
Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要.在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号 ...
- vim 标准环境的配置
最近刚刚从IDE转到了vim,很多习惯不一致,特地配置了一下vim环境.在网上找了大神的帖子,怕忘记了,特此纪念. 传送门 http://www.cnblogs.com/ma6174/arch ...
- Ubuntu下VIM的安装及其配置——Linux篇
一.Ubuntu系统默认内置: 实际上ubuntu默认没有安装老版本的vi,只装了vim.vi是vim.tiny(vim的最小化版本,不含 GUI,并且仅含有一小部分功能,并且默认与vi兼容.此软件包 ...
- 【转】Gvim开发环境配置笔记--Windows篇
配置文件(vimrc) set nocompatible set nu! set cursorline colorscheme murphy " vim 自身命令行模式智能补全 set wi ...
- Windows下gvim配置
Windows下gvim配置原作地:http://hi.baidu.com/leemoncc/blog/item/a6be15cf40d7ab31b600c806.html 0.准备软件及插件. (a ...
- vim配置及插件安装管理(超级详细)
1 写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...
随机推荐
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- css中的background属性
第一次写博客,我就写写今天在编写网页的过程中,对background的两种运用,一是background中的线性渐变,对背景的渐变我其实是很少使用的,所以今天在写的时候我用css3的帮助手册,back ...
- CRM 2013 自动发送报表
Sql Server Report非常强大,导出不同格式的文档,比如work 或者excel都可以委托Reporting先做报表开发然后再在程序中调用生成指定格式的报表推送给用户,CRM也是集成了Re ...
- [javascript svg fill stroke stroke-width points polyline 属性讲解] svg fill stroke stroke-width points polyline 绘制折线属性讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 用typedef自定义类型语法你真的会吗
关于typedef 我们学习typedef的时候,他的定义语法是:typedef+类型+别名,但是按照上面的格式,自定义数组怎么定义呢,是这样tepedef int a[10] 别名?还是这样tep ...
- 创建一个Android项目
当我们的eclipse安装了SDK后,点击Window-->Perference-->DDMS.eclipse界面立即转为DDMS界面. 这时,我们可以打开我们的服务端(安卓模拟器或者是我 ...
- iOS 中内存分配与分区
关于RAM ROM RAM与ROM就是具体的存储空间,统称为存储器 RAM(random access memory):运行内存,CPU可以直接访问,读写速度非常快,但是不能掉电存储.它又分为: 动态 ...
- android环境搭建
Android开发环境的两种安装方式:JDK+Eclipse+ADT直接下载集成的开发工具,解压即可用.下载地址:http://pan.baidu.com/s/1dD3s3bN ,不管采用哪种安装方式 ...
- Asp.net WebPages框架运行原理浅析(转)
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...
- DevExpress ASPxSplitter ClientSideEvents-PaneExpanded 时间用法
在webform中的devexpress aspxsplitter中套用了jquery-easyui的 tabs id=tt <div id="tt" class=" ...