protected async Task <Submarket> GenerateSubmarket(string marketId, int marketNo, int submarketNo, int numInstruments, Random rand)
        {
            var submarket = new Submarket()
            {
                Id       = $"Submarket:{marketNo}-{submarketNo}",
                MarketId = marketId,
                Name     = $"Submarket{marketNo}-{submarketNo}"
            };

            if (_simulationReceiver != null)
            {
                await _simulationReceiver.SubmarketAdded(submarket.ToStream(StreamOperation.Insert));
            }

            for (int instrumentNo = 0; instrumentNo < numInstruments; instrumentNo++)
            {
                var instrument = await GenerateInstrument(submarket.Id, marketNo, submarketNo, instrumentNo, rand);

                submarket.InstrumentsById[instrument.Id]     = instrument;
                submarket.InstrumentsByName[instrument.Name] = instrument.Id;
                submarket.NumInstruments++;
            }

            return(submarket);
        }
        protected Instrument GetRandomInstrument(Random rand, int marketNo, int submarketNo, Submarket submarket)
        {
            var instrumentId = GetRandomInstrumentId(rand, marketNo, submarketNo, submarket);

            if (!String.IsNullOrEmpty(instrumentId))
            {
                Instrument instrument = null;
                return(submarket.InstrumentsById.TryGetValue(instrumentId, out instrument) ? instrument : null);
            }
            else
            {
                return(null);
            }
        }
        protected string GetRandomInstrumentId(Random rand, int marketNo, int submarketNo, Submarket submarket)
        {
            int    numInstruments = submarket.NumInstruments;
            var    slotSeed       = rand.Next(41);
            int    slot           = (slotSeed > 17 ? 0 : slotSeed > 5 ? 1 : slotSeed > 1 ? 2 : 3);
            int    instrumentNo   = rand.Next(numInstruments / 4) + (slot * numInstruments / 4);
            string instrumentName = "Instrument" + marketNo.ToString() + "-" + submarketNo.ToString() + "-" + instrumentNo.ToString();

            // Find the instrument
            string instrumentId = null;

            return(submarket.InstrumentsByName.TryGetValue(instrumentName, out instrumentId) ? instrumentId : null);
        }