微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PineScript Multi TimeFrame 指标随着 TradingView 中时间框架的变化而变化

如何解决PineScript Multi TimeFrame 指标随着 TradingView 中时间框架的变化而变化

我正在尝试使用 pine 脚本开发一个多时间框架指标。我使用以下行来选择价格,我可以根据这些价格进行进一步分析。

resolution = "D"
source = security(syminfo.tickerid,resolution,close,gaps=true)
...
... <indicator developed using source>
...

如果我想要相同的指标,但在不同的时间范围内。我只是将 resolution 变量更改为我想要的任何值。因此,如果我想在 30 分钟图表上使用相同的指标,我只需写出 resolution="30",这将改变 source 以及从那里开始的所有计算。

指标应该在最后一个柱上绘制一个标签标签的颜色就是我们想要的结果。

我的问题是:保持分辨率变量不变,如果我改变交易视图图表的时间范围,指标的颜色也会改变。这很奇怪,因为就我的理解而言,我正在查看的图表的时间范围与指标无关,因为该指标是专门根据 source 变量内的值开发的,该变量是常数,与我查看图表的时间范围。

现在,我将介绍有关指标工作的一些细节。如果这与此调试相关(尽管我认为了解指标可能不是解决我的问题所必需的)。它是由 John Carter 开发的“SqueezePro 指标”。如果布林带位于 Keltner 带内,则存在挤压。现在挤压可以是紧的、标准的或松的。我们给出一个圆形标签,其颜色决定了挤压是紧的、标准的还是松的。这个圆形标签只打印一次 - 最后一个酒吧也是如此。

其次,我们还将动量显示为另一个标签。就像挤压标签一样,这也是一个一次性标签 - 显示在图表的最后一个条形上。它的颜色基于动量是正还是负的条件。然而,为了花哨的目的,这个标签的形状不是圆形,而是上下三角形。

与最初的 Squeeze Pro 指标不同,我只关心 当前 是否存在挤压以及 当前 是否存在上升势头。我不关心过去的压力或过去的势头。这就是为什么我只需要两个标签——一个给我当前的动力,一个给我当前的挤压。

//@version=4

study(title="Squeeze Pro",shorttitle="SqueezePro",overlay=true)

resolution="D" // This resolution should theoretically dictate the indicator's colour

source = security(syminfo.tickerid,gaps=true) // Variable on which the indicator is based. 

length = 20
ma = sma(source,length)

devBB = stdev(source,length)
devKC = sma(tr,length) 

//Bollinger 2x
upBB = ma + devBB * 2
lowBB = ma - devBB * 2

//Keltner 2x
upKCWide = ma + devKC * 2
lowKCWide = ma - devKC * 2

//Keltner 1.5x
upKCnormal = ma + devKC * 1.5
lowKCnormal = ma - devKC * 1.5

//Keltner 1x
upKCNarrow = ma + devKC
lowKCNarrow = ma - devKC

sqzOnWide  = (lowBB >= lowKCWide) and (upBB <= upKCWide) 
sqzOnnormal  = (lowBB >= lowKCnormal) and (upBB <= upKCnormal) 
sqzOnNarrow  = (lowBB >= lowKCNarrow) and (upBB <= upKCNarrow) 
noSqz  = (sqzOnWide == false) and (sqzOffWide == false) 

//Momentum Oscillator
mom = linreg(source  -  avg(avg(highest(high,length),lowest(low,length)),sma(close,length,0)



//Momentum histogram color
momentum_color = iff( mom > 0,iff( mom > nz(mom[1]),color.lime,color.green),iff( mom < nz(mom[1]),color.red,color.maroon))
momentum_style= iff( mom > 0,label.style_triangleup,label.style_triangledown)

sq_color = sqzOnNarrow ? color.orange : sqzOnnormal ? color.red : sqzOnWide ? color.gray : color.green 
squeeze_size = sqzOnNarrow ? size.tiny : sqzOnnormal ? size.small : sqzOnWide ? size.normal : size.large
squeeze_text = sqzOnNarrow ? "Tight" : sqzOnnormal ? "Standard" : sqzOnWide ? "Loose" : "No"

momentum_label = label.new(bar_index,high,color=momentum_color,textcolor=color.white,style=momentum_style )
label.set_text(momentum_label,resolution_formatted+"\n"+squeeze_text)
label.set_x(momentum_label,bar_index)
label.set_y(momentum_label,high+3*tr)

squeeze_label = label.new(bar_index,color=sq_color,style = label.style_circle)
label.set_x(squeeze_label,bar_index)
label.set_y(squeeze_label,high+1*tr)
label.set_size(squeeze_label,squeeze_size)

label.delete(momentum_label[1])
label.delete(squeeze_label[1])

它在最后一个栏上很好地显示了两个标签。但是,我的问题是:更改交易视图的时间范围后,指标的颜色也会发生变化。为什么会这样?至于 resolution 变量是常数,为什么指标的颜色要改变?我在这里犯了什么错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。