当 RSI 水平 > 70 时计算 RSI "peaks" 的数量

Counting number of RSI "peaks" while RSI level > 70

我想计算 RSI 线在 RSI 保持在 70 以上时形成的“峰值”数量,然后在其中 5 个出现时绘制一个形状(即,5 个出现在低于 70 之前)。

现在的峰值仅定义为自上一根柱线以来的 RSI 上升。

例如,在此示例中,计数将为 3(不足以触发绘制形状,但为了清楚起见)。

一旦等级低于70,计数就会stop/reset;即下一次出现高于 RSI 水平 70 的峰值时将为“1”。

这是我到目前为止尝试过的方法:

rsiPeaksOver70 = 0
myResult = for i = 1 to 5 by 1
    if rsi <= 70 and rsi[1] >= rsi
        break
    rsiPeaksOver70 := rsiPeaksOver70 + i

plotshape(rsiPeaksOver70, style=shape.xcross, size=size.normal, location=location.bottom)

这是结果...

如果我尝试绘制为列,我会得到类似的结果(而且它实际上并没有递增;列保持相同的大小)。

当前问题:

  1. 出于某种原因,它一次只会遵守一个条件!这两个标准都是独立工作的,但是当我添加一个 and 时,它会掉落 <= 70... 不确定那里发生了什么。

  2. 我不知道如何只在计数达到 5 时绘制形状。我尝试在循环底部“返回”结果并添加 rsiPeaksOver70 = 5 plotshape 系列参数,但失败了。

这是一个计算 RSI 峰值并在计算目标数量后绘制十字的脚本。当 RSI 低于该水平时计数器重置。

我使用 RSI 级别 60 和峰值计数 3,因此更容易获得所需的峰值计数。

//@version=4
study("RSI peak count")

_rsiPeaks = 0
_overboughtLevel = input(title="RSI Level", type=input.float, defval=60, minval=0, maxval=100)
_rsiPeriod = input(title="RSI Period", type=input.integer, defval=6, minval=1)
_targetPeaks = input(title="Peaks to count until signal", type=input.integer, defval=3, minval=1, maxval=100)
_rsi = rsi(close, _rsiPeriod)

hline(_overboughtLevel, title='Overbought', color=color.blue, linestyle=hline.style_dotted)

_rsiPeaks := _rsiPeaks[1]
if(_rsi[1]<_overboughtLevel)
    _rsiPeaks := 0 // reset counter if we visited under overbought level

_peak = false
if(_rsi[1]>_overboughtLevel and _rsi[1]>_rsi and _rsi[1]>_rsi[2])
    _rsiPeaks := _rsiPeaks + 1 // previous rsi value was a peak
    _peak := true


plotshape(_peak and _rsiPeaks == _targetPeaks ? _rsi : na, offset =-1, style=shape.xcross, color=color.fuchsia, size=size.small, location=location.bottom)
plot(_rsi)