Пример #1
0
        public override bool Start()
        {
            bool res = base.Start();

            if (!res)
            {
                return(false);
            }

            RsiIndicator = new RsiIndicator()
            {
                Ticker = Ticker, Length = Length
            };
            MacdIndicator = new MacdIndicator()
            {
                Ticker = Ticker, Length = Length
            };
            StochIndicator = new StochasticIndicator()
            {
                Ticker = Ticker, Length = Length
            };

            RsiIndicator.Calculate();
            MacdIndicator.Calculate();
            StochIndicator.Calculate();

            TelegramBot.Default.SendNotification("SingleNotificationStrategy: " + Name + ": started at " + DateTime.Now.ToString("g"), ChatId);
            return(true);
        }
        public void TestItemAdded()
        {
            Ticker ticker = new Binance.BinanceTicker(Binance.BinanceExchange.Default);

            ticker.CandleStickData = GetCandleSticks(100);

            MacdIndicator macd = new MacdIndicator()
            {
                Ticker = ticker, Source = IndicatorSource.Close, Length = 9
            };
            StochasticIndicator stoch = new StochasticIndicator()
            {
                Ticker = ticker, Source = IndicatorSource.Close, Length = 9
            };

            macd.Calculate();
            stoch.Calculate();

            for (int i = 0; i < 10; i++)
            {
                CandleStickData date = GetCandleStick(DateTime.Now.AddMinutes(1));
                macd.OnAddValue();
                stoch.OnAddValue();
            }

            Assert.AreEqual(110, macd.Result.Count);
            Assert.AreEqual(110, macd.FastEmaIndicator.Result.Count);
            Assert.AreEqual(110, macd.SlowEmaIndicator.Result.Count);
            Assert.AreEqual(110, macd.SignalMaIndicator.Result.Count);

            Assert.AreEqual(110, stoch.MinIndicator.Result.Count);
            Assert.AreEqual(110, stoch.MaxIndicator.Result.Count);
            Assert.AreEqual(110, stoch.Result.Count);
        }
Пример #3
0
        public void SignalLineTest()
        {
            var indicator               = new MacdIndicator();
            var actual9DaysSignalLine   = indicator.Calculate(MacdData.HistoricalData);
            var expected9DaysSignalLine = MacdData.Signal9DaysResults;

            Assert.Equal(expected9DaysSignalLine.Count, actual9DaysSignalLine.Count);
            for (var i = 0; i < expected9DaysSignalLine.Count; i++)
            {
                var doubleLineIndicator = (DoubleLineIndicatorValue)actual9DaysSignalLine[i];
                Assert.Equal(expected9DaysSignalLine[i].Date, doubleLineIndicator.Date);
                Assert.Equal(expected9DaysSignalLine[i].Value, doubleLineIndicator.SecondLineValue, MacdData.DataPrecision);
            }
        }
Пример #4
0
        private IndicatorBase CreateMACDIndicator()
        {
            MacdIndicator indicator = new MacdIndicator();

            indicator.ShortPeriod    = 9;
            indicator.LongPeriod     = 12;
            indicator.SignalPeriod   = 6;
            indicator.CategoryMember = "Date";
            indicator.ValueMember    = "Close";
            indicator.DataSource     = viewModel.Data;

            ConfigureAxis(-2, 2, 1);

            return(indicator);
        }
Пример #5
0
        public override bool Start()
        {
            bool res = base.Start();

            if (!res)
            {
                return(false);
            }

            MacdIndicator = new MacdIndicator()
            {
                Ticker = Ticker, Length = SignalLength, FastLength = FastEmaLength, SlowLength = SlowEmaLength
            };
            MacdIndicator.Calculate();

            TelegramBot.Default.SendNotification(Name + "[" + GetType().Name + "]" + ": started at " + DateTime.Now.ToString("g"), ChatId);
            return(true);
        }
        public void TestCalculate()
        {
            Ticker ticker = new Binance.BinanceTicker(Binance.BinanceExchange.Default);

            ticker.CandleStickData = GetCandleSticks(100);

            MacdIndicator macd = new MacdIndicator()
            {
                Ticker = ticker, Source = IndicatorSource.Close, Length = 9
            };
            StochasticIndicator stoch = new StochasticIndicator()
            {
                Ticker = ticker, Source = IndicatorSource.Close, Length = 9
            };

            macd.Calculate();
            stoch.Calculate();

            Assert.AreEqual(100, macd.Result.Count);
            Assert.AreEqual(100, macd.FastEmaIndicator.Result.Count);
            Assert.AreEqual(100, macd.SlowEmaIndicator.Result.Count);
            Assert.AreEqual(100, macd.SignalMaIndicator.Result.Count);

            Assert.AreEqual(100, stoch.MinIndicator.Result.Count);
            Assert.AreEqual(100, stoch.MaxIndicator.Result.Count);
            Assert.AreEqual(100, stoch.MaIndicator.Result.Count);
            Assert.AreEqual(100, stoch.Result.Count);

            macd.Calculate();
            stoch.Calculate();

            Assert.AreEqual(100, macd.Result.Count);
            Assert.AreEqual(100, macd.FastEmaIndicator.Result.Count);
            Assert.AreEqual(100, macd.SlowEmaIndicator.Result.Count);
            Assert.AreEqual(100, macd.SignalMaIndicator.Result.Count);

            Assert.AreEqual(100, stoch.MinIndicator.Result.Count);
            Assert.AreEqual(100, stoch.MaxIndicator.Result.Count);
            Assert.AreEqual(100, stoch.Result.Count);
        }
Пример #7
0
        private IndicatorBase CreateIndicator(Indicators indicatorToAdd)
        {
            switch (indicatorToAdd)
            {
            case Indicators.CommodityChannelIndexIndicator:
                var cciIndicator = new CommodityChannelIndexIndicator();
                cciIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                cciIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                cciIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                cciIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                cciIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                cciIndicator.Period          = 10;
                cciIndicator.Stroke          = Color.Green;
                cciIndicator.StrokeThickness = 1;
                return(cciIndicator);

            case Indicators.AverageTrueRangeIndicator:
                var artIndicator = new AverageTrueRangeIndicator();
                artIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                artIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                artIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                artIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                artIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                artIndicator.Period          = 14;
                artIndicator.Stroke          = Color.Green;
                artIndicator.StrokeThickness = 1;
                return(artIndicator);

            case Indicators.TrueRangeIndicator:
                var trIndicator = new TrueRangeIndicator();
                trIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                trIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                trIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                trIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                trIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                trIndicator.Stroke          = Color.Green;
                trIndicator.StrokeThickness = 1;
                return(trIndicator);

            case Indicators.MacdIndicator:
                var macdIndicator = new MacdIndicator();
                macdIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                macdIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                macdIndicator.ValueBinding    = new PropertyNameDataPointBinding("Close");
                macdIndicator.ShortPeriod     = 2;
                macdIndicator.SignalPeriod    = 6;
                macdIndicator.LongPeriod      = 9;
                macdIndicator.Stroke          = Color.Green;
                macdIndicator.SignalStroke    = Color.Red;
                macdIndicator.StrokeThickness = 1;
                return(macdIndicator);

            case Indicators.RelativeMomentumIndexIndicator:
                var rmiIndicator = new RelativeMomentumIndexIndicator();
                rmiIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                rmiIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                rmiIndicator.ValueBinding    = new PropertyNameDataPointBinding("Close");
                rmiIndicator.Stroke          = Color.Green;
                rmiIndicator.Period          = 12;
                rmiIndicator.StrokeThickness = 1;
                return(rmiIndicator);

            case Indicators.RateOfChangeIndicator:
                var rocIndicator = new RateOfChangeIndicator();
                rocIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                rocIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                rocIndicator.ValueBinding    = new PropertyNameDataPointBinding("Close");
                rocIndicator.Stroke          = Color.Green;
                rocIndicator.Period          = 8;
                rocIndicator.StrokeThickness = 1;
                return(rocIndicator);

            case Indicators.RelativeStrengthIndexIndicator:
                var rsiIndicator = new RelativeStrengthIndexIndicator();
                rsiIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                rsiIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                rsiIndicator.ValueBinding    = new PropertyNameDataPointBinding("Close");
                rsiIndicator.Stroke          = Color.Green;
                rsiIndicator.Period          = 8;
                rsiIndicator.StrokeThickness = 1;
                return(rsiIndicator);

            case Indicators.StochasticFastIndicator:
                var sfIndicator = new StochasticFastIndicator();
                sfIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                sfIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                sfIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                sfIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                sfIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                sfIndicator.MainPeriod      = 14;
                sfIndicator.SignalPeriod    = 3;
                sfIndicator.SignalStroke    = Color.Red;
                sfIndicator.Stroke          = Color.Green;
                sfIndicator.StrokeThickness = 1;
                return(sfIndicator);

            case Indicators.StochasticSlowIndicator:
                var ssIndicator = new StochasticSlowIndicator();
                ssIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                ssIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                ssIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                ssIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                ssIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                ssIndicator.MainPeriod      = 14;
                ssIndicator.SlowingPeriod   = 2;
                ssIndicator.SignalPeriod    = 3;
                ssIndicator.SignalStroke    = Color.Red;
                ssIndicator.Stroke          = Color.Green;
                ssIndicator.StrokeThickness = 1;
                return(ssIndicator);

            case Indicators.TrixIndicator:
                var trixIndicator = new TrixIndicator();
                trixIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                trixIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                trixIndicator.ValueBinding    = new PropertyNameDataPointBinding("Close");
                trixIndicator.Stroke          = Color.Green;
                trixIndicator.Period          = 15;
                trixIndicator.StrokeThickness = 1;
                return(trixIndicator);

            case Indicators.UltimateOscillatorIndicator:
                var uoIndicator = new UltimateOscillatorIndicator();
                uoIndicator.SetBinding(CommodityChannelIndexIndicator.ItemsSourceProperty, new Binding("SeriesData"));
                uoIndicator.CategoryBinding = new PropertyNameDataPointBinding("DateCategory");
                uoIndicator.LowBinding      = new PropertyNameDataPointBinding("Low");
                uoIndicator.HighBinding     = new PropertyNameDataPointBinding("High");
                uoIndicator.CloseBinding    = new PropertyNameDataPointBinding("Close");
                uoIndicator.Period          = 5;
                uoIndicator.Period2         = 8;
                uoIndicator.Period3         = 10;
                uoIndicator.Stroke          = Color.Green;
                uoIndicator.StrokeThickness = 1;
                return(uoIndicator);

            default:
                return(null);
            }
        }