protected override IndicatorResult ComputeByIndexImpl(int index) { var highestHigh = _highestHighIndicator.ComputeByIndex(index).HighestHigh; var lowestLow = _lowestLowIndicator.ComputeByIndex(index).LowestLow; var rsv = (highestHigh == lowestLow) ? 50 : 100 * (Equity[index].Close - lowestLow) / (highestHigh - lowestLow); return(new IndicatorResult(Equity[index].DateTime, rsv)); }
protected override IndicatorResult ComputeByIndexImpl(int index) { if (index < PeriodCount) { return(new IndicatorResult(Equity[index].DateTime, null, null)); } var @long = _highestHigh.ComputeByIndex(index).HighestHigh - _atrIndicator.ComputeByIndex(index).Atr *AtrCount; var @short = _lowestLow.ComputeByIndex(index).LowestLow + _atrIndicator.ComputeByIndex(index).Atr *AtrCount; return(new IndicatorResult(Equity[index].DateTime, @long, @short)); }
public IchimokuCloud(Equity equity, int shortPeriodCount, int middlePeriodCount, int longPeriodCount) : base(equity, shortPeriodCount, middlePeriodCount, longPeriodCount) { // Default country set to United States Of America _periodInstance = equity.Period.CreateInstance(Country.UnitedStatesOfAmerica); var shortHighestHigh = new HighestHigh(equity, shortPeriodCount); _shortLowestLow = new LowestLow(equity, shortPeriodCount); _conversionLine = i => (shortHighestHigh.ComputeByIndex(i).HighestHigh + _shortLowestLow.ComputeByIndex(i).LowestLow) / 2; var middleHighestHigh = new HighestHigh(equity, middlePeriodCount); _middleLowestLow = new LowestLow(equity, middlePeriodCount); _baseLine = i => (middleHighestHigh.ComputeByIndex(i).HighestHigh + _middleLowestLow.ComputeByIndex(i).LowestLow) / 2; var longHighestHigh = new HighestHigh(equity, longPeriodCount); var longLowestLow = new LowestLow(equity, longPeriodCount); _leadingSpanB = i => (longHighestHigh.ComputeByIndex(i).HighestHigh + longLowestLow.ComputeByIndex(i).LowestLow) / 2; }
protected override IndicatorResult ComputeByIndexImpl(int index) { if (index < PeriodCount - 1) { return(new IndicatorResult(Equity[index].DateTime, null, null)); } var highestCloseIndex = index - PeriodCount + 1 + Equity .Skip(index - PeriodCount + 1) .Take(PeriodCount) .ToList() .FindLastIndexOrDefault(c => c.High == _highestHigh.ComputeByIndex(index).HighestHigh).Value; var lowestCloseIndex = index - PeriodCount + 1 + Equity .Skip(index - PeriodCount + 1) .Take(PeriodCount) .ToList() .FindLastIndexOrDefault(c => c.Low == _lowestLow.ComputeByIndex(index).LowestLow).Value; var up = 100.0m * (PeriodCount - (index - highestCloseIndex)) / PeriodCount; var down = 100.0m * (PeriodCount - (index - lowestCloseIndex)) / PeriodCount; return(new IndicatorResult(Equity[index].DateTime, up, down)); }