Beispiel #1
0
        public static CMEBulletinTableRow ParseLine(string line)
        {
            try
            {
                var parts = line.Split(new[] { ' ', (char)9, '+' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 14)
                {
                    return(null);
                }

                var row = new CMEBulletinTableRow {
                    Strike = ParseValue(parts[0])
                };
                if (!row.Strike.HasValue)
                {
                    return(null);
                }

                row.OpenRange          = ParseValue(parts[1]);
                row.High               = ParseValue(parts[2]);
                row.Low                = ParseValue(parts[3]);
                row.ClosingRange       = ParseValue(parts[4]);
                row.SettPrice          = ParseValue(parts[5]);
                row.PtChange           = ParseValue(parts[6]);
                row.Delta              = ParseValue(parts[7]);
                row.Excercises         = ParseValue(parts[8]);
                row.Volume             = ParseValue(parts[9]);
                row.OpenInterest       = ParseValue(parts[10]);
                row.OpenInterestChange = ParseValue(parts[11]);
                row.ContractHigh       = ParseValue(parts[12]);
                row.ContractLow        = ParseValue(parts[13]);
                return(row);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("CMEBulletinTableRow.ParseLine: \"{0}\", строка [{1}]", ex.Message, line);
                return(null);
            }
        }
        public static CMEBulletinTableRow ParseLine(string line)
        {
            try
            {
                var parts = line.Split(new[] {' ', (char) 9, '+'}, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 14) return null;

                var row = new CMEBulletinTableRow {Strike = ParseValue(parts[0])};
                if (!row.Strike.HasValue) return null;

                row.OpenRange = ParseValue(parts[1]);
                row.High = ParseValue(parts[2]);
                row.Low = ParseValue(parts[3]);
                row.ClosingRange = ParseValue(parts[4]);
                row.SettPrice = ParseValue(parts[5]);
                row.PtChange = ParseValue(parts[6]);
                row.Delta = ParseValue(parts[7]);
                row.Excercises = ParseValue(parts[8]);
                row.Volume = ParseValue(parts[9]);
                row.OpenInterest = ParseValue(parts[10]);
                row.OpenInterestChange = ParseValue(parts[11]);
                row.ContractHigh = ParseValue(parts[12]);
                row.ContractLow = ParseValue(parts[13]);
                return row;
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("CMEBulletinTableRow.ParseLine: \"{0}\", строка [{1}]", ex.Message, line);
                return null;
            }
        }
Beispiel #3
0
        private bool ParseTxtDocument(string fileName, CMETickerInfoCollection bulletinInfo)
        {
            // получить секцию из имени файла
            int sectionNum;

            if (!GetSectionNumFromFileName(fileName, out sectionNum))
            {
                return(false);
            }
            SectionNum = sectionNum.ToString();

            // получить набор таблиц (экспирация - опцион - тип опциона)
            CMEBulletinTable curTable      = null;
            bool             docDateParsed = false;

            CMETickerInfo        curTicker    = null;
            CMEBulletinReference curTickerRef = null;

            using (var sr = new StreamReader(fileName, Encoding.Unicode))
            {
                while (!sr.EndOfStream)
                {
                    // парсинг даты
                    var line = sr.ReadLine();
                    try
                    {
                        if (!docDateParsed)
                        {
                            docDateParsed = IsDateRow(line);
                            continue;
                        }

                        // строка содержит месяц экспирации?
                        line = line.Trim(' ', (char)9);
                        var parts = line.Split(new[] { ' ', (char)9 }, StringSplitOptions.RemoveEmptyEntries);
                        if (parts.Length == 0)
                        {
                            continue;
                        }
                        var em = ExpirationMonth.Parse(parts[0]);
                        if (em != null)
                        {
                            if (curTicker != null && curTickerRef != null)
                            {
                                // создать таблицу
                                if (curTable != null)
                                {
                                    tables.Add(curTable);
                                }
                                curTable = new CMEBulletinTable
                                {
                                    ExpMonth           = em,
                                    OptStyle           = curTickerRef.OptionStyle,
                                    OptType            = curTickerRef.OptionType,
                                    SpotSymbol         = curTicker.SpotSymbol,
                                    StrikeToBaseRatio  = curTicker.StrikeToBaseRatio,
                                    PremiumToBaseRatio = curTicker.PremiumToBaseRatio,
                                    InvertRate         = curTicker.InvertRate
                                };
                            }
                            continue;
                        }

                        // строка содержит заголовок?
                        // EURO FX C (EU)
                        // BRIT PND-P EU
                        CMETickerInfo        tick;
                        CMEBulletinReference tickRef;
                        if (bulletinInfo.FindTicker(parts, out tick, out tickRef, SectionNum))
                        {
                            if (futuresInfo != null)
                            {
                                if (futuresInfo.Ticker == null)
                                {
                                    futuresInfo.Ticker = tick;
                                }
                            }
                            curTicker    = tick;
                            curTickerRef = tickRef;
                            continue;
                        }

                        var row = CMEBulletinTableRow.ParseLine(line);
                        if (row != null && curTable != null)
                        {
                            curTable.rows.Add(row);
                        }
                        if (row == null) // строка содержит данные по фьючам?
                        {
                            var summ = CheckFutureInfoLine(parts);
                            if (summ != null)
                            {
                                futuresInfo = summ;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.ErrorFormat("CMEDocumentParser.ParseTxtDocument parse line: \"{0}\", line:[{1}]",
                                           ex.Message, line);
                    }
                }
            }
            try
            {
                CMEBulletinTable.MergeSameTables(tables);
            }
            catch (Exception ex)
            {
                Logger.Error("CMEDocumentParser.ParseTxtDocument MergeSameTables", ex);
            }

            return(true);
        }