Exemplo n.º 1
0
        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);
            }
        }