public Indicator AnalyzeData(DataState state) { double[] highPrices = _analyseRepo.LoadHighPriceBySymbol(state.Symbol, true).ToArray(); double[] lowPrices = _analyseRepo.LoadLowPriceBySymbol(state.Symbol, true).ToArray(); double[] closePrices = _analyseRepo.LoadClosePriceBySymbol(state.Symbol, true).ToArray(); double[] adxValues = ADXCalculator.CalculateADX(ADXCalculator.Period, highPrices, lowPrices, closePrices); if (adxValues.Length == 0) { return(null); } ADX value = new ADX(); value.Symbol = state.Symbol; value.Date = state.Last.Value; value.ADX14 = AlgorithmHelper.GetLast(adxValues); return(value.ToIndicator()); }
public void CanCalculateADX() { var high = new double[] { 21.84, 22.55, 22.1, 21.28, 20.94, 20.66, 20.89, 21.64, 21.89, 21.99, 22.1, 22.07, 22.05, 22.05, 21.6, 23.88, 22.94, 22.7, 22.53, 22.59, 22.02, 21.97, 21.45, 21.85, 21.74, 21.78, 21.76, 22.03, 21.79, 21.75, 21.68, 21.8, 21.67, 21.55, 21.52, 21.95, 22.25, 22.24, 22.23, 22.37, 22.67, 22.65, 22.58, 22.66, 22.61, 22.47, 22.7, 22.7, 22.58, 22.25, 20.84, 20.18, 19.83, 19.74, 19.29, 19.17, 19.34, 18.82, 18.31, 17.75, 18.2, 18.24, 18.61, 18.56, 18.88, 18.72, 17.52, 16.94, 17.96, 18.2, 17.8, 17.93, 17.93, 18.29, 18.23, 18.64, 20, 20, 20.94, 21.51, 22.31, 22.85, 23.14, 23.5, 23.45, 23.3, 23.65, 24.09, 24.14, 23.57, 23.45, 23.04, 22.99, 23.1, 23.41, 23.18, 23.49, 23.44, 23.41, 23.15, 23.26, 23.25, 23.19, 23.78, 23.99, 24.45, 24.18, 24.35, 23.94, 23.93, 24.1, 23.53, 23.62, 23.53, 23.41, 21.64, 21.94, 21.94, 21.88, 21.8, 22.1, 22.08, 21.69, 21.66, 21.74, 22.42, 22.45, 22.56, 22.46, 22.57, 22.5, 22.37, 22.32, 22.22, 22.55, 23.04, 22.72, 22.47, 22.92, 22.96, 22.75, 23.3, 23.39, 23.68, 23.83, 31.81, 30.75, 31.13, 32.16, 32.98, 33.69, 33.6, 33.96, 33.55, 34.34, 33.88, 33.4, 34.57, 34.93, 34.47, 35.52, 35.31, 34.4, 34.82, 34.31, 35.42, 35.31, 35.4, 36.84, 37.39, 36.95, 36.46, 35.8, 35.79, 36.9, 36.85, 36.44, 35.84, 35.58, 35.52, 36.19, 40.65, 39.94, 41.54, 42.23, 41.08, 43.03, 42.62, 43.88, 44.22, 43.93, 43.15, 42.9, 42.19, 41.8, 42.93, 42.54, 43.47, 43.09, 43.3, }; var low = new double[] { 21.41, 21.81, 20.96, 20.54, 20.18, 20.06, 20.1, 20.63, 21.29, 21.48, 21.38, 21.67, 21.63, 21.58, 20.94, 22.06, 22.14, 22.19, 22.29, 21.97, 21.59, 21.33, 20.77, 21.08, 21.51, 21.4, 21.44, 21.42, 21.38, 21.2, 21.37, 21.38, 21.34, 21.26, 21.18, 21.31, 21.66, 21.88, 21.62, 21.64, 22.17, 22.18, 22.17, 22.24, 22.35, 22.18, 22.02, 22.13, 22.06, 20.67, 19.74, 19.6, 19.52, 19.07, 18.94, 18.79, 18.65, 17.97, 17.49, 17.12, 17.32, 17.77, 17.99, 18.05, 18, 17.18, 16.31, 15.76, 16.61, 17.35, 17.4, 17.58, 17.69, 17.85, 17.9, 17.92, 18.51, 19.27, 19.14, 20.96, 21.12, 22.26, 22.69, 22.84, 22.58, 22.65, 22.96, 23, 23.13, 23.01, 22.83, 22.68, 22.32, 22.43, 22.61, 22.76, 23.08, 22.8, 22.75, 22.46, 22.82, 22.64, 22.47, 22.69, 23.44, 23.15, 23.33, 23.37, 22.75, 22.9, 23.08, 22.9, 23.4, 22.92, 21.26, 21.12, 21.34, 21.63, 21.56, 21.14, 21.6, 21.25, 21.27, 21.29, 21.29, 21.66, 22.01, 22.1, 21.91, 21.82, 21.91, 21.92, 21.72, 21.53, 21.61, 22.45, 22.18, 21.96, 22.07, 21.95, 22.34, 22.37, 22.85, 22.87, 23.47, 27.66, 28.76, 29.65, 30.82, 31.76, 32.58, 32.81, 32.8, 33.18, 33.09, 33.06, 31.82, 32.24, 33.36, 33.9, 34.3, 33.79, 33.22, 33.92, 33.59, 34, 33.62, 33.55, 35.32, 35.73, 35.73, 35.26, 34.65, 35.13, 35.54, 35.11, 35.31, 33.42, 32.38, 34.02, 35.02, 35.5, 37.57, 38.5, 40.12, 40.35, 40.79, 41.2, 42.52, 42.56, 42.01, 42.3, 41.38, 40.58, 41, 41.2, 41.42, 41.84, 42.27, 40.22, }; var close = new double[] { 21.7, 21.95, 20.96, 20.57, 20.25, 20.51, 20.64, 21.6, 21.87, 21.73, 22.08, 21.93, 21.9, 21.62, 21.07, 22.6, 22.55, 22.67, 22.45, 22.15, 21.77, 21.47, 20.9, 21.7, 21.64, 21.5, 21.7, 21.82, 21.53, 21.68, 21.46, 21.61, 21.4, 21.42, 21.37, 21.92, 22.07, 22.06, 22.12, 22.35, 22.65, 22.25, 22.46, 22.57, 22.46, 22.3, 22.56, 22.17, 22.29, 20.81, 20.23, 19.62, 19.7, 19.16, 19.05, 19.09, 18.68, 17.98, 17.49, 17.19, 18.05, 17.93, 18.57, 18.09, 18.47, 17.21, 16.33, 16.91, 17.93, 17.4, 17.74, 17.88, 17.79, 18.1, 18.07, 18.54, 19.88, 19.73, 20.86, 21.08, 22.26, 22.73, 22.93, 23.48, 22.66, 22.96, 23.51, 24.02, 23.36, 23.17, 22.86, 22.73, 22.72, 22.93, 22.74, 23.09, 23.27, 23.17, 22.75, 22.95, 23.04, 23.08, 22.68, 23.51, 23.53, 24.12, 23.36, 23.42, 23.66, 23.34, 23.35, 23.23, 23.53, 23, 21.46, 21.25, 21.62, 21.79, 21.69, 21.78, 21.62, 21.58, 21.52, 21.34, 21.54, 22.27, 22.13, 22.2, 22.13, 22.44, 22.07, 22.36, 21.92, 21.94, 22.5, 22.77, 22.51, 22.22, 22.47, 22.87, 22.43, 23.19, 23.2, 23.51, 23.53, 30.01, 29.48, 31.08, 31.64, 32.87, 32.96, 33.27, 33.64, 33.35, 33.56, 33.4, 32.33, 33.97, 34.4, 34.25, 34.82, 33.95, 33.97, 34.4, 33.77, 35.32, 33.73, 35.06, 36.77, 35.98, 36.01, 35.81, 35.35, 35.65, 36.69, 35.46, 35.81, 33.53, 34.71, 34.93, 35.59, 39.63, 38.72, 40.61, 40.93, 40.69, 42.51, 42.28, 43.21, 42.95, 42.75, 42.45, 41.73, 40.98, 41.48, 42.72, 42.07, 42.6, 42.97, 40.77, }; Assert.IsTrue(high.Length == 200); Assert.IsTrue(low.Length == 200); Assert.IsTrue(close.Length == 200); var adx = ADXCalculator.CalculateADX(14, high, low, close); }