private void UpdateState(Bar bar) { _lowest.Update(bar.ClosePrice); double lowestPrice = _lowest.Value; bool breakout = Math.Abs(lowestPrice - bar.ClosePrice) < 1e-6; switch (_state) { case PriceState.Initial: if (breakout) { SetBreakoutState(lowestPrice); } break; case PriceState.Breakout: if (breakout) { SetBreakoutState(lowestPrice); } else { if (bar.ClosePrice > _minBouncePrice) { _state = PriceState.Bounce; BouncePrice = bar.ClosePrice; BouncePercentage = (bar.ClosePrice - LowestPrice) / LowestPrice * 100.0; } } break; case PriceState.Bounce: if (breakout) { SetBreakoutState(lowestPrice); } else { ResetState(); } break; } _values[0] = _state == PriceState.Bounce ? 1.0 : 0.0; }