コード例 #1
0
        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;
        }