public AggregatedData AgregateTrades(DateTime date, SessionInfo sessionInfo, IEnumerable <Trade> trades)
        {
            AggregatedData ad = new AggregatedData();

            ad.TradingDate  = date;
            ad.SessionStart = sessionInfo.SessionStart;

            foreach (var t in trades)
            {
                foreach (var p in t.Periods)
                {
                    ad.AddVolumeToPaticularPeriod(p.Period, p.Volume);
                }
            }
            return(ad);
        }
        public CsvData CreateCsvData(AggregatedData data)
        {
            CsvData report = new CsvData(new[] { "Local Time", "Volume" });

            DateTime utcSessionStart = data.TradingDate.AddDays(-1).Add(data.SessionStart);

            for (int i = 0; i < data.Volumes.Length; i++)
            {
                DateTime localTime = utcSessionStart.Add(TimeSpan.FromHours(i)).ToLocalTime();

                string time   = localTime.TimeOfDay.ToString(@"hh\:mm");
                string volume = data.Volumes[i].ToString(CultureInfo.InvariantCulture);

                report.AddRow(new[] { time, volume });
            }
            return(report);
        }
        /// <summary>
        /// Creates report and save it to file
        /// </summary>
        /// <param name="utcTime"></param>
        /// <returns>File name of report</returns>
        public string MakeReport(DateTime utcTime)
        {
            DataAcquisition da          = new DataAcquisition();
            DateTime        tradingDate = da.GetTradingDay(utcTime, Config.SessionInfo);
            AggregatedData  ad          = da.GetAggregatedTrades(tradingDate, Config.SessionInfo);

            ReportBuilder rb = new ReportBuilder();

            Directory.CreateDirectory(Config.ReportingDirrectory);
            string  reportFileName = Path.Combine(Config.ReportingDirrectory, rb.GetCsvReportFileName(utcTime));
            CsvData csvData        = rb.CreateCsvData(ad);

            CsvWriter w = new CsvWriter();

            w.Write(reportFileName, csvData);

            return(reportFileName);
        }