private void ProcessSlow() { Log("SLOW, bar " + CurrentBar); ParabolicSAR p = ParabolicSAR(BarsArray[2], Acceleration, AccelerationMax, AccelerationStep); currTrendSLow = p[0] > Closes[2][0] ? TrendType.UP : TrendType.DOWN; }
private void ProcessFast() { Log("bar " + CurrentBar); ParabolicSAR p = ParabolicSAR(BarsArray[3], Acceleration, AccelerationMax, AccelerationStep); currTrendFast = p[0] > Closes[3][0] ? TrendType.UP : TrendType.DOWN; }
private void ProcessDaily() { Log("DAILY, bar " + CurrentBar); ParabolicSAR p = ParabolicSAR(BarsArray[1], Acceleration, AccelerationMax, AccelerationStep); currTrendDaily = p[0] > Closes[1][0] ? TrendType.UP : TrendType.DOWN; }
/// <summary> /// Parabolic SAR /// </summary> /// <returns></returns> public ParabolicSAR ParabolicSAR(Data.IDataSeries input, double acceleration, double accelerationMax, double accelerationStep) { if (cacheParabolicSAR != null) for (int idx = 0; idx < cacheParabolicSAR.Length; idx++) if (Math.Abs(cacheParabolicSAR[idx].Acceleration - acceleration) <= double.Epsilon && Math.Abs(cacheParabolicSAR[idx].AccelerationMax - accelerationMax) <= double.Epsilon && Math.Abs(cacheParabolicSAR[idx].AccelerationStep - accelerationStep) <= double.Epsilon && cacheParabolicSAR[idx].EqualsInput(input)) return cacheParabolicSAR[idx]; lock (checkParabolicSAR) { checkParabolicSAR.Acceleration = acceleration; acceleration = checkParabolicSAR.Acceleration; checkParabolicSAR.AccelerationMax = accelerationMax; accelerationMax = checkParabolicSAR.AccelerationMax; checkParabolicSAR.AccelerationStep = accelerationStep; accelerationStep = checkParabolicSAR.AccelerationStep; if (cacheParabolicSAR != null) for (int idx = 0; idx < cacheParabolicSAR.Length; idx++) if (Math.Abs(cacheParabolicSAR[idx].Acceleration - acceleration) <= double.Epsilon && Math.Abs(cacheParabolicSAR[idx].AccelerationMax - accelerationMax) <= double.Epsilon && Math.Abs(cacheParabolicSAR[idx].AccelerationStep - accelerationStep) <= double.Epsilon && cacheParabolicSAR[idx].EqualsInput(input)) return cacheParabolicSAR[idx]; ParabolicSAR indicator = new ParabolicSAR(); indicator.BarsRequired = BarsRequired; indicator.CalculateOnBarClose = CalculateOnBarClose; #if NT7 indicator.ForceMaximumBarsLookBack256 = ForceMaximumBarsLookBack256; indicator.MaximumBarsLookBack = MaximumBarsLookBack; #endif indicator.Input = input; indicator.Acceleration = acceleration; indicator.AccelerationMax = accelerationMax; indicator.AccelerationStep = accelerationStep; Indicators.Add(indicator); indicator.SetUp(); ParabolicSAR[] tmp = new ParabolicSAR[cacheParabolicSAR == null ? 1 : cacheParabolicSAR.Length + 1]; if (cacheParabolicSAR != null) cacheParabolicSAR.CopyTo(tmp, 0); tmp[tmp.Length - 1] = indicator; cacheParabolicSAR = tmp; return indicator; } }