public void WickedNoFallingRenko() { var consolidator = new RenkoConsolidator(1.0m, RenkoType.Wicked); var renkos = new List <RenkoBar>(); consolidator.DataConsolidated += (sender, renko) => renkos.Add(renko); var tickOn1 = new DateTime(2016, 1, 1, 17, 0, 0, 0); var tickOn2 = new DateTime(2016, 1, 1, 17, 0, 0, 1); consolidator.Update(new IndicatorDataPoint(tickOn1, 10.0m)); consolidator.Update(new IndicatorDataPoint(tickOn2, 9.1m)); Assert.AreEqual(renkos.Count, 0); var openRenko = consolidator.OpenRenkoBar; Assert.AreEqual(openRenko.Open, 10.0m); Assert.AreEqual(openRenko.High, 10.0m); Assert.AreEqual(openRenko.Low, 9.1m); Assert.AreEqual(openRenko.Close, 9.1m); }
public void CyclesUpAndDown() { RenkoBar bar = null; int count = 0; int rcount = 0; var consolidator = new RenkoConsolidator(1m, x => x.Value, x => 0); consolidator.DataConsolidated += (sender, consolidated) => { rcount++; bar = consolidated; }; var reference = DateTime.Today; // opens at 0 consolidator.Update(new IndicatorDataPoint(reference, 0)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(1), .5m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(2), 1m)); Assert.IsNotNull(bar); Assert.AreEqual(0m, bar.Open); Assert.AreEqual(1m, bar.Close); Assert.AreEqual(0, bar.Volume); Assert.AreEqual(1m, bar.High); Assert.AreEqual(0m, bar.Low); Assert.IsTrue(bar.IsClosed); Assert.AreEqual(reference, bar.Start); Assert.AreEqual(reference.AddSeconds(2), bar.EndTime); bar = null; consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(3), 1.5m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(4), 1m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(5), .5m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(6), 0m)); Assert.IsNotNull(bar); // ReSharper disable HeuristicUnreachableCode - ReSharper doesn't realiz this can be set via the event handler Assert.AreEqual(1m, bar.Open); Assert.AreEqual(0m, bar.Close); Assert.AreEqual(0, bar.Volume); Assert.AreEqual(1.5m, bar.High); Assert.AreEqual(0m, bar.Low); Assert.IsTrue(bar.IsClosed); Assert.AreEqual(reference.AddSeconds(2), bar.Start); Assert.AreEqual(reference.AddSeconds(6), bar.EndTime); bar = null; consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(7), -0.5m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(8), -0.9999999m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(9), -0.01m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(10), 0.25m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(9), 0.75m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(10), 0.9999999m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(10), 0.25m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(9), -0.25m)); Assert.IsNull(bar); consolidator.Update(new IndicatorDataPoint(reference.AddSeconds(10), -1m)); Assert.IsNotNull(bar); Assert.AreEqual(0m, bar.Open); Assert.AreEqual(-1m, bar.Close); Assert.AreEqual(0, bar.Volume); Assert.AreEqual(0.9999999m, bar.High); Assert.AreEqual(-1m, bar.Low); Assert.IsTrue(bar.IsClosed); Assert.AreEqual(reference.AddSeconds(6), bar.Start); Assert.AreEqual(reference.AddSeconds(10), bar.EndTime); // ReSharper restore HeuristicUnreachableCode }
public void WickedTwoRisingThenThreeFallingGapRenkos() { var consolidator = new RenkoConsolidator(1.0m, RenkoType.Wicked); var renkos = new List <RenkoBar>(); consolidator.DataConsolidated += (sender, renko) => renkos.Add(renko); var tickOn1 = new DateTime(2016, 1, 1, 17, 0, 0, 0); var tickOn2 = new DateTime(2016, 1, 1, 17, 0, 0, 1); consolidator.Update(new IndicatorDataPoint(tickOn1, 10.0m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 9.6m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 10.5m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 11.1m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 11.0m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 10.7m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 11.6m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 12.3m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 12.3m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 12.4m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 11.5m)); consolidator.Update(new IndicatorDataPoint(tickOn1, 7.9m)); Assert.AreEqual(renkos.Count, 5); Assert.AreEqual(renkos[0].Open, 10.0); Assert.AreEqual(renkos[0].High, 11.0); Assert.AreEqual(renkos[0].Low, 9.6); Assert.AreEqual(renkos[0].Close, 11.0); Assert.AreEqual(renkos[0].Direction, BarDirection.Rising); Assert.AreEqual(renkos[0].Spread, 1.0); Assert.AreEqual(renkos[1].Open, 11.0); Assert.AreEqual(renkos[1].High, 12.0); Assert.AreEqual(renkos[1].Low, 10.7); Assert.AreEqual(renkos[1].Close, 12.0); Assert.AreEqual(renkos[1].Direction, BarDirection.Rising); Assert.AreEqual(renkos[1].Spread, 1.0); Assert.AreEqual(renkos[2].Open, 11.0); Assert.AreEqual(renkos[2].High, 12.4); Assert.AreEqual(renkos[2].Low, 10.0); Assert.AreEqual(renkos[2].Close, 10.0); Assert.AreEqual(renkos[2].Direction, BarDirection.Falling); Assert.AreEqual(renkos[2].Spread, 1.0); Assert.AreEqual(renkos[3].Open, 10.0); Assert.AreEqual(renkos[3].High, 10.0); Assert.AreEqual(renkos[3].Low, 9.0); Assert.AreEqual(renkos[3].Close, 9.0); Assert.AreEqual(renkos[3].Direction, BarDirection.Falling); Assert.AreEqual(renkos[3].Spread, 1.0); Assert.AreEqual(renkos[4].Open, 9.0); Assert.AreEqual(renkos[4].High, 9.0); Assert.AreEqual(renkos[4].Low, 8.0); Assert.AreEqual(renkos[4].Close, 8.0); Assert.AreEqual(renkos[4].Direction, BarDirection.Falling); Assert.AreEqual(renkos[4].Spread, 1.0); var openRenko = consolidator.OpenRenkoBar; Assert.AreEqual(openRenko.Open, 8.0); Assert.AreEqual(openRenko.High, 8.0); Assert.AreEqual(openRenko.Low, 7.9); Assert.AreEqual(openRenko.Close, 7.9); }
public void ConsistentRenkos() { // Test Renko bar consistency amongst three consolidators starting at different times var time = new DateTime(2016, 1, 1); var testValues = new List <decimal> { 1.38687m, 1.38688m, 1.38687m, 1.38686m, 1.38685m, 1.38683m, 1.38682m, 1.38682m, 1.38684m, 1.38682m, 1.38682m, 1.38680m, 1.38681m, 1.38686m, 1.38688m, 1.38688m, 1.38690m, 1.38690m, 1.38691m, 1.38692m, 1.38694m, 1.38695m, 1.38697m, 1.38697m, 1.38700m, 1.38699m, 1.38699m, 1.38699m, 1.38698m, 1.38699m, 1.38697m, 1.38698m, 1.38698m, 1.38697m, 1.38698m, 1.38698m, 1.38697m, 1.38697m, 1.38700m, 1.38702m, 1.38701m, 1.38699m, 1.38697m, 1.38698m, 1.38696m, 1.38698m, 1.38697m, 1.38695m, 1.38695m, 1.38696m, 1.38693m, 1.38692m, 1.38693m, 1.38693m, 1.38692m, 1.38693m, 1.38692m, 1.38690m, 1.38686m, 1.38685m, 1.38687m, 1.38686m, 1.38686m, 1.38686m, 1.38686m, 1.38685m, 1.38684m, 1.38678m, 1.38679m, 1.38680m, 1.38680m, 1.38681m, 1.38685m, 1.38685m, 1.38683m, 1.38682m, 1.38682m, 1.38683m, 1.38682m, 1.38683m, 1.38682m, 1.38681m, 1.38680m, 1.38681m, 1.38681m, 1.38681m, 1.38682m, 1.38680m, 1.38679m, 1.38678m, 1.38675m, 1.38678m, 1.38678m, 1.38678m, 1.38682m, 1.38681m, 1.38682m, 1.38680m, 1.38682m, 1.38683m, 1.38685m, 1.38683m, 1.38683m, 1.38684m, 1.38683m, 1.38683m, 1.38684m, 1.38685m, 1.38684m, 1.38683m, 1.38686m, 1.38685m, 1.38685m, 1.38684m, 1.38685m, 1.38682m, 1.38684m, 1.38683m, 1.38682m, 1.38683m, 1.38685m, 1.38685m, 1.38685m, 1.38683m, 1.38685m, 1.38684m, 1.38686m, 1.38693m, 1.38695m, 1.38693m, 1.38694m, 1.38693m, 1.38692m, 1.38693m, 1.38695m, 1.38697m, 1.38698m, 1.38695m, 1.38696m }; var consolidator1 = new RenkoConsolidator(0.0001m); var consolidator2 = new RenkoConsolidator(0.0001m); var consolidator3 = new RenkoConsolidator(0.0001m); // Update each of our consolidators starting at different indexes of test values for (int i = 0; i < testValues.Count; i++) { var data = new IndicatorDataPoint(time.AddSeconds(i), testValues[i]); consolidator1.Update(data); if (i > 10) { consolidator2.Update(data); } if (i > 20) { consolidator3.Update(data); } } // Assert that consolidator 2 and 3 price is the same as 1. Even though they started at different // indexes they should be the same var bar1 = consolidator1.Consolidated as RenkoBar; var bar2 = consolidator2.Consolidated as RenkoBar; var bar3 = consolidator3.Consolidated as RenkoBar; Assert.AreEqual(bar1.Close, bar2.Close); Assert.AreEqual(bar1.Close, bar3.Close); consolidator1.Dispose(); consolidator2.Dispose(); consolidator3.Dispose(); }