public Share GetShareData(InstrumentDataRequest request)
        {
            return _memoryCache.GetOrAdd(request, () =>
            {
                var eodFilePath = GetEodFilePath();

                var fullPath = Path.Combine(eodFilePath, Path.ChangeExtension(request.InstrumentCode, "eod"));

                var parser = new EodParser();
                var share = parser.ParseFile(fullPath);

                share.Aggregate(request.AggregateType, request.AggregateSize, request.IsRelative, DateTime.Now);

                return share;
            });
        }
Exemplo n.º 2
0
        private void CheckFile(string csvPath, string eodPath, string instrumentCode)
        {
            var eod = new EodParser();
            var csv = new CsvParser();

            var eodFile = Path.ChangeExtension(Path.Combine(eodPath, instrumentCode), ".eod");
            var csvFile = Path.ChangeExtension(Path.Combine(csvPath, instrumentCode), ".csv");

            var eodShare = eod.ParseFile(eodFile);
            var csvShare = csv.ParseFile(csvFile);

            var output = new StringBuilder();
            output.AppendLine(FormatAsHex(eodShare.HeaderBytes));
            output.AppendLine();
            output.AppendLine(eodShare.MarketCode);
            output.AppendLine(eodShare.InstrumentCode);
            output.AppendLine(eodShare.CompanyName);
            output.AppendLine(eodShare.Unknown1.ToString("000000"));
            output.AppendLine(eodShare.StartDate.ToString("yyyyMMdd"));
            output.AppendLine(eodShare.EndDate.ToString("yyyyMMdd"));
            output.AppendLine(eodShare.RowCount.ToString("D"));
            output.AppendLine(eodShare.Info1.ToString("000000"));
            output.AppendLine(eodShare.StrikePrice.ToString());
            output.AppendLine(FormatAsHex(eodShare.InfoRemaining));
            output.AppendLine(FormatAs(eodShare.InfoRemaining, "int32", "int32", "int32", "int32", "int32", "int32", "int32"));
            output.AppendLine(eodShare.Details);
            output.AppendLine();

            foreach (var pair in eodShare.Days.Zip(csvShare.Days, (day, dayCsv) => new { Day = day, DayCsv = dayCsv }))
            {
                var day = pair.Day;
                var csvDay = pair.DayCsv;

                Assert(day.Date == csvDay.Date);
                Assert(day.Open == csvDay.Open);
                Assert(day.High == csvDay.High);
                Assert(day.Low == csvDay.Low);
                Assert(day.Close == csvDay.Close);
                Assert(day.Volume == csvDay.Volume);
                Assert(day.OpenInt == csvDay.OpenInt);

                output.Append(day.Row.ToString("0000"));
                output.Append(" | ");
                output.Append(day.ToString());
                output.Append(" | ");
                output.Append(csvDay.ToString());
                output.AppendLine();
            }

            InstrumentCode = eodShare.InstrumentCode;
            Text = output.ToString();
        }