private void SendMarketDataRequest(Instrument instrument, bool subscribe, bool trades, bool quotes) { Dictionary <Instrument, MarketDataRecord> obj; if (subscribe) { lock (this.mdRecords) { MarketDataRecord marketDataRecord; if (!this.mdRecords.TryGetValue(instrument, out marketDataRecord)) { marketDataRecord = new MarketDataRecord(instrument); this.mdRecords.Add(instrument, marketDataRecord); } if (trades) { marketDataRecord.Trades = true; } if (quotes) { marketDataRecord.Quotes = true; } return; } } lock (this.mdRecords) { MarketDataRecord marketDataRecord2; if (this.mdRecords.TryGetValue(instrument, out marketDataRecord2)) { if (trades) { marketDataRecord2.Trades = false; } if (quotes) { marketDataRecord2.Quotes = false; } if (!marketDataRecord2.Trades && !marketDataRecord2.Quotes) { this.mdRecords.Remove(instrument); } } } }
private void method_5(object state) { ((ManualResetEvent)state).Set(); while (this.doWork) { var list = new List <MarketDataRecord>(); lock (this.mdRecords) list.AddRange(this.mdRecords.Values.Select(r => new MarketDataRecord(r.Instrument) { Trades = r.Trades, Quotes = r.Quotes })); var random = new Random(); double min = PriceRange.Min; double max = PriceRange.Max; double min2 = SpreadRange.Min; double max2 = SpreadRange.Max; int min3 = SizeRange.Min; int max3 = SizeRange.Max; while (list.Count > 0) { int index = RandomizeInstruments ? random.Next(0, list.Count - 1) : 0; MarketDataRecord marketDataRecord = list[index]; list.RemoveAt(index); if (marketDataRecord.Trades) { double price = Math.Round(random.NextDouble() * (max - min) + min, DecimalDigits); var trade = new Trade(this.framework.Clock.DateTime, base.Id, marketDataRecord.Instrument.Id, price, random.Next(min3, max3)); EmitData(trade, true); } if (marketDataRecord.Quotes) { double num = Math.Round(random.NextDouble() * (max - min) + min, DecimalDigits); double price2 = num + Math.Round(random.NextDouble() * (max2 - min2) + min2, DecimalDigits); var bid = new Bid(this.framework.Clock.DateTime, Id, marketDataRecord.Instrument.Id, num, random.Next(min3, max3)); var ask = new Ask(this.framework.Clock.DateTime, Id, marketDataRecord.Instrument.Id, price2, random.Next(min3, max3)); EmitData(bid, true); EmitData(ask, true); } } Thread.Sleep(this.Delay); } }