private void ProcessSecurityLookupMessage(SecurityLookupMessage lookupMsg) { if (lookupMsg.GetValue <bool>("FromSite")) { using (var client = new WebClient()) { var rows = client.DownloadString("http://www.lmax.com/doc/LMAX-Instruments.csv").Split("\n"); foreach (var row in rows.Skip(1)) { var cells = row.Split(','); var secCode = cells[2]; // иногда файл с багами, и там есть пустая строчка с запятыми if (cells[2].IsEmpty()) { continue; } var secName = cells[0]; SecurityTypes securityType; var volumeStep = 0m; if (_indexCodes.Contains(secCode, StringComparer.InvariantCultureIgnoreCase)) { securityType = SecurityTypes.Index; } else if ( secName.ContainsIgnoreCase("brent") || secName.ContainsIgnoreCase("gasoil") || secName.ContainsIgnoreCase("crude") ) { securityType = SecurityTypes.Commodity; } else { securityType = SecurityTypes.Currency; if (!secCode.StartsWith("XA", StringComparison.InvariantCultureIgnoreCase)) { volumeStep = 0.1m; } } SendOutMessage(new SecurityMessage { SecurityId = new SecurityId { SecurityCode = secCode, BoardCode = ExchangeBoard.Lmax.Code, Native = cells[1].To <long>(), }, SecurityType = securityType, VolumeStep = volumeStep, Name = secName, Multiplier = cells[3].To <decimal?>(), PriceStep = cells[4].To <decimal>(), //security.MinStepPrice = cells[5].To<decimal>(), Currency = cells[8].To <CurrencyTypes>(), ExpiryDate = cells[7].IsEmpty() ? (DateTime?)null : cells[7].ToDateTime("dd/MM/yyyy HH:mm"), OriginalTransactionId = lookupMsg.TransactionId }); } } } else { SearchSecurities(lookupMsg.SecurityId.SecurityCode, lookupMsg.TransactionId, new List <Instrument>(), true); } }