首页 > 解决方案 > 在 TradingView 中更改时间范围时,PineScript Multi TimeFrame 指标会发生变化

问题描述

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

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

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

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

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

现在,我将详细介绍该指标的工作原理。如果这与此调试相关(尽管我认为理解指标可能对于解决我的问题不是必需的)。它是 John Carter 开发的“SqueezePro Indicator”。如果布林带在 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, resolution, close, 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)),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, high, color=sq_color, textcolor=color.white, 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变量是常数,为什么指标的颜色要改变?我在这里犯了什么错误?

标签: pine-scriptalgorithmic-tradingtradingview-apimomentum

解决方案


推荐阅读