You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Quickfix/n 4.2实现多腿订单?解决重复标签覆盖问题

Quickfix/n 4.2 实现多腿订单(NEW_ORDER_MULTILEG)解决方案

核心方案:用Group类封装重复标签组

Quickfix/n的Group类专门用于处理重复标签场景,虽然4.2版本没有官方预制的多腿订单模板,但可以手动定义腿信息组,无需修改或重建库。


步骤1:定义LegGroup类

继承Group类,指定组的触发标签(选LegSymbol的标签号600),并注册组内需要重复的标签:

public class LegGroup : Group
{
    // FIX 4.2对应标签号
    private const int TagLegSymbol = 600;
    private const int TagLegCFICode = 601;
    private const int TagLegRatioQty = 602;
    private const int TagLegSide = 604;
    private const int TagLegStrikePrice = 605;
    private const int TagLegMaturityDate = 606;

    public LegGroup() : base(TagLegSymbol, new int[] { 
        TagLegCFICode, TagLegRatioQty, TagLegSide, TagLegStrikePrice, TagLegMaturityDate 
    }) { }

    // 封装标签读写方法
    public void SetLegSymbol(string value) => SetString(TagLegSymbol, value);
    public void SetLegCFICode(string value) => SetString(TagLegCFICode, value);
    public void SetLegRatioQty(decimal value) => SetDecimal(TagLegRatioQty, value);
    public void SetLegSide(char value) => SetChar(TagLegSide, value);
    public void SetLegStrikePrice(decimal value) => SetDecimal(TagLegStrikePrice, value);
    public void SetLegMaturityDate(string value) => SetString(TagLegMaturityDate, value);
}

步骤2:构建多腿订单消息

创建消息实例并设置类型为AB,然后添加多个LegGroup实例:

private const string LEG_EXPIRY_FORMAT = "yyyyMMdd";

// 初始化订单消息
var multiLegOrder = new Message();
multiLegOrder.Header.SetField(new MsgType("AB"));

// 添加第一条腿
var leg1 = new LegGroup();
leg1.SetLegSymbol(symbol1);
leg1.SetLegCFICode(futureOption1.OptionRight == OptionRight.Call ? "OCXXXX" : "OPXXXX");
leg1.SetLegRatioQty(ml1.Quantity);
leg1.SetLegSide(ml1.TradeDirection.ToFixSide());
leg1.SetLegStrikePrice(futureOption1.StrikePrice);
leg1.SetLegMaturityDate(futureOption1.ExpiryDate.ToString(LEG_EXPIRY_FORMAT));
multiLegOrder.AddGroup(leg1);

// 添加第二条腿
var leg2 = new LegGroup();
leg2.SetLegSymbol(symbol2);
leg2.SetLegCFICode(futureOption2.OptionRight == OptionRight.Call ? "OCXXXX" : "OPXXXX");
leg2.SetLegRatioQty(ml2.Quantity);
leg2.SetLegSide(ml2.TradeDirection.ToFixSide());
leg2.SetLegStrikePrice(futureOption2.StrikePrice);
leg2.SetLegMaturityDate(futureOption2.ExpiryDate.ToString(LEG_EXPIRY_FORMAT));
multiLegOrder.AddGroup(leg2);

// 补充订单必填字段(示例)
multiLegOrder.SetField(new ClOrdID("ORD-2024-001"));
multiLegOrder.SetField(new HandlInst('1'));
// ... 按需添加其他必填字段

关键说明

  • Group构造函数第一个参数是组触发标签(必须是组内第一个出现的标签),第二个参数是组内剩余标签的列表。
  • 调用AddGroup()方法添加多个组后,Quickfix/n会自动按FIX协议生成重复标签序列,不会出现值覆盖问题。
  • 该方案完全基于现有库扩展,无需修改源码。

内容的提问来源于stack exchange,提问作者E.Benedos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:12:45