Ejemplo n.º 1
0
        public void BuildPositionOnePowerTrade()
        {
            var powerTrade = PowerTrade.Create(SummerDay.DateTime, 24);
            var trades     = new PowerTrades {
                Day = SummerDay, Trades = new[] { powerTrade }
            };
            var actual          = PositionReport.BuildPosition(trades);
            var expectedPeriods = powerTrade.Periods;

            Assert.That(actual.Day, Is.EqualTo(trades.Day));
            CollectionAssert.AreEqual(expectedPeriods, actual.Periods, new PowerPeriodComparer(0.0001));
        }
Ejemplo n.º 2
0
        public void BuildPositionMultiplePowerTrades()
        {
            var powerTrade = CreatePowerTrade(SummerDay, 24);
            var trades     = new PowerTrades {
                Day = SummerDay, Trades = new[] { powerTrade, powerTrade, powerTrade }
            };
            var actual          = PositionReport.BuildPosition(trades);
            var expectedPeriods = powerTrade.Periods.Select(p => new PowerPeriod {
                Period = p.Period, Volume = p.Volume * 3.0
            }).ToArray();

            Assert.That(actual.Day, Is.EqualTo(trades.Day));
            CollectionAssert.AreEqual(expectedPeriods, actual.Periods, new PowerPeriodComparer(0.0001));
        }
Ejemplo n.º 3
0
        public void Start()
        {
            // Build the computation environment.
            _environment = new Environment
            {
                TokenSource         = new CancellationTokenSource(),
                Interval            = TimeSpan.FromMinutes(XmlConvert.ToDouble(ConfigurationManager.AppSettings["schedule-interval-minutes"])),
                PowerService        = new PowerService(),
                GetTrades           = (p, d) => PositionReport.GetTrades(p, d),
                ValidateTrades      = t => PositionReport.ValidateTrades(t),
                BuildPosition       = t => PositionReport.BuildPosition(t),
                BuildReport         = (rs, p) => PositionReport.BuildReport(rs, p),
                WriteReport         = (rs, r) => PositionReport.WriteReport(rs, r),
                PipelineBufferSize  = XmlConvert.ToInt32(ConfigurationManager.AppSettings["pipeline-buffer-size"]),
                ReportSpecification = new ReportSpecification
                {
                    FilenameFormat     = ConfigurationManager.AppSettings["report-filename-format"],
                    FilenameDateFormat = ConfigurationManager.AppSettings["report-filename-date-format"],
                    OutputPath         = ConfigurationManager.AppSettings["report-output-path"],
                    Headers            = ConfigurationManager.AppSettings["report-headers"],
                    LocalTimeFormat    = ConfigurationManager.AppSettings["report-localtime-format"]
                }
            };

            // Create the position report pipelined computation.
            _pipeline = Pipeline.Create(LogManager.GetLogger("Pipeline"), _environment);

            // Run the position report pipelined computation at the specified interval until a cancellation request is received.
            _subscription =
                Observable.Generate(0,
                                    i => !_environment.TokenSource.IsCancellationRequested,
                                    i => i + 1,
                                    i => i,
                                    i => i == 0 ? TimeSpan.Zero : _environment.Interval)
                .Timestamp()
                .Select(x => x.Timestamp)
                .Subscribe(_pipeline.AsObserver());
        }