我正在开发具有 FixAcceptor 和 FixInitiator 的示例应用程序。我正在从发起方发送 MarketDataRequest 消息,并从 Acceptor 发送 MarketDataIncrementalRefresh 消息,但收到 NoMDEntries 消息的 FieldNotFound 异常错误。我很确定我从接受者那里发送了错误的信息,但找不到。如果有任何机构可以,请提供帮助。
这是修复启动器消息
发送 MarketDataRequest
字符串符号=“MSFT”;//发送 MarketData 请求 QuickFix42.MarketDataRequest marketDataRequest = new QuickFix42.MarketDataRequest();
marketDataRequest.set(new MDReqID("1"));
marketDataRequest.set(new SubscriptionRequestType('1'));
marketDataRequest.set(new MarketDepth(1));
marketDataRequest.set(new MDUpdateType(1));
marketDataRequest.set(new AggregatedBook(true));
marketDataRequest.set(new NoMDEntryTypes(2));
QuickFix42.MarketDataRequest.NoMDEntryTypes group = new QuickFix42.MarketDataRequest.NoMDEntryTypes();
group.set(new MDEntryType('0'));
marketDataRequest.addGroup(group);
group.set(new MDEntryType('1'));
marketDataRequest.addGroup(group);
marketDataRequest.set(new NoRelatedSym(1));
QuickFix42.MarketDataRequest.NoRelatedSym group2 = new QuickFix42.MarketDataRequest.NoRelatedSym();
group2.set(new Symbol(symbol));
marketDataRequest.addGroup(group2);
//Send message
Session.sendToTarget(marketDataRequest, sessionID);
FixAcceptor 代码
公共覆盖无效 onMessage(QuickFix42.MarketDataRequest 消息,SessionID 会话){ var relatedSymbol = new QuickFix42.MarketDataRequest.NoRelatedSym();
Group g = message.getGroup(1, relatedSymbol);
string symbol=relatedSymbol.get(new Symbol()).getValue();
Console.WriteLine("Got marketdata request for Symbol {0}", symbol );
// Thread.Sleep(1000);
QuickFix42.MarketDataIncrementalRefresh prices = new QuickFix42.MarketDataIncrementalRefresh();
prices.set(new MDReqID("1"));
var mp = new QuickFix42.MarketDataIncrementalRefresh.NoMDEntries();
mp.set(new MDUpdateAction('0'));//tag 279
//price type
mp.set(new MDEntryType('0'));//tag:269
mp.set(new MDEntrySize(2345));
//Symbol
mp.set(new Symbol(symbol));
//Price of the Market Data Entry.
mp.set(new MDEntryPx(36.45d));
prices.addGroup(mp);
try
{
Session.sendToTarget(prices, session);
}
catch (SessionNotFound) { }
}
在 FixAcceptor 中接收 MarketDataIncrementalRefresh 消息
public override void onMessage(MarketDataIncrementalRefresh message, SessionID session)
{
try
{
System.Console.WriteLine("MarketDataIncrementalRefresh : " + message.ToString());
MDReqID mdreqid = new MDReqID();
NoMDEntries nomdentries = new NoMDEntries();
QuickFix42.MarketDataIncrementalRefresh.NoMDEntries group
= new QuickFix42.MarketDataIncrementalRefresh.NoMDEntries();
MDUpdateAction mdupdateaction = new MDUpdateAction();
DeleteReason deletereason = new DeleteReason();
MDEntryType mdentrytype = new MDEntryType();
MDEntryID mdentryid = new MDEntryID();
Symbol symbol = new Symbol();
MDEntryOriginator mdentryoriginator = new MDEntryOriginator();
MDEntryPx mdentrypx = new MDEntryPx();
Currency currency = new Currency();
MDEntrySize mdentrysize = new MDEntrySize();
ExpireDate expiredate = new ExpireDate();
ExpireTime expiretime = new ExpireTime();
NumberOfOrders numberoforders = new NumberOfOrders();
MDEntryPositionNo mdentrypositionno = new MDEntryPositionNo();
Text text = new Text();
//message.get(mdreqid);
message.get(nomdentries);
int list = nomdentries.getValue();
if (message.isSetNoMDEntries())
for (uint i = 0; i < list; i++)
{
message.getGroup(i + 1, group);
//group.get(mdupdateaction);
//if (mdupdateaction.getValue() == '2')
// Console.WriteLine("Enter");
////group.get(deletereason);
//group.get(mdentrytype);
group.get(mdentryid);
group.get(symbol);
//group.get(mdentryoriginator);
if (mdupdateaction.getValue() == '0')
group.get(mdentrypx);
//group.get(currency);
//if (mdupdateaction.getValue() == '0')
// group.get(mdentrysize);
//group.get(expiredate);
//group.get(expiretime);
//if (mdupdateaction.getValue() == '0')
// group.get(numberoforders);
//group.get(mdentrypositionno);
//group.get(text);
//if (mdupdateaction.getValue() == '0')
//{
// for (int x = 0; x < mainapp.MDlist.Length; x++)
// {
// if (symbol.ToString() == mainapp.MDlist[x].Symbol)
// {
// if (mdentrytype.getValue() == '0')
// mainapp.MDlist[x].Bid = (float)mdentrypx.getValue();
// else if (mdentrytype.getValue() == '1')
// mainapp.MDlist[x].Ask = (float)mdentrypx.getValue();
// }
// }
//}
}
Console.WriteLine("Got Symbol {0} Price {1}", symbol.getValue(), mdentrypx.getValue());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
但在出现错误 FieldNotFoundException
message.getGroup(i + 1, group);