private void HandleTraded(object sender, TradedEventArgs e) { var book = (OrderBook)sender; SendTradeUpdate(e.Security, e.Time, e.Fills); SendBookUpdate(e); SendVolumeUpdate(e, book); }
private void SendVolumeUpdate(TradedEventArgs e, OrderBook book) { var volumeUpdate = new IncrementalUpdate(MatchEventIndicator.LastVolume, e.Time); volumeUpdate.MDEntries.Add(MarketDataUpdateDataBlock.VolumeNew(e.Security, incrementalSeqNums[e.Security], book.SessionVolume)); incrementalSeqNums[e.Security]++; incrementalServer.Send(volumeUpdate); }
private void SendOpenInterestUpdate(TradedEventArgs e, OrderBook book) { var interestUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); interestUpdate.MDEntries.Add(MarketDataUpdateDataBlock.OpenInterestNew(e.Security, incrementalSeqNums[e.Security], book.PreviousSessionOpenInterest, book.PreviousSessionDate)); incrementalSeqNums[e.Security]++; incrementalServer.Send(interestUpdate); }
private void SendOpenPriceUpdate(TradedEventArgs e, OrderBook book) { var tradeHighUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); tradeHighUpdate.MDEntries.Add(MarketDataUpdateDataBlock.OpenPriceNew(e.Security, incrementalSeqNums[e.Security], book.SessionOpenPrice.Value, false)); incrementalSeqNums[e.Security]++; incrementalServer.Send(tradeHighUpdate); }
private void SendSettlementUpdate(TradedEventArgs e, OrderBook book) { var settlementUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); settlementUpdate.MDEntries.Add(MarketDataUpdateDataBlock.SettlePriceNew(e.Security, incrementalSeqNums[e.Security], book.PreviousSessionSettlementPrice, SettlementPriceType.Final, book.PreviousSessionDate)); incrementalSeqNums[e.Security]++; incrementalServer.Send(settlementUpdate); }
private void SendBookUpdate(TradedEventArgs e) { var bookUpdate = new IncrementalUpdate(MatchEventIndicator.LastRealQuote, e.Time); foreach (var bookLevelUpdate in GenerateBookUpdateDataBlock(e.Security)) { bookLevelUpdate.RptSeq = incrementalSeqNums[e.Security]; incrementalSeqNums[e.Security]++; bookUpdate.MDEntries.Add(bookLevelUpdate); } incrementalServer.Send(bookUpdate); }
public void OrderTraded() { var sec = new Security() { Id = 1, Type = SecurityType.Future, Group = "GC", Product = "GC", Contract = "GCZ6" }; var book = new OrderBook(sec); book.SetStatus(SecurityTradingStatus.Open); TradedEventArgs firedArgs = null; book.Traded += (o, e) => { firedArgs = e; }; book.CreateLimitOrder(1, TimeInForce.Day, null, Side.Buy, 100, 2); book.CreateLimitOrder(3, TimeInForce.Day, null, Side.Sell, 100, 5); Debug.Assert(firedArgs != null); //Debug.Assert(firedArgs.Price == 100); //Debug.Assert(firedArgs.AggressorSide == Side.Sell); //Debug.Assert(firedArgs.Quantity == 5); }
private void SendRangeUpdate(TradedEventArgs e, OrderBook book) { var tradeHighUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); tradeHighUpdate.MDEntries.Add(MarketDataUpdateDataBlock.TradeHighLowNew(e.Security, incrementalSeqNums[e.Security], true, book.SessionMaxTradePrice.Value)); incrementalSeqNums[e.Security]++; incrementalServer.Send(tradeHighUpdate); var tradeLowUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); tradeLowUpdate.MDEntries.Add(MarketDataUpdateDataBlock.TradeHighLowNew(e.Security, incrementalSeqNums[e.Security], true, book.SessionMinTradePrice.Value)); incrementalSeqNums[e.Security]++; incrementalServer.Send(tradeLowUpdate); var highBidUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); highBidUpdate.MDEntries.Add(MarketDataUpdateDataBlock.TradeHighBidLowAskNew(e.Security, incrementalSeqNums[e.Security], Side.Buy, book.SessionMaxBidPrice.Value)); incrementalSeqNums[e.Security]++; incrementalServer.Send(highBidUpdate); var lowAskUpdate = new IncrementalUpdate(MatchEventIndicator.None, e.Time); lowAskUpdate.MDEntries.Add(MarketDataUpdateDataBlock.TradeHighBidLowAskNew(e.Security, incrementalSeqNums[e.Security], Side.Sell, book.SessionMinAskPrice.Value)); incrementalSeqNums[e.Security]++; incrementalServer.Send(lowAskUpdate); }