/// <summary> /// Initializes a new instance of the <see cref="FxcmFixMessageHandler"/> class. /// </summary> /// <param name="container">The componentry container.</param> /// <param name="accountId">The account identifier for the handler.</param> /// <param name="accountCurrency">The account currency.</param> /// <param name="useBrokerTimestampForTicks">The flag to use the brokers timestamp for ticks.</param> public FxcmFixMessageHandler( IComponentryContainer container, AccountId accountId, Currency accountCurrency, bool useBrokerTimestampForTicks = false) : base(container) { this.accountId = accountId; this.accountCurrency = accountCurrency; this.symbolCache = new ObjectCache <string, Symbol>(Symbol.FromString); this.orderIdIndex = new Dictionary <string, OrderId>(); // Improved performance by reusing MarketDataIncrementalRefresh classes this.mdBidGroup = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); this.mdAskGroup = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); if (useBrokerTimestampForTicks) { // FXCM market data timestamp has a lower resolution than .TimeNow() this.tickTimestampProvider = this.GetMarketDataTimestamp; } else { this.tickTimestampProvider = this.TimeNow; } }
public void OnMessage(MarketDataIncrementalRefresh msg, SessionID sessionID) { FIX44XMLParser parser = new FIX44XMLParser(); Console.WriteLine("==========Header::=========="); Console.WriteLine(parser.getFieldName(Tags.BeginString.ToString()) + ":: " + msg.Header.GetString(Tags.BeginString)); Console.WriteLine(parser.getFieldName(Tags.BodyLength.ToString()) + ":: " + msg.Header.GetString(Tags.BodyLength)); Console.WriteLine(parser.getFieldName(Tags.MsgType.ToString()) + ":: MarketDataIncrementalRefresh (" + msg.Header.GetString(Tags.MsgType) + ")"); Console.WriteLine(parser.getFieldName(Tags.MsgSeqNum.ToString()) + ":: " + msg.Header.GetString(Tags.MsgSeqNum)); Console.WriteLine(parser.getFieldName(Tags.SenderCompID.ToString()) + ":: " + msg.Header.GetString(Tags.SenderCompID)); Console.WriteLine(parser.getFieldName(Tags.SendingTime.ToString()) + ":: " + msg.Header.GetString(Tags.SendingTime)); Console.WriteLine(parser.getFieldName(Tags.TargetCompID.ToString()) + ":: " + msg.Header.GetString(Tags.TargetCompID)); Console.WriteLine("==========Body:: =========="); Console.WriteLine(parser.getFieldName(Tags.NoMDEntries.ToString()) + ":: " + msg.GetString(Tags.NoMDEntries)); MarketDataIncrementalRefresh.NoMDEntriesGroup g0 = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); for (int grpIndex = 1; grpIndex <= msg.GetInt(Tags.NoMDEntries); grpIndex += 1) { Console.WriteLine("---------- ----------"); msg.GetGroup(grpIndex, g0); // Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString())+":: "+g0.GetString(Tags.MDUpdateAction)); Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString()) + ":: " + parser.getFieldName(Tags.MDUpdateAction.ToString(), g0.GetString(Tags.MDUpdateAction).ToString()) + "(" + g0.GetString(Tags.MDUpdateAction) + ")" ); Console.WriteLine(parser.getFieldName(Tags.MDEntryType.ToString()) + ":: " + parser.getFieldName(Tags.MDEntryType.ToString(), g0.GetString(Tags.MDEntryType).ToString()) + "(" + g0.GetString(Tags.MDEntryType) + ")" ); try { Console.WriteLine(parser.getFieldName(Tags.MDEntryPx.ToString()) + ":: " + g0.GetString(Tags.MDEntryPx)); } catch (Exception ex) { Console.WriteLine(parser.getFieldName(Tags.MDEntrySize.ToString()) + ":: " + g0.GetString(Tags.MDEntrySize)); } Console.WriteLine(parser.getFieldName(Tags.MDEntryDate.ToString()) + ":: " + g0.GetString(Tags.MDEntryDate)); Console.WriteLine(parser.getFieldName(Tags.MDEntryTime.ToString()) + ":: " + g0.GetString(Tags.MDEntryTime)); } Console.WriteLine("==========Trailer:: =========="); Console.WriteLine(parser.getFieldName(Tags.CheckSum.ToString()) + ":: " + msg.Trailer.GetString(Tags.CheckSum)); }
public void OnMessage(MarketDataIncrementalRefresh msg, SessionID sessionID) { FIX44XMLParser parser = new FIX44XMLParser(); Console.WriteLine("==========Header::=========="); Console.WriteLine(parser.getFieldName(Tags.BeginString.ToString()) + ":: " + msg.Header.GetString(Tags.BeginString)); Console.WriteLine(parser.getFieldName(Tags.BodyLength.ToString()) + ":: " + msg.Header.GetString(Tags.BodyLength)); Console.WriteLine(parser.getFieldName(Tags.MsgType.ToString()) + ":: MarketDataIncrementalRefresh (" + msg.Header.GetString(Tags.MsgType) + ")"); Console.WriteLine(parser.getFieldName(Tags.MsgSeqNum.ToString()) + ":: " + msg.Header.GetString(Tags.MsgSeqNum)); Console.WriteLine(parser.getFieldName(Tags.SenderCompID.ToString()) + ":: " + msg.Header.GetString(Tags.SenderCompID)); Console.WriteLine(parser.getFieldName(Tags.SendingTime.ToString()) + ":: " + msg.Header.GetString(Tags.SendingTime)); Console.WriteLine(parser.getFieldName(Tags.TargetCompID.ToString()) + ":: " + msg.Header.GetString(Tags.TargetCompID)); Console.WriteLine("==========Body:: =========="); Console.WriteLine(parser.getFieldName(Tags.NoMDEntries.ToString()) + ":: " + msg.GetString(Tags.NoMDEntries)); MarketDataIncrementalRefresh.NoMDEntriesGroup g0 = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); for (int grpIndex = 1; grpIndex <= msg.GetInt(Tags.NoMDEntries); grpIndex += 1) { Console.WriteLine("---------- ----------"); msg.GetGroup(grpIndex, g0); // Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString())+":: "+g0.GetString(Tags.MDUpdateAction)); Console.WriteLine(parser.getFieldName(Tags.MDUpdateAction.ToString()) + ":: " + parser.getFieldName(Tags.MDUpdateAction.ToString(), g0.GetString(Tags.MDUpdateAction).ToString()) + "(" + g0.GetString(Tags.MDUpdateAction) + ")" ); Console.WriteLine(parser.getFieldName(Tags.MDEntryType.ToString()) + ":: " + parser.getFieldName(Tags.MDEntryType.ToString(), g0.GetString(Tags.MDEntryType).ToString()) + "(" + g0.GetString(Tags.MDEntryType) + ")" ); try { Console.WriteLine(parser.getFieldName(Tags.MDEntryPx.ToString()) + ":: " + g0.GetString(Tags.MDEntryPx)); } catch (Exception ex) { Console.WriteLine(parser.getFieldName(Tags.MDEntrySize.ToString()) + ":: " + g0.GetString(Tags.MDEntrySize)); } Console.WriteLine(parser.getFieldName(Tags.MDEntryDate.ToString()) + ":: " + g0.GetString(Tags.MDEntryDate)); Console.WriteLine(parser.getFieldName(Tags.MDEntryTime.ToString()) + ":: " + g0.GetString(Tags.MDEntryTime)); } Console.WriteLine("==========Trailer:: =========="); Console.WriteLine(parser.getFieldName(Tags.CheckSum.ToString()) + ":: " + msg.Trailer.GetString(Tags.CheckSum)); }
public void OnMessage(MarketDataIncrementalRefresh message, SessionID session) { var noMdEntries = message.NoMDEntries; var listOfMdEntries = noMdEntries.getValue(); //message.GetGroup(1, noMdEntries); var group = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); Group gr = message.GetGroup(1, group); string sym = message.MDReqID.getValue(); var price = new MarketPrice(); for (int i = 1; i <= listOfMdEntries; i++) { group = (MarketDataIncrementalRefresh.NoMDEntriesGroup)message.GetGroup(i, group); price.Symbol = group.Symbol.getValue(); MDEntryType mdentrytype = group.MDEntryType; if (mdentrytype.getValue() == '0') //bid { decimal px = group.MDEntryPx.getValue(); price.Bid = px; } else if (mdentrytype.getValue() == '1') //offer { decimal px = group.MDEntryPx.getValue(); price.Offer = px; } price.TimeStamp = group.MDEntryTime.ToString(); } if (OnMarketDataIncrementalRefresh != null) { OnMarketDataIncrementalRefresh(price); } }
public void OnMessage(MarketDataIncrementalRefresh message, SessionID session) { var noMdEntries = message.NoMDEntries; var listOfMdEntries = noMdEntries.getValue(); //message.GetGroup(1, noMdEntries); var group = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); Group gr = message.GetGroup(1, group); string sym = message.MDReqID.getValue(); var price = new MarketPrice(); for (int i = 1; i <= listOfMdEntries; i++) { group = (MarketDataIncrementalRefresh.NoMDEntriesGroup)message.GetGroup(i, group); price.Symbol = group.Symbol.getValue(); MDEntryType mdentrytype = group.MDEntryType; if (mdentrytype.getValue() == '0') //bid { decimal px = group.MDEntryPx.getValue(); price.Bid = px; } else if (mdentrytype.getValue() == '1') //offer { decimal px = group.MDEntryPx.getValue(); price.Offer = px; } price.TimeStamp = group.MDEntryTime.ToString(); } if (OnMarketDataIncrementalRefresh != null) { OnMarketDataIncrementalRefresh(price); } }