将脚本转换为V4中断图表时声明自引用变量 [英] Declaring self-referencing variable when converting script to V4 breaks charting
本文介绍了将脚本转换为V4中断图表时声明自引用变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在将多个脚本组合到单个指示器中以创建警报,并使用不同版本的脚本,因此我尝试使用版本4。
我使用的指示器之一是VWAP标准偏差范围指示器,它将变量初始化如下:
start = security(syminfo.tickerid, "D", time)
newSession = iff(change(start), 1, 0)
vwapsum = 0.0
volumesum = 0.0
v2sum = 0.0
vwapsum := iff(newSession, hl2*volume, hl2*volume + vwapsum[1])
volumesum := iff(newSession, volume, volume + volumesum[1])
v2sum := iff(newSession, volume*hl2*hl2, volume*hl2*hl2 + v2sum[1])
我添加了vwapsum = 0.0
和其他初始化,因为否则它会抛出错误。这应该会在一天开始时开始增值,因此波段在下一交易日开始时逐渐扩大和收缩。然而,当我在市场开盘时应用该指标时,我感到收缩。
在这张图中,你可以看到宫缩。1.在每日训练开始时纠正缩写。2.打开图表或应用指标时缩写错误。
要正确绘制图表,正确执行此操作的方法是什么?这是由于手动将变量设置为0.0,还是由于V4解释newSession语句的方式发生了变化?以下是重现错误的最小可行脚本:
//@version=4
study("VWAP-deviation", overlay=true)
devUp1 = input(title="Stdev above", type=input.float, defval=2.0)
devDn1 = input(title="Stdev below", type=input.float, defval=2.0 )
start = security(syminfo.tickerid, "D", time)
newSession = iff(change(start), 1, 0)
vwapsum = 0.0
volumesum = 0.0
v2sum = 0.0
vwapsum := iff(newSession, hl2*volume, hl2*volume + vwapsum[1])
volumesum := iff(newSession, volume, volume + volumesum[1])
v2sum := iff(newSession, volume*hl2*hl2, volume*hl2*hl2 + v2sum[1])
myvwap = vwapsum/volumesum
dev = sqrt(max(v2sum/volumesum - myvwap*myvwap, 0))
plot(myvwap, title="VWAP", color=color.green)
plot(myvwap + devUp1 * dev, title="VWAP Upper", color=color.red)
plot(myvwap - devDn1 * dev, title="VWAP Lower", color=color.red)
推荐答案
您的意思是这样的吗?
//@version=4
study("VWAP-deviation", overlay=true)
devUp1 = input(title="Stdev above", type=input.float, defval=2.0)
devDn1 = input(title="Stdev below", type=input.float, defval=2.0 )
var float vwapsum = na
var float volumesum = na
var float v2sum = na
newSession = change(time('D'))
vwapsum := newSession ? hl2*volume : hl2*volume + vwapsum[1]
volumesum := newSession ? volume : volume + volumesum[1]
v2sum := newSession ? volume * pow(hl2,2) : volume * pow(hl2,2) + v2sum[1]
myvwap = vwapsum/volumesum
dev = sqrt(max(v2sum/volumesum - pow(myvwap,2), 0))
plot(newSession ? na : myvwap , title="VWAP", color=color.green, style=plot.style_linebr)
plot(newSession ? na : myvwap + devUp1 * dev, title="VWAP Upper", color=color.red, style=plot.style_linebr)
plot(newSession ? na : myvwap - devDn1 * dev, title="VWAP Lower", color=color.red, style=plot.style_linebr)
这篇关于将脚本转换为V4中断图表时声明自引用变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文