/** * @param index the current bar/candle index * @return true if the current bar/candle is a white soldier, false otherwise */ private bool isWhiteSoldier(int index) { IBar prevBar = _series.GetBar(index - 1); IBar currBar = _series.GetBar(index); if (currBar.IsBullish()) { if (prevBar.IsBearish()) { // First soldier case return(hasVeryShortUpperShadow(index) && currBar.OpenPrice.IsGreaterThan(prevBar.MinPrice)); } else { return(hasVeryShortUpperShadow(index) && isGrowing(index)); } } return(false); }
/** * @param index the current bar/candle index * @return true if the current bar/candle is a black crow, false otherwise */ private bool isBlackCrow(int index) { IBar prevBar = _series.GetBar(index - 1); IBar currBar = _series.GetBar(index); if (currBar.IsBearish()) { if (prevBar.IsBullish()) { // First crow case return(hasVeryShortLowerShadow(index) && currBar.OpenPrice.IsLessThan(prevBar.MaxPrice)); } else { return(hasVeryShortLowerShadow(index) && isDeclining(index)); } } return(false); }
protected override bool Calculate(int index) { if (index < 1) { // Harami is a 2-candle pattern return(false); } IBar prevBar = _series.GetBar(index - 1); IBar currBar = _series.GetBar(index); if (prevBar.IsBearish() && currBar.IsBullish()) { decimal prevOpenPrice = prevBar.OpenPrice; decimal prevClosePrice = prevBar.ClosePrice; decimal currOpenPrice = currBar.OpenPrice; decimal currClosePrice = currBar.ClosePrice; return(currOpenPrice.IsLessThan(prevOpenPrice) && currOpenPrice.IsGreaterThan(prevClosePrice) && currClosePrice.IsLessThan(prevOpenPrice) && currClosePrice.IsGreaterThan(prevClosePrice)); } return(false); }