如何使用QuickFixN库构建并发送FIX恢复请求(U2)?
使用QuickFixN构建并发送U2(OutOfBandRecoveryRequest)消息
由于QuickFixN未内置U2类型的OutOfBandRecoveryRequest消息,你需要通过自定义消息类+注册消息类型的方式来实现:
1. 创建自定义消息类
继承QuickFix的Message类,手动定义消息的必填/可选字段:
using QuickFix; using QuickFix.Fields; public class OutOfBandRecoveryRequest : Message { public OutOfBandRecoveryRequest() : base(new MsgType("U2")) { // 初始化必填字段,保证消息结构合规 SetField(new StartDate()); SetField(new EndDate()); } // 带必填参数的构造函数,简化实例化流程 public OutOfBandRecoveryRequest(StartDate startDate, EndDate endDate) : base(new MsgType("U2")) { SetField(startDate); SetField(endDate); } // 可选字段的快捷设置方法(按需添加) public void SetSecurityExchange(SecurityExchange value) => SetField(value); public void SetExDestination(ExDestination value) => SetField(value); }
2. 注册消息类型
在FIX会话初始化阶段,将U2消息类型与自定义类绑定,确保QuickFixN能正确识别和处理该消息:
// 初始化自定义消息工厂 MessageFactory messageFactory = new DefaultMessageFactory(); messageFactory.AddCreator("U2", () => new OutOfBandRecoveryRequest()); // 加载会话配置并关联自定义工厂 SessionSettings settings = new SessionSettings("your_session_config.cfg"); MessageStoreFactory storeFactory = new FileStoreFactory(settings); LogFactory logFactory = new FileLogFactory(settings); SessionFactory sessionFactory = new SessionFactory(settings, storeFactory, logFactory, messageFactory);
3. 构建并发送消息
实例化自定义消息类,填充字段后通过Session.SendToTarget发送:
// 构造消息(日期格式需符合FIX协议要求:YYYYMMDD) var startDate = new StartDate("20240101"); var endDate = new EndDate("20240131"); var recoveryRequest = new OutOfBandRecoveryRequest(startDate, endDate); // 可选:设置交易所、目标场所等非必填字段 recoveryRequest.SetSecurityExchange(new SecurityExchange("NYSE")); recoveryRequest.SetExDestination(new ExDestination("NYSE")); // 发送到指定会话 Session.SendToTarget(recoveryRequest, "YOUR_SESSION_ID");
注意事项
StartDate和EndDate的格式必须严格遵循FIX协议规范(通常为YYYYMMDD);- 发送时指定的会话ID需与配置文件中定义的一致;
- 若需接收该消息的响应,接收端也需完成对应的消息类型注册。
内容的提问来源于stack exchange,提问作者Nexus23
相关产品推荐
相关产品推荐

