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官网下载 添加链接描述
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的事件调用。
事件回调说明
应用回调
FromApp -每个应用级别的消息将通过该方法处理,如委托指令,执行报告,证券信息以及市场数据。
FromAdmin -每个管理级别的消息将通过该方法处理,如心跳,登录以及注销。
OnCreate中 - 每当一个新的会话被创建,该方法被调用。
OnLogon - 当登录操作成功完成时,该方法被调用。
OnLogout - 当会话断开时触发,包括对方主动请求logout或者网络连接断开都会引发该事件。
ToApp -所有应用级别的消息在发送出去之前,都会调用该方法。如果需要在每个发出的消息当中添加一个标签(Tag),在该方法是实现该需求最好的位置。
ToAdmin -所有发出的管理级别消息在发送出去之前,都会调用该方法。
Acceptor 和 Initiator
Initiator:作为客户端,当我们要连接到对方的应用时,使用Initiator。
Acceptor :作为服务端,当我们要提供应用服务供对方连接时,使用Acceptor。
实现Application 接口,然后实例化一个Acceptor:
using QuickFix;
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即可。
MessageStore会存储FIX会话级别消息的消息传出记录。我们可以通过实现MessageStoreFactory接口,来自定义或扩展我们的消息存储。
日志记录已经有了两个的实现:FileLog、ScreenLog,其中文件存储的日志记录器已经可以满足一般的要求。当然,我们也可以通过实现LogFactory接口,来自定义实现或扩展我们的日志存储。
原文地址:https://www.cnblogs.com/jinglelin/archive/2012/04/26/2470978.html