c# - 如何将字符串转换为 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 很陌生。任何帮助将不胜感激。
解决方案
您为什么要尝试将其转换为字符串并返回?
这些都是设置字段值的正确方法:
snapshot.MDEntryType = new MDEntryType('0');
snapshot.MDEntryType = new MDEntryType(MDEntryType.BID); //enum instead of char
snapshot.Set(new MDEntryType('0')) //can also use enum
这都在文档中。
推荐阅读
- python - Python - 如何使我的其他程序仅在 if 语句一致时执行?
- python - 将单个行从多个 CSV 文件附加到另一个 CSV
- oracle - 包含节符号的 Oracle 排序字符串 §
- spring - 将“DefaultCookieSerializer”注释为“@Component”时,将“SameSite”cookie 值设置为“none”不起作用
- google-chrome-extension - 如何通过在扩展程序中触发 url 使用客户端 ID 从谷歌获取访问令牌
- kubernetes - Google Kubernetes Engine 防火墙规则上的 nginx 入口控制器
- amazon-web-services - 是否可以在 AWS 中标记 SSH 密钥对?
- feature-engineering - trans_primitives 和 agg_primitives 中使用的选项列表
- .net-core - .NET Core 应用程序中的 Sonarqube 规则 S4823“使用命令行参数是安全敏感的”
- python - 在python中多处理大量数据