コード例 #1
0
        public void RegressionChannelComputesCorrectly()
        {
            var period    = 20;
            var indicator = new RegressionChannel(period, 2);
            var stdDev    = new StandardDeviation(period);
            var time      = DateTime.Now;

            var prices   = LeastSquaresMovingAverageTest.prices;
            var expected = LeastSquaresMovingAverageTest.expected;

            var actual = new decimal[prices.Length];

            for (int i = 0; i < prices.Length; i++)
            {
                indicator.Update(time, prices[i]);
                stdDev.Update(time, prices[i]);
                actual[i] = Math.Round(indicator.Current.Value, 4);
                time      = time.AddMinutes(1);
            }
            Assert.AreEqual(expected, actual);

            var expectedUpper = indicator.Current + stdDev.Current * 2;

            Assert.AreEqual(expectedUpper, indicator.UpperChannel);
            var expectedLower = indicator.Current - stdDev.Current * 2;

            Assert.AreEqual(expectedLower, indicator.LowerChannel);
        }
        public void WarmsUpProperly()
        {
            var indicator = new RegressionChannel(20, 2);
            var period    = ((IIndicatorWarmUpPeriodProvider)indicator).WarmUpPeriod;
            var prices    = LeastSquaresMovingAverageTest.Prices;
            var time      = DateTime.Now;

            for (var i = 0; i < period; i++)
            {
                indicator.Update(time.AddMinutes(i), prices[i]);
                Assert.AreEqual(i == period - 1, indicator.IsReady);
            }
        }
コード例 #3
0
ファイル: RegressionChannelTest.cs プロジェクト: tedvz/Lean
        public void ResetsProperly()
        {
            const int period    = 10;
            var       indicator = new RegressionChannel(period, 2);
            var       time      = DateTime.Now;

            for (var i = 0; i < period + 1; i++)
            {
                indicator.Update(time.AddMinutes(i), 1m);
            }
            Assert.IsTrue(indicator.IsReady, "Regression Channel ready");
            indicator.Reset();
            TestHelper.AssertIndicatorIsInDefaultState(indicator);
        }
コード例 #4
0
        public void LowerUpperChannelUpdateOnce()
        {
            var regressionChannel       = new RegressionChannel(2, 2d);
            var lowerChannelUpdateCount = 0;
            var upperChannelUpdateCount = 0;

            regressionChannel.LowerChannel.Updated += (sender, updated) => { lowerChannelUpdateCount++; };
            regressionChannel.UpperChannel.Updated += (sender, updated) => { upperChannelUpdateCount++; };

            Assert.AreEqual(0, lowerChannelUpdateCount);
            Assert.AreEqual(0, upperChannelUpdateCount);
            regressionChannel.Update(DateTime.Today, 1d);

            Assert.AreEqual(1, lowerChannelUpdateCount);
            Assert.AreEqual(1, upperChannelUpdateCount);
        }
コード例 #5
0
        /// <summary>
        /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
        /// </summary>
        public override void Initialize()
        {
            SetStartDate(2009, 1, 1);  //Set Start Date
            SetEndDate(2015, 1, 1);    //Set End Date
            SetCash(100000);           //Set Strategy Cash
            // Find more symbols here: http://quantconnect.com/data
            var equity = AddEquity(_spy, Resolution.Minute);

            _holdings = equity.Holdings;
            _rc       = RC(_spy, 30, 2, Resolution.Daily);

            var stockPlot = new Chart("Trade Plot");

            stockPlot.AddSeries(new Series("Buy", SeriesType.Scatter, 0));
            stockPlot.AddSeries(new Series("Sell", SeriesType.Scatter, 0));
            stockPlot.AddSeries(new Series("UpperChannel", SeriesType.Line, 0));
            stockPlot.AddSeries(new Series("LowerChannel", SeriesType.Line, 0));
            stockPlot.AddSeries(new Series("Regression", SeriesType.Line, 0));
            AddChart(stockPlot);
        }