idea如何配置mavenQuickFIX/N

sponsored links
QuickFIX/N入门
/jinglelin/archive//2470978.html
QuickFix/N简介&
FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。该协议由FIX protocol, Ltd(FPL)所有并维护。FIX协议的官方网址为http://www.fixprotocol.org/&
QuickFix引擎(&http://www.quickfixengine.org/&)一个开源的FIX引擎,其中它有JAVA、C++、C#三个版本的实现。
QuickFix/N是实现了FIX协议4.0-5.0版本及其功能的开源软件,100%使用.NET(C#)实现。
QuickFix/N官网下载 http://www.quickfixn.org/
QuickFix/N源码下载 /connamara/quickfixn
使用QuickFIX/N创建一个Fix应用程序
使用QuickFIX/N创建一个FIX应用程序很容易,实现它的接口Application即可,例如创建一个简单应用程序如下:
public&class&MyQuickFixApp&:&Application
&&&&public&void&FromApp(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&OnCreate(SessionID&sessionID)&{&}
&&&&public&void&OnLogout(SessionID&sessionID)&{&}
&&&&public&void&OnLogon(SessionID&sessionID)&{&}
&&&&public&void&FromAdmin(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&ToAdmin(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&ToApp(Message&msg,&SessionID&sessionID)&{&}
这些实现方法将被QuickFIX/N的事件调用。
下面我们来看看每个回调事件的说明。
客户端(对手方)发送登录请求或其它请求消息,当QuickFIX/N应用程序收到消息。QuickFIX/N应用程序会发送一个回调事件的通知。
FromApp&-每个应用级别的消息将通过该方法处理,如委托指令,执行报告,证券信息以及市场数据。
FromAdmin&-每个管理级别的消息将通过该方法处理,如心跳,登录以及注销。
&OnCreate中&- 每当一个新的会话被创建,该方法被调用。
OnLogon&- 当登录操作成功完成时,该方法被调用。
OnLogout&- 当会话断开时触发,包括对方主动请求logout或者网络连接断开都会引发该事件。
ToApp&-所有应用级别的消息在发送出去之前,都会调用该方法。如果需要在每个发出的消息当中添加一个标签(Tag),在该方法是实现该需求最好的位置。
ToAdmin&-所有发出的管理级别消息在发送出去之前,都会调用该方法。
Acceptor 和 Initiator
QuickFIX/N 实现了的acceptor 和 initiator两种模式。
Initiator:作为客户端,当我们要连接到对方的应用时,使用Initiator。
Acceptor :作为服务端,当我们要提供应用服务供对方连接时,使用Acceptor。&
创建我们的应用程序
以下示例代码,我们实现Application&接口,然后实例化一个Acceptor:
using&QuickF
public&class&MyQuickFixApp&:&Application
&&&&public&void&FromApp(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&OnCreate(SessionID&sessionID)&{&}
&&&&public&void&OnLogout(SessionID&sessionID)&{&}
&&&&public&void&OnLogon(SessionID&sessionID)&{&}
&&&&public&void&FromAdmin(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&ToAdmin(Message&msg,&SessionID&sessionID)&{&}
&&&&public&void&ToApp(Message&msg,&SessionID&sessionID)&{&}
public&class&MyApp
&&&&static&void&Main(string[]&args)
&&&&&&&&SessionSettings&settings&=&new&SessionSettings(args[0]);
&&&&&&&&Application&myApp&=&new&MyQuickFixApp();
&&&&&&&&MessageStoreFactory&storeFactory&=&new&FileStoreFactory(settings);
&&&&&&&&LogFactory&logFactory&=&new&FileLogFactory(settings);
&&&&&&&&ThreadedSocketAcceptor&acceptor&=&new&ThreadedSocketAcceptor(
&&&&&&&&&&&&myApp,
&&&&&&&&&&&&storeFactory,
&&&&&&&&&&&&settings,
&&&&&&&&&&&&logFactory);
&&&&&&&&acceptor.Start();
&&&&&&&&while&(true)
&&&&&&&&&&&&System.Console.WriteLine(&Waiting!&);
&&&&&&&&&&&&System.Threading.Thread.Sleep(1000);
&&&&&&&&acceptor.Stop();
&如果要更改应用角色,改为Initiator,只要简单地用SocketInitiator替换ThreadedSocketAcceptor即可。
1)消息存储扩展
MessageStore会存储FIX会话级别消息的消息传出记录。我们可以通过实现MessageStoreFactory接口,来自定义或扩展我们的消息存储。
2)日志存储扩展
日志记录已经有了两个的实现:FileLog、ScreenLog,其中文件存储的日志记录器已经可以满足一般的要求。当然,我们也可以通过实现LogFactory接口,来自定义实现或扩展我们的日志存储。&
一、&&&&&发送消息
QuickFIX/N的发送FIX消息的简单示例:
FIX44.NewOrderSingle order =
new FIX44.NewOrderSingle(
&&& new ClOrdID(&1234&),
&&& new Symbol(&000001&),
&&& new Side(Side.BUY),
&&& new TransactTime(DateTime.Now),
&&& new OrdType(OrdType.MARKET));
Session.SendToTaget(order, sessionID);
首先,我们需要学习如何使用会话发送指令消息。
1)&&&&& QuickFIX会话
发送消息时,我们必须指定QuickFIX会话,QuickFIX根据会话信息判定消息发送目的地。
所有QuickFIX会话的标识是在消息头定义的,通常包括SenderCompID,TargetCompID,BeginString等字段,这些都是在配置文件中指定。
SenderCompID=CONNAMARA
TargetCompID=CBOE
BeginString=FIX4.4
有几个获得会话的方式。一是当会话被创建并缓存它时,我们可以获得SessionID:
private SessionID MySessionID { }
public void OnCreate(SessionID sessionID)
&&& MySessionID = sessionID;
另外,我们可以在响应传入消息时,得到SessionID:
public void OnMessage(FIX42.ExecutionReport execution, SessionID sessionID)
&&& ProcessExecution(execution, sessionID);
或者,先在配置文件当中配置好所有的会话,我们可以从配置文件找到匹配的SessionID:
var mySessionID = new SessionID(&FIX4.2&, &senderCompID&, &targetCompID&);
2)&&&&& 创建和发送消息
创建消息时,我们首选使用指定Fix版本和消息类型的构造函数,填写必选字段:
using QuickF
using QuickFix.F
var order = new QuickFix.FIX44.NewOrderSingle(
&&& new ClOrdID(&1234&),
&&& new Symbol(&000001&),
&&& new Side(Side.BUY),
&&& new TransactTime(DateTime.Now),
&&& new OrdType(OrdType.LIMIT));
使用信息的字段属性设置字段值:
order.Price = new Price(new decimal(22.4));
order.Account = new Account(&&);
把上面的内容合并在一起:创建消息,设置其必需的字段,并设置两个附加字段,使用获得的SessionID,我们发送消息示意如下:
var order = new QuickFix.FIX44.NewOrderSingle(
&&& new ClOrdID(&1234&),
&&& new Symbol(&000001&),
&&& new Side(Side.BUY),
&&& new TransactTime(DateTime.Now),
&&& new OrdType(OrdType.LIMIT));
order.Price = new Price(new decimal(22.4));
order.Account = new Account(&&);
Session.SendToTarget(order, sessionID);
3)&&&&& 创建消息及字段的其他实现方式
类型安全的方式
,已经被证明它是最好的方式了,但我们也可以用其他创建消息及字段的方法。
每个消息类型都有一个默认的构造函数:
var order = new QuickFix.FIX44.NewOrderSingle();
order.ClOrdID =&new ClOrdID(&1234&);
order.Symbol = new Symbol(&000001&);
order.Side = new Side(Side.BUY);
我们也可以用QuickFIX C ++及QuickFIX/J风格的get
/ set方法,也是类型安全的:
order.Set(new TransactTime(DateTime.Now));
order.Set(new OrdType(OrdType.LIMIT));
如果不是一个消息属性,可以用SetField设置一个字段的值:
order.SetField(new Account(&&));
另外,也可以这么做,先创建一个Message基类的实例,它没有属性,因此都必须使用SetField&方法,但不建议使用这种风格:
var order = new QuickFix.Message();
order.Header.SetField(new MsgType(&D&));
order.SetField(new ClOrdID(&1234&));
order.SetField(new Symbol(&AAPL&));
order.SetField(new Side(Side.BUY));
order.SetField(new TransactTime(DateTime.Now));
order.SetField(new OrdType(OrdType.LIMIT));
二、&&&&&&&
在QuickFIX/N接收类型安全和简单类型的消息:
public void OnMessage( QuickFix.FIX44.NewOrderSingle order,SessionID sessionID)
&&& ProcessOrder(order.Price, order.OrderQty, order.Account);
1)&&&&& 接收类型安全的消息
MessageCracker是一个抽象类,一个助手类,一般在类型安全的各个OnMessage方法中调用,用于解析各个FIX版本的委托消息类型。处理FIX消息时, Crack方法会根据消息类型,判断其类型类型是否已定义消息类型,如果已定义的消息,将调用其已注册的处理方法来处理消息。
写QuickFIX/N应用时,应用类将继承MessageCracker,对于消息的处理,我们使用的都是指定的、强类型的Message和Field类,对于不同的消息类型,我们分别不同的处理方法实现处理逻辑。当消息到达时, FromApp方法里面调用Crack,根据不同的消息类型,调用相应类型的消息处理方法&:
using QuickF
public class MyApplication : MessageCracker, Application
&&& public void FromApp(Message msg, SessionID sessionID)
&&&&&&& Crack(msg, sessionID);
在重载的onMessage回调方法当中调用Crack&。以下例子演示接收委托及证券信息:
public void OnMessage( QuickFix.FIX44.NewOrderSingle ord,&SessionID sessionID)
&&& ProcessOrder(ord.Price, ord.OrderQty, ord.Account);
public void OnMessage( QuickFix.FIX44.SecurityDefinition secDef,&SessionID sessionID)
&&& GotSecDef(secDef);
2)&&&&& 消息解析器示例
整合一下,一个类型安全的订单处理的应用是这样的:
public class MyApplication : MessageCracker, Application
&&& public void OnMessage(
&&&&&&& QuickFix.FIX42.NewOrderSingle ord,
&&&&&&& SessionID sessionID)
&&&&&&& ProcessOrder(ord.Price, ord.OrderQty, ord.Account);
&&& protected void ProcessOrder(
&&&&&&& Price price,
&&&&&&& OrderQty quantity,
&&&&&&& Account account)
&&&&&&& //...
&&& #region Application Methods
&&& public void FromApp(Message msg, SessionID sessionID)
&&&&&&& Crack(msg, sessionID);
&&& public void OnCreate(SessionID sessionID) { }
&&& public void OnLogout(SessionID sessionID) { }
&&& public void OnLogon(SessionID sessionID) { }
&&& public void FromAdmin(Message msg, SessionID sessionID)
&&& public void ToAdmin(Message msg, SessionID sessionID)
&&& public void ToApp(Message msg, SessionID sessionID)
&&& #endregion
3)&&&&& 非类型安全的应用实现
直接对接收到的Message基类消息进行处理,没有了类型安全的类及字段,需要很多额外的逻辑。一般不建议这样做。
public class MyApplication : Application
&&& public void FromApp(Message msg, SessionID sessionID)
&&&&&&& string msgType = msg.Header.GetString(Tags.MsgType);
&&&&&&& if (msgType.Equals(MsgType.EXECUTION_REPORT))
&&&&&&&&& string account = msg.GetString(Tags.Account);
&&&&&&&&& decimal price = msg.GetDecimal(Tags.Price);
&& &// ...same Application callbacks as above
作者:jingle lin
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
QuickFIX/N入门:三、 如何配置QuickFIX/N
入门 个人习惯编译选项 ./configure –with-features=huge –enable-cscope –enable-fontset –enable-multibyte –enable-perlinterp –enable-rubyinterp –enable-pythoninterp 工作目录 :pw[d] 显示当前工作目录 :cd[!]
2.第一个Django项目 上一章节我们完成了python,django和数据库等运行环境的安装,现在我们来创建第一个django project吧,迈出使用django开发应用的第一步. 2.1.创建第一个Django项目 我们创建一个我们存放Django的工作目录,示例:C:\My Files\Python Projects 在命令提示符窗口进入到刚才创 ...
1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到.
Python3.0已经发布,本文我们使用Django作为对象映射层,Django暂时还不支持3.0版本,本文我们以Python 2.7 W ...
[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习表达式在程序设计中的优点:比如构造动态查询.动态构造表达式树完成未知对象属性访问,比反射的性能高出很多.我们可以说表达式树才是Lambda的精髓,是我们必须要熟 ...
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简写为regex.regexp或RE),是计算机科学的一个重要概念.他是用一种数学算法来解决计算机程序中的文本检索.区配等问题. 1.2 正则表达式语言支持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版本号(发送和接收消息起始字符串)
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
ConnectionType
定义会话当中本方的角色:acceptor或者r initiator
交易日的会话有效开始时间,这时FIX会话被激活
UTC时间,格式: HH:MM:SS,
交易日的会话失效时间,FIX会话将被停止
对于为期一周的会话配置,一周会话开始的第一天。与STARTTIME结合使用。
使用一周中某天的英语任何缩写都是有效的(比如,mo, mon, mond, monda,Monday都是有效的)
对于为期一周的会话配置,一周会话结束的最后一天。与EndTime结合使用。
MillisecondsInTimeStamp
时间戳是否加入毫秒。FIX.4.2和更高版本可用。
ResetOnLogon
接收登录请求时,序列号是否要复位。只用于Acceptor
ResetOnLogout
正常注销登录时,序列号是否要复位
ResetOnDisconnect
连接异常断开后是否要将序列号重置为1
RefreshOnLogon
确定是否应当从持久层登录时恢复会话状态。在创建热故障切换会话时有用。
EnableLastMsgSeqNumProcessed
是否在header中添加最后一条消息的序列号(可选tag369)。
MaxMessagesInResendRequest
设置一次重发请求的消息的最大消息数。
任何大于0的整数。使用0为无穷大(默认)。
SendLogoutBeforeDisconnectFromTimeout
指定是否因超时断开连接之前发送logout消息。
IgnorePossDupResendRequests
当PossDupFlag(tag 43)设置为true时,是否忽略一次重发请求,
2)验证配置
UseDataDictionary
告诉会话是否使用数据字典,或不希望使用数据字典。&如果你要使用repeating group,你必须使用DataDictionary。
DataDictionary
XML定义文件用于验证传入的FIX消息。如果没有提供DataDictionary,只会做基本消息的验证。 
有效的XML数据字典文件。QuickFIX/N 配备默认的协议字典数据
该配置只用于比FIXT.1.1还老的版本。详细参考FIXT.1.1的TransportDataDictionary和AppDataDictionary的配置。
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
ValidateFieldsOutOfOrder
&如果设置为N,字段放置区域错误(例如,body字段在header区域内,或在header字段在body区域内)将不会被拒绝。用于连接字段要求不严格的系统。
ValidateFieldsHaveValues
如果设置为N,没有值的字段将不会被拒绝。用于连接到系统不当发送空标签。
ValidateUserDefinedFields
如果设置为N,用户自定义的字段将不会被拒绝,即使没有在数据字典中定义,或没出现在消息中。
1)&Initiator
ReconnectInterval
尝试重新连接的时间间隔(秒)。仅用于&initiator。
HeartBtInt
心跳间隔(秒)。仅用于initiator。
LogonTimeout
登录超时时间间隔(秒)
LogoutTimeout
注销登录超时时间间隔(秒)。
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]配置节点定义。
注:Nagle算法的目的是避免TCP发送大量的小数据包。TCP在接收到前一个小段的ACK消息之前,一直保存小数据包。然而Nagle算法和TCP的延迟确认策略间的交互会因一段暂时性的“死锁”而使应用程序产生严重的性能下降。
2)&acceptor
SocketAcceptPort
监听接入连接Socket端口。仅用于acceptor
正整数,有效的、开放的套接字端口
SocketAcceptHost
监听接入连接的Socket服务的主机。如果不提供,acceptor将监听所有网络端口(0.0.0.0)
有效的x.x.x.x格式IP地址
SocketNodelay
连接是否禁用Nagle算法。在[DEFAULT]配置节点定义。
3)&Storage&
PersistMessages
如果设置为N,被不会保存消息。这样将迫使quickfix总是发送GapFills,而不是重新发送消息。如果你知道你永远不需要重新发送消息,使用此配置。有用的市场数据流。
4)&File&&Storage&
FileStorePath
存储序列号和消息的文件目录。
有效的文件存储目录,必须有写入权限。
5)&Logging&
FileLogPath
存储日志的目录。
有效的文件存储目录,必须有写入权限。
6)&配置文件的样例
(1)&Initiator&配置文件的样例
&&&&&只能用一个[DEFAULT]节点,可以有多个[SESSION]节点,多个[SESSION]节点是定义多个会话。
#定义会话的默认配置(default节点,对于全部会话有效,当然允许 SESSIION节点重写)[DEFAULT]FileStorePath=storeFileLogPath=logConnectionType=initiatorReconnectInterval=60SenderCompID=TW&# session定义[SESSION]# FileStorePath,FileLogPath,ConnectionType, #&&& ReconnectInterval and SenderCompID 等配置延用 default的配置BeginString=FIX.4.1TargetCompID=ARCAStartTime=12:30:00EndTime=23:30:00HeartBtInt=20SocketConnectPort=9823SocketConnectHost=123.123.123.123DataDictionary=somewhere/FIX41.xml&[SESSION]BeginString=FIX.4.0TargetCompID=ISLDStartTime=12:00:00EndTime=23:00:00HeartBtInt=30SocketConnectPort=8323SocketConnectHost=23.23.23.23DataDictionary=somewhere/FIX40.xml&[SESSION]BeginString=FIX.4.2TargetCompID=INCAStartTime=12:30:00EndTime=21:30:00# 自定义ReconnectInterval时间间隔值,不用default配置节点的配置,仅本会话有效ReconnectInterval=30HeartBtInt=30SocketConnectPort=6523SocketConnectHost=3.3.3.3# (可选)连接端口及连接服务主机列表, 用于故障恢复时自动切换SocketConnectPort1=8392SocketConnectHost1=8.8.8.8SocketConnectPort2=2932SocketConnectHost2=12.12.12.12DataDictionary=somewhere/FIX42.xml
(2)Acceptor 配置文件的样例
# 定义会话的默认配置(default节点)[DEFAULT]FileStorePath=storeFileLogPath=logConnectionType=acceptorReconnectInterval=60SenderCompID=ARCA&# session definition[SESSION]# FileStorePath,FileLogPath,ConnectionType, #&&& ReconnectInterval and SenderCompID 等配置延用 default的配置BeginString=FIX.4.1TargetCompID=TWStartTime=12:30:00EndTime=23:30:00HeartBtInt=20SocketAcceptPort=9823DataDictionary=somewhere/FIX41.xml&[SESSION]BeginString=FIX.4.0TargetCompID=TWStartTime=12:00:00EndTime=23:00:00HeartBtInt=30SocketAcceptPort=8323DataDictionary=somewhere/FIX40.xml&[SESSION]BeginString=FIX.4.2TargetCompID=TWStartTime=12:30:00EndTime=21:30:00#自定义ReconnectInterval时间间隔值,不用default配置节点的配置,仅本会话有效ReconnectInterval=30HeartBtInt=30SocketAcceptPort=6523# (可选) 仅监听指定主机的连接请求SocketAcceptHost=127.0.0.1DataDictionary=somewhere/FIX42.xml
阅读(...) 评论()摘要: 推荐单元测试新的模拟框架:Nsubstitute 目前,.NET已经有很多强大模拟框架,为什么还要再重新写一个呢?按照Nsubstitute的官方说法是:所有的模拟框架都已经有强大的功能,但是现存的框架当中,没有一个满足我们对更简洁语法风格的追求。第一次看到Nsubstitute,是在看Nunit的源码时发现,实际上Nunit已经不推荐大家使用它原来的Mock框架,它引入了Nsubstitute。经了解,Nsubstitute已经是一个具有两年多历史的模拟框架,也算是比较年轻的框架,它昨天()刚发布了1.4版本。模拟框架很多,我们的选择很多,但是从现在开始,我们可以考虑一下用N
14:49 可乐加冰 阅读(2032) 评论(0)
摘要: 1、关于QuickFIXQuickFix是一个C++FIX引擎,早期就(2001年)实现FIX协议的FIX引擎,它是免费、开放源码的,主要实现语言是C++,对.NET用户,它提供了.NET的封装,使得C#用户也能轻易用上。Python,Ruby也可以用。它的源码在http://sourceforge.net/projects/quickfix/files/quickfix/。早期的.NET用户一般都选择QuickFix,这是一个很受欢迎的开源引擎,虽然它的性能不是很优秀,但它已经可以满足一般的应用要求。QuickFix/N是100%使用.NET(C#)实现,免费并且完全开源的,是.NET用户最
10:44 可乐加冰 阅读(2269) 评论(0)
摘要: 1)关于数据字典通常,为了满足的业务需求,我们需要对接的一般都是已修改过的或自定义的FIX协议。QuickFIX/N为我们提供了一些强大的方式来处理这个问题,其中最简单的是通过数据字典(DataDictionary)。数据字典定义了会话所有用到的字段、组及消息定义。通常,在接口对接之前,对接双方一起商定FIX协议的版本,以及个性化的字段或消息定制。如果双方恰巧都是用QuickFIX引擎,理论上,双方的协议数据字典文档应该是一致的。数据字典文档为QuickFIX/N会话指定协议的所有定义。当会话包含自定义的字段,组字段,或消息,我们将更改这个FIX规范文档。协议的数据字典文档是在配置文件指定的,
16:31 可乐加冰 阅读(2413) 评论(0)
摘要: 分组(group)是包含一个无序的字段的集合的命名类型。允许在一个循环组里出现重复的数据字段。QuickFIX/N实现了在FIX消息中创建和读取的组信息的功能。1)创建循环分组创建一个循环分组很简单:创建一个分组类的实例,向分组内添加字段,然后把它添加到消息中vartcr=newQuickfiFix.FIX44.TradeCaptureReport();varsidesGrp1=newQuickFix.FIX44.TradeCaptureReport.NoSidesGroup();sidesGrp1.Account=newAccount(&Silvio&);sidesGrp
16:29 可乐加冰 阅读(1856) 评论(1)
摘要: Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要。在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号)、SenderCompID(发送方ID)及TargetCompID(目标方ID)等标识字符组合而成。通常还会加上SessionQualifier来保证会话的唯一性。每个FIX会话可以有很多与它们相关联的配置信息。在编译的时候,有些配置可能还是未知的,因此可以通过类SessionSettings来设置或加载。SessionSettings是一个数据字典,可以随意设置和查询配置信息。SessionS
21:44 可乐加冰 阅读(4546) 评论(1)
摘要: 一、发送消息QuickFIX/N的发送FIX消息的简单示例:FIX44.NewOrderSingle order = new FIX44.NewOrderSingle( new ClOrdID(&1234&), new Symbol(&000001&), new Side(Side.BUY), new TransactTime(DateTime.Now), new OrdType(OrdType.MARKET));Session.SendToTaget(order, sessionID);首先,我们需要学习如何使用会话发送指令消息。1) QuickFIX
09:01 可乐加冰 阅读(5037) 评论(0)
摘要: QuickFix/N简介FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。该协议由FIX protocol, Ltd(FPL)所有并维护。FIX协议的官方网址为http://www.fixprotocol.org/QuickFix引擎(http://www.quickfixengine.org/)一个开源的FIX引擎,其中它有JAVA、C++、C#三个版本的实现。QuickFix/N是实现了FIX协议4.0-5.0版本及其功能的开源软件,100%使用.NET(C#)实现。 QuickFix/N官网下载 http:/
21:31 可乐加冰 阅读(7231) 评论(0)
摘要: 以下是自己在学习PMP时,在网上找到个人觉得最好的资料。自己看过了吴永达的视频及资料,觉得很不错,值得分享。(以下内容不是是原创)。吴永达老师(PMBOK第四版/2008版)的资料分享:资料如下:PMP强化记忆手册(Excel 版本,记录以下内容:PMBOK2008-全部过程活动,项目管理过程组和知识领域表,项目管理详细任务V2,42个过程定义,75个可交付成果,129个工具与技术)PMP强化记忆MP3录音42个过程定义,75个可交付成果,129个工具与技术 录音PMP考试手册(最新版)讲解PMP考试相关的,及其参考的资料图解项目管理(2008版)(V3)以PPT讲义的形式来讲解整个项目管理过
11:53 可乐加冰 阅读(827) 评论(0)
摘要: 今天在调试程序时发现了一个异常 :“类型初始值设定项引发异常” ,第一次发现。关于TypeInitializationException异常,MSDN的解析:由类初始值设定项引发的异常周围的包装引发的异常。 程序里面的异常点是获取单一实例对象是报的异常,百思不得其解。再仔细查一下发现单一实例对象为null,实例化失败了。而这个类的构造函数里面有2个类的实例化,怀疑是构造函数里面抛出了异常。原来是里面两个类的调用了需要连接数据库的操作,而连接数据库操作失败了,进而抛出了异常,但是在单一实例的实例化函数里面确得不到连接数据库的异常。这个问题隐藏得比较深,最终出现这个问题的原因,原来是数据库配...
17:43 可乐加冰 阅读(813) 评论(0)
摘要: 浪费时间的主观原因有:1、做事目标不明确;2、作风拖拉;3、缺乏优先顺序,抓不住重点;4、过于注重细节;5、做事有头无尾;6、没有条理,不简洁,简单的事情复杂化;7、事必躬亲,不懂得授权;8、不会拒绝别人的请求;9、消极思考。一项国际调查表明:一个效率糟糕的人与一个高效的人的工作效率相差可达10倍以上。为了更有效的利用时间,我们应该检讨一下自己的时间管理是否科学,是否把精力花在了错误的事情上。时间管理好了,提高了工作效率,可以避免少加班。
11:41 可乐加冰 阅读(364) 评论(0)}

我要回帖

更多关于 如何配置java环境变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信