public void ShouldConvertRetrievedDataToUppercase()
        {
            // given
            var storageBrokerMock  = new Mock <IStorageBroker>();
            var returnedDataFiller =
                new Filler <string>();
            List <string> returnedData =
                returnedDataFiller.Create(10).ToList();

            List <string> expectedResult =
                returnedData.Select(item => item.ToUpper())
                .ToList();

            storageBrokerMock.Setup(broker => broker.GetAllData())
            .Returns(returnedData);

            // when
            var dataProcessorService =
                new DataProcessorService(storageBrokerMock.Object);

            List <string> actualResult = dataProcessorService.ProcessData();

            // then
            storageBrokerMock.Verify(broker =>
                                     broker.GetAllData(),
                                     Times.Once,
                                     "Storage broker should be called at least once for data processing.");

            actualResult.Should().BeEquivalentTo(
                expectedResult,
                because: "Returned lists should be both uppercase.");
        }
示例#2
0
        public void ShouldReturnUpperCaseData()
        {
            // given
            var           storageBrokerMock = new Mock <IStorageBroker>();
            var           storageDataFiller = new Filler <string>();
            List <string> storageData       = storageDataFiller.Create(10).ToList();

            storageBrokerMock.Setup(broker => broker.GetAllData())
            .Returns(storageData);

            List <string> expectedResult = storageData.Select(data => data.ToUpper()).ToList();

            // when
            var           dataProcessorService = new DataProcessorService(storageBrokerMock.Object);
            List <string> actualResult         = dataProcessorService.ProcessData();

            // then
            // Verify broker was called Only once during test
            storageBrokerMock.Verify(broker =>
                                     broker.GetAllData(),
                                     Times.Once,
                                     "Storage broker should be called at least once for data processing");

            actualResult.Should().BeEquivalentTo(
                expectedResult,
                because: "Returned items in list should be uppercase.");
        }
示例#3
0
        private List <AnnDataPoint> Normalize(IList <AnnDataPoint> data)
        {
            var result          = new List <AnnDataPoint>();
            var numberOfInputs  = data.First().Inputs.Length;
            var numberOfOutputs = data.First().Outputs.Length;

            foreach (var annPoint in data)
            {
                result.Add(new AnnDataPoint
                {
                    Date    = annPoint.Date,
                    Inputs  = Enumerable.Range(0, numberOfInputs).Select(i => DataProcessorService.Normalize(annPoint.Inputs[i], TrainingMeansInput[i], TrainingStdDevsInput[i])).ToArray(),
                    Outputs = Enumerable.Range(0, numberOfOutputs).Select(i => DataProcessorService.Normalize(annPoint.Outputs[i], TrainingMeansOutput[i], TrainingStdDevsOutput[i])).ToArray()
                });
            }

            return(result);
        }
示例#4
0
        protected override IList <AnnDataPoint> GetRawAnnDataPoints(Stock stock, HistoricalData historicalData)
        {
            var result = new List <AnnDataPoint>();

            lock (Locker)
            {
                if (!data.ContainsKey(historicalData))
                {
                    data.Add(historicalData, Data.GetData(stock, DownloaderService, historicalData));
                }
            }

            var movingAverageFast = DataProcessorService.CalculateMovingAverage(data[historicalData].Quotes, Settings.MovingAverageCloseFast);
            var cci  = DataProcessorService.CalculateCci(data[historicalData].Quotes, Settings.CCI);
            var rsi  = DataProcessorService.CalculateRsi(data[historicalData].Quotes, Settings.RSI);
            var macD = DataProcessorService.CalculateMacd(data[historicalData].Quotes, Settings.MacdFast, Settings.MacdSlow, Settings.MacdSignal);
            var atr  = DataProcessorService.CalculateAtr(data[historicalData].Quotes, Settings.Atr);
            var ema  = DataProcessorService.CalculateEMA(data[historicalData].Quotes, Settings.Ema);
            var obv  = DataProcessorService.CalculateObv(data[historicalData].Quotes, Settings.Obv);
            var crsi = DataProcessorService.CalculateConnorsRsi(data[historicalData].Quotes, Settings.ConnorsRsi);
            var pmo  = DataProcessorService.CalculatePmo(data[historicalData].Quotes, Settings.Pmo);
            var roc  = DataProcessorService.CalculateRoc(data[historicalData].Quotes, Settings.Roc);

            int fwdDays       = Settings.FwdDays;
            int yesterdayStep = 1;

            for (int i = 0; i < historicalData.Quotes.Values.Count; i++)
            {
                var fwdDate = i + fwdDays >= historicalData.Quotes.Values.Count
                    ? historicalData.Quotes.Values.Count - 1
                    : i + fwdDays;

                var yesterdayIndex = i - yesterdayStep >= 0 ? i - yesterdayStep : 0;
                var yesterday      = historicalData.Quotes.Values[yesterdayIndex];
                var today          = historicalData.Quotes.Values[i];

                var future = historicalData.Quotes.Values[fwdDate];

                var percentageChange = (future.Close - today.Close) / today.Close * 100d;

                var annDataPoint = new AnnDataPoint
                {
                    Date   = today.Date,
                    Inputs = new[]
                    {
                        today.Close,
                        today.High,
                        today.Volume,
                        Compare(today.Close, yesterday.Close),
                        Compare(today.High, yesterday.High),
                        Compare(today.Volume, yesterday.Volume),
                        (double)movingAverageFast.Single(x => x.Date.Date == today.Date.Date).Sma.GetValueOrDefault(),
                        (double)ema.Single(x => x.Date.Date == today.Date.Date).Ema.GetValueOrDefault(),
                        (double)cci.Single(x => x.Date.Date == today.Date.Date).Cci.GetValueOrDefault(),
                        (double)rsi.Single(x => x.Date.Date == today.Date.Date).Rsi.GetValueOrDefault(),
                        (double)atr.Single(x => x.Date.Date == today.Date.Date).Atrp.GetValueOrDefault(),
                        (double)macD.Single(x => x.Date.Date == today.Date.Date).Macd.GetValueOrDefault(),
                        (double)obv.Single(x => x.Date.Date == today.Date.Date).Obv,
                        (double)crsi.Single(x => x.Date.Date == today.Date.Date).ConnorsRsi.GetValueOrDefault(),
                        (double)pmo.Single(x => x.Date.Date == today.Date.Date).Pmo.GetValueOrDefault(),
                        (double)roc.Single(x => x.Date.Date == today.Date.Date).Roc.GetValueOrDefault()
                    },
                    Outputs = new[]
                    {
                        percentageChange > Settings.PercentageChangeHigh ? 1d :
                        percentageChange < Settings.PercentageChangeLow ? -1d : 0d
                    }
                };

                result.Add(annDataPoint);
            }

            return(result);
        }