使用 QuickFIX/n 获得每个 tick/price 运动的 Bid/Offer 价格的最佳方式是什么
What is the best way to receive the Bid/Offer price for every tick/price movement using QuickFIX/n
我目前使用以下代码来获取当前价格。然后我收到 public void OnMessage(QuickFix.FIX44.MassQuote m, SessionID s)
上的值
QuickFix.FIX44.MarketDataRequest msg = new QuickFix.FIX44.MarketDataRequest();
// Fill message fields
msg.SetField(new MDReqID("001"));
msg.SetField(new SubscriptionRequestType('1'));
msg.SetField(new MarketDepth(0));
msg.SetField(new MDUpdateType(MDUpdateType.FULL_REFRESH));
// Add the MDEntryTypes group
QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup noMDEntryTypes = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
noMDEntryTypes.SetField(new MDEntryType('0'));
msg.AddGroup(noMDEntryTypes);
// Add the NoRelatedSym group
QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup noRelatedSym = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
noRelatedSym.SetField(new Symbol(pair.Insert(3, "/")));
msg.AddGroup(noRelatedSym);
Console.WriteLine("Sending Market Request...");
if(!_priceSession.SendRedundantResendRequests) _priceSession.SendRedundantResendRequests = true;
SendMessagePrice(msg);
但是这个方法对我来说并不理想。我希望能够在更新后立即看到当前价格。
在这个小例子中,我想 Console.WriteLine()
最新的 Bid/Offer 价格一更新到控制台(我想一次只看到一个货币对的价格)。
如果有人能提出更好的方法来更快更轻松地获取数据,那就太好了。
提前致谢。
编辑:来自服务器的响应
8=FIX.4.4|9=378|35=i|34=2|49=XXXXX|52=20200122-10:09:26.537|56=QXXX|117=1|296=1|302=001|295=5|299=0|106=0|134=2000000|135=1000000|188=1.10914|190=1.10916|299=1|106=10|134=1800000|135=1000000|188=1.10914|190=1.10916|299=2|106=11|134=1500000|135=500000|188=1.10914|190=1.10916|299=3|106=6|134=1000000|135=100000|188=1.10914|190=1.10916|299=4|106=6|134=2000000|135=5400000|188=1.10913|190=1.10917|10=113|
编辑:一段时间后,我收到来自对方的消息后出现此错误
收到消息
incoming: 8=FIX.4.4|9=502|35=W|34=7|49=XXXXX|52=20200122-10:09:28.074|56=QXXX|55=EUR/USD|262=001|268=10|269=0|270=1.10914|271=1700000|299=1|106=6|269=0|270=1.10914|271=1000000|299=3|106=11|269=0|270=1.10914|271=1000000|299=0|106=10|269=0|270=1.10913|271=3000000|299=4|106=10|269=0|270=1.10913|271=1500000|299=2|106=9|269=1|270=1.10916|271=1000000|299=0|106=0|269=1|270=1.10916|271=1000000|299=1|106=10|269=1|270=1.10916|271=500000|299=2|106=11|269=1|270=1.10916|271=100000|299=3|106=6|269=1|270=1.10917|271=4500000|299=4|106=13|10=232
event: Message 7 Rejected: Tag appears more than once (Field=106)
由于您使用的是 PrimeXM,因此市场数据更新的传达方式略有不同。他们正在发送 MassQuote
条消息 (msgtype i
),您需要回复 MassQuoteAck
条消息 (msgtype b
)。
记得回显 MassQuoteAck
上的 MassQuote
中的 117/QuoteID
。
这应该会导致价格更新不断出现。我假设 PrimeXM 在发送新更新之前等待每个 ACK。
我目前使用以下代码来获取当前价格。然后我收到 public void OnMessage(QuickFix.FIX44.MassQuote m, SessionID s)
QuickFix.FIX44.MarketDataRequest msg = new QuickFix.FIX44.MarketDataRequest();
// Fill message fields
msg.SetField(new MDReqID("001"));
msg.SetField(new SubscriptionRequestType('1'));
msg.SetField(new MarketDepth(0));
msg.SetField(new MDUpdateType(MDUpdateType.FULL_REFRESH));
// Add the MDEntryTypes group
QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup noMDEntryTypes = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
noMDEntryTypes.SetField(new MDEntryType('0'));
msg.AddGroup(noMDEntryTypes);
// Add the NoRelatedSym group
QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup noRelatedSym = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
noRelatedSym.SetField(new Symbol(pair.Insert(3, "/")));
msg.AddGroup(noRelatedSym);
Console.WriteLine("Sending Market Request...");
if(!_priceSession.SendRedundantResendRequests) _priceSession.SendRedundantResendRequests = true;
SendMessagePrice(msg);
但是这个方法对我来说并不理想。我希望能够在更新后立即看到当前价格。
在这个小例子中,我想 Console.WriteLine()
最新的 Bid/Offer 价格一更新到控制台(我想一次只看到一个货币对的价格)。
如果有人能提出更好的方法来更快更轻松地获取数据,那就太好了。
提前致谢。
编辑:来自服务器的响应
8=FIX.4.4|9=378|35=i|34=2|49=XXXXX|52=20200122-10:09:26.537|56=QXXX|117=1|296=1|302=001|295=5|299=0|106=0|134=2000000|135=1000000|188=1.10914|190=1.10916|299=1|106=10|134=1800000|135=1000000|188=1.10914|190=1.10916|299=2|106=11|134=1500000|135=500000|188=1.10914|190=1.10916|299=3|106=6|134=1000000|135=100000|188=1.10914|190=1.10916|299=4|106=6|134=2000000|135=5400000|188=1.10913|190=1.10917|10=113|
编辑:一段时间后,我收到来自对方的消息后出现此错误
收到消息
incoming: 8=FIX.4.4|9=502|35=W|34=7|49=XXXXX|52=20200122-10:09:28.074|56=QXXX|55=EUR/USD|262=001|268=10|269=0|270=1.10914|271=1700000|299=1|106=6|269=0|270=1.10914|271=1000000|299=3|106=11|269=0|270=1.10914|271=1000000|299=0|106=10|269=0|270=1.10913|271=3000000|299=4|106=10|269=0|270=1.10913|271=1500000|299=2|106=9|269=1|270=1.10916|271=1000000|299=0|106=0|269=1|270=1.10916|271=1000000|299=1|106=10|269=1|270=1.10916|271=500000|299=2|106=11|269=1|270=1.10916|271=100000|299=3|106=6|269=1|270=1.10917|271=4500000|299=4|106=13|10=232
event: Message 7 Rejected: Tag appears more than once (Field=106)
由于您使用的是 PrimeXM,因此市场数据更新的传达方式略有不同。他们正在发送 MassQuote
条消息 (msgtype i
),您需要回复 MassQuoteAck
条消息 (msgtype b
)。
记得回显 MassQuoteAck
上的 MassQuote
中的 117/QuoteID
。
这应该会导致价格更新不断出现。我假设 PrimeXM 在发送新更新之前等待每个 ACK。