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); } }
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); }
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); }
/// <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); }