public void RateOfChangeNegative() { var data = Candles.Skip(2).Take(3); var roc = data.RateOfChange(); Assert.Equal(-0.151061173533083645443196005M, roc); }
public Trend CandleTrend(int candleCount) { if (Candles.Count < candleCount) { return(Trend.Unknown); } var candles = Candles.Skip(Candles.Count - candleCount); var upCandlesCount = candles.Count(c => c.IsGreen); var downCandlesCount = candles.Count(c => c.IsRed); var firstCandle = candles.First(); var lastCandle = candles.Last(); if (firstCandle.IsGreen) { if (lastCandle.Close > firstCandle.Close && upCandlesCount > downCandlesCount) { return(Trend.Up); } if (lastCandle.Close < firstCandle.Open && upCandlesCount < downCandlesCount) { return(Trend.Down); } } if (firstCandle.IsRed) { if (lastCandle.Close > firstCandle.Open && upCandlesCount > downCandlesCount) { return(Trend.Up); } if (lastCandle.Close < firstCandle.Close && upCandlesCount < downCandlesCount) { return(Trend.Down); } } return(Trend.Sideways); }
public ulong AverageVolumeForPeriod(int period) { return((ulong)Candles.Skip(Candles.Count - period).Take(period).Average(x => (decimal)x.Volume)); }