// Doji /// <include file='./info.xml' path='indicator/*' /> /// public static IEnumerable <CandleResult> GetDoji <TQuote>( this IEnumerable <TQuote> quotes, double maxPriceChangePercent = 0.001) where TQuote : IQuote { // check parameter arguments ValidateDoji(maxPriceChangePercent); // initialize List <CandleResult> results = quotes.ConvertToCandleResults(); int length = results.Count; // roll through candles for (int i = 0; i < length; i++) { CandleResult r = results[i]; // check for current signal if (r.Candle.Open != 0) { if (Math.Abs((double)(r.Candle.Close / r.Candle.Open) - 1d) <= maxPriceChangePercent) { r.Price = r.Candle.Close; r.Signal = Signal.Neutral; } } } return(results); }
// MARUBOZU /// <include file='./info.xml' path='indicator/*' /> /// public static IEnumerable <CandleResult> GetMarubozu <TQuote>( this IEnumerable <TQuote> quotes, double minBodyPercent = 0.95) where TQuote : IQuote { // check parameter arguments ValidateMarubozu(minBodyPercent); // initialize List <CandleResult> results = quotes.ConvertToCandleResults(); int length = results.Count; // roll through candles for (int i = 0; i < length; i++) { CandleResult r = results[i]; // check for current signal if (r.Candle.BodyPct >= minBodyPercent) { r.Price = r.Candle.Close; r.Signal = r.Candle.IsBullish ? Signal.BullSignal : Signal.BearSignal; } } return(results); }
public void CandleValues() { // sort List <CandleResult> candles = quotes.ConvertToCandleResults(); // assertions // should always be the same number of results as there is quotes Assert.AreEqual(502, candles.Count); // sample values CandleResult r0 = candles[0]; Assert.AreEqual(212.8m, r0.Candle.Close); Assert.AreEqual(1.83m, r0.Candle.Size); Assert.AreEqual(0.19m, r0.Candle.Body); Assert.AreEqual(0.55m, r0.Candle.UpperWick); Assert.AreEqual(1.09m, r0.Candle.LowerWick); Assert.AreEqual(0.10383, Math.Round(r0.Candle.BodyPct, 5)); Assert.AreEqual(0.30055, Math.Round(r0.Candle.UpperWickPct, 5)); Assert.AreEqual(0.59563, Math.Round(r0.Candle.LowerWickPct, 5)); Assert.IsTrue(r0.Candle.IsBullish); Assert.IsFalse(r0.Candle.IsBearish); CandleResult r351 = candles[351]; Assert.AreEqual(1.24m, r351.Candle.Size); Assert.AreEqual(0m, r351.Candle.Body); Assert.AreEqual(0.69m, r351.Candle.UpperWick); Assert.AreEqual(0.55m, r351.Candle.LowerWick); Assert.AreEqual(0, Math.Round(r351.Candle.BodyPct, 5)); Assert.AreEqual(0.55645, Math.Round(r351.Candle.UpperWickPct, 5)); Assert.AreEqual(0.44355, Math.Round(r351.Candle.LowerWickPct, 5)); Assert.IsFalse(r351.Candle.IsBullish); Assert.IsFalse(r351.Candle.IsBearish); CandleResult r501 = candles[501]; Assert.AreEqual(2.67m, r501.Candle.Size); Assert.AreEqual(0.36m, r501.Candle.Body); Assert.AreEqual(0.26m, r501.Candle.UpperWick); Assert.AreEqual(2.05m, r501.Candle.LowerWick); Assert.AreEqual(0.13483, Math.Round(r501.Candle.BodyPct, 5)); Assert.AreEqual(0.09738, Math.Round(r501.Candle.UpperWickPct, 5)); Assert.AreEqual(0.76779, Math.Round(r501.Candle.LowerWickPct, 5)); Assert.IsTrue(r501.Candle.IsBullish); Assert.IsFalse(r501.Candle.IsBearish); }
public void Standard() { List <CandleResult> results = quotes.GetMarubozu(0.95).ToList(); // assertions // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(6, results.Where(x => x.Signal != Signal.None).Count()); // sample values CandleResult r31 = results[31]; Assert.AreEqual(null, r31.Price); Assert.AreEqual(0, (int)r31.Signal); CandleResult r32 = results[32]; Assert.AreEqual(222.10m, r32.Price); Assert.AreEqual(Signal.BullSignal, r32.Signal); CandleResult r33 = results[33]; Assert.AreEqual(null, r33.Price); Assert.AreEqual(Signal.None, r33.Signal); CandleResult r34 = results[34]; Assert.AreEqual(null, r34.Price); Assert.AreEqual(Signal.None, r34.Signal); CandleResult r274 = results[274]; Assert.AreEqual(null, r274.Price); Assert.AreEqual(Signal.None, r274.Signal); CandleResult r277 = results[277]; Assert.AreEqual(248.13m, r277.Price); Assert.AreEqual(Signal.BearSignal, r277.Signal); }
public void Standard() { List <CandleResult> results = quotes.GetDoji(0.001).ToList(); // assertions // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(112, results.Where(x => x.Signal != Signal.None).Count()); // sample values CandleResult r1 = results[1]; Assert.AreEqual(null, r1.Price); Assert.AreEqual(0, (int)r1.Signal); CandleResult r23 = results[23]; Assert.AreEqual(216.28m, r23.Price); Assert.AreEqual(Signal.Neutral, r23.Signal); CandleResult r46 = results[46]; Assert.AreEqual(null, r46.Price); Assert.AreEqual(Signal.None, r46.Signal); CandleResult r392 = results[392]; Assert.AreEqual(null, r392.Price); Assert.AreEqual(Signal.None, r392.Signal); CandleResult r451 = results[451]; Assert.AreEqual(273.64m, r451.Price); Assert.AreEqual(1, (int)r451.Signal); CandleResult r477 = results[477]; Assert.AreEqual(256.86m, r477.Price); Assert.AreEqual(Signal.Neutral, r477.Signal); }