public MassIndex(Bars bars, int period, int sumPeriod, string description) : base(bars, description) { base.FirstValidValue = Math.Max(period, sumPeriod); base.FirstValidValue = period; if (FirstValidValue > bars.Count || FirstValidValue < 0) { FirstValidValue = bars.Count; } if (bars.Count < period) { return; } EMACalculation em = EMACalculation.Modern; DataSeries hl = bars.High - bars.Low; EMA ema1 = EMA.Series(hl, period, em); EMA ema2 = EMA.Series(ema1, period, em); DataSeries emaRatio = ema1 / ema2; Sum sumRatio = Sum.Series(emaRatio, sumPeriod); for (int bar = FirstValidValue; bar < bars.Count; bar++) { this[bar] = sumRatio[bar]; } }
public SmoothedParabolic(Bars bars, int period, string description) : base(bars, description) { base.FirstValidValue = period * 3; EMACalculation em = EMACalculation.Modern; DataSeries o = EMA.Series(bars.Open, period, em); DataSeries h = EMA.Series(bars.High, period, em); DataSeries l = EMA.Series(bars.Low, period, em); DataSeries c = EMA.Series(bars.Close, period, em); Bars newBars = new Bars(bars); for (int bar = 0; bar < bars.Count; bar++) { newBars.Add(Date[bar], o[bar], h[bar], l[bar], c[bar], bars.Volume[bar]); } DataSeries SmoothedPar = Parabolic2.Series(newBars, 0.02, 0.02, 0.2); for (int bar = base.FirstValidValue; bar < bars.Count; bar++) { base[bar] = SmoothedPar[bar]; } }
public DerivativeOscillator(DataSeries ds, int periodRSI, int periodEMA1, int periodEMA2, int periodSMA, string description) : base(ds, description) { base.FirstValidValue = Math.Max(Math.Max(Math.Max(periodEMA1, periodEMA2), periodSMA), periodRSI); if (FirstValidValue <= 1) { return; } EMACalculation em = EMACalculation.Modern; RSI rsi = RSI.Series(ds, periodRSI); EMA rsiEma1 = EMA.Series(rsi, periodEMA1, em); EMA rsiEma2 = EMA.Series(rsiEma1, periodEMA2, em); DataSeries rsiSma = Community.Indicators.FastSMA.Series(rsiEma2, periodSMA); DataSeries derivOsc = rsiEma2 - rsiSma; for (int bar = base.FirstValidValue; bar < ds.Count; bar++) { base[bar] = derivOsc[bar]; } }
private ROCLists CalculateEMA9Day(ROCLists indicators, int index) { if (index < 11) { return(indicators); } if (index == 11) { var average = indicators.Take(11).Average(x => x.Quote.Close); indicators[index].SetEMA9Day(average); return(indicators); } var ema11Day = EMACalculation.CalculcateEMA(indicators.Select(x => x.EMA9Day == 0?x.Quote.Close:x.EMA9Day) .ToList(), 9, index); indicators[index].SetEMA9Day(ema11Day); return(indicators); }
public MCO(Bars advBars, Bars decBars, int period1, int period2, string description) : base(advBars, description) { DataSeries Advancers = advBars.Close; DataSeries Decliners = decBars.Close; EMACalculation md = EMACalculation.Modern; base.FirstValidValue = Math.Max(period1, period2) * 3; if (FirstValidValue <= 1) { return; } DataSeries AD_Diff = Advancers - Decliners; DataSeries MCO = EMA.Series(AD_Diff, period1, md) - EMA.Series(AD_Diff, period2, md); for (int bar = base.FirstValidValue; bar < advBars.Count; bar++) { base[bar] = MCO[bar]; } }
public MACDEx(DataSeries ds, int period1, int period2, string description) : base(ds, description) { base.FirstValidValue = Math.Max(period1, period2) * 3; if (FirstValidValue > ds.Count || FirstValidValue < 0) { FirstValidValue = ds.Count; } if (ds.Count < Math.Max(period1, period2)) { return; } EMACalculation m = EMACalculation.Modern; EMA ema1 = EMA.Series(ds, period1, m); EMA ema2 = EMA.Series(ds, period2, m); for (int bar = FirstValidValue; bar < ds.Count; bar++) { base[bar] = ema1[bar] - ema2[bar]; } }
public MACDEx_Signal3(DataSeries ds, int period1, int period2, int period3, string description) : base(ds, description) { base.FirstValidValue = Math.Max(period3, Math.Max(period1, period2)) * 3; if (FirstValidValue > ds.Count || FirstValidValue < 0) { FirstValidValue = ds.Count; } if (ds.Count < Math.Max(period1, period2)) { return; } EMACalculation m = EMACalculation.Modern; MACDEx macdex = new MACDEx(ds, period1, period2, description); EMA ema = EMA.Series(macdex, period3, m); for (int bar = FirstValidValue; bar < ds.Count; bar++) { base[bar] = ema[bar]; } }