首页 > 解决方案 > 如何将字符串转换为 FIXMessage?

问题描述

我正在尝试从 QuickFix44.MarketDataSnapshotFullRefresh 消息(类型 W)中修改价格值。

我已经成功地将原始 FIXMessage 转换为字符串类型。但是,在我修改值后,有什么方法可以将它从字符串恢复为 FIXMessage 吗?

这是我到目前为止所做的代码:

public void alterMarkup(QuickFix44.MarketDataSnapshotFullRefresh snapshot) 
{
    // convert FIXMessage to string type
    String message = System.Convert.ToString(snapshot);

    // retrieve the value to modify
    String a = message.Substring(message.LastIndexOf("269=0") + 10);
    String bid_value = a.Substring(0, a.IndexOf("\u0001"));

    String b = message.Substring(message.LastIndexOf("269=1") + 10);
    String ask_value = b.Substring(0, b.IndexOf("\u0001"));

    // alter the price
    Decimal deci_bid = System.Convert.ToDecimal(bid_value) + 0.1m;

    // NoMDEntries Group
    QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries group = new QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries();         

    group.setField(new QuickFix.MDEntryType(System.Convert.ToChar(QuickFix.MDEntryType.BID)));
    group.setField(new QuickFix.MDEntryPx(System.Convert.ToDouble(deci_bid)));
    group.setField(new QuickFix.MDEntrySize(0));
    group.setField(new QuickFix.MDEntryDate());
    group.setField(new QuickFix.MDEntryTime(DateTime.UtcNow));
    group.setField(new QuickFix.TradingSessionID());
    group.setField(new QuickFix.TradingSessionSubID());
    group.setField(new QuickFix.QuoteCondition(System.Convert.ToString(QuickFix.QuoteCondition.OPEN_ACTIVE)));
    group.setField(new QuickFix.MDEntryOriginator());
    group.setField(new QuickFix.QuoteEntryID());
    group.setField(new QuickFix.QuoteType(QuickFix.QuoteType.TRADEABLE)); 

    Console.WriteLine(snapshot);

    snapshot.replaceGroup(System.Convert.ToUInt32(deci_bid), group.field(), group);

    // print out from second time to compare
    Console.WriteLine(snapshot);
}

我打印出消息并在https://fixparser.targetcompid.com/进行翻译。

这是原始消息: 原始信息

这是修改后的消息: 修改后的消息

从图像中,我们可以注意到字段的值必须一一插入。如果没有,它只会在那里显示 null 。

PS有没有办法只更改 MDEntryPx(针对 BID 和 OFFER)而不是更改整个组。

我对 QuickFIX 很陌生。任何帮助将不胜感激。

标签: c#type-conversionquickfixfix-protocol

解决方案


您为什么要尝试将其转换为字符串并返回?

这些都是设置字段值的正确方法:

snapshot.MDEntryType = new MDEntryType('0');
snapshot.MDEntryType = new MDEntryType(MDEntryType.BID); //enum instead of char
snapshot.Set(new MDEntryType('0')) //can also use enum

这都在文档中。


推荐阅读