将脚本转换为V4中断图表时声明自引用变量 [英] Declaring self-referencing variable when converting script to V4 breaks charting

查看:14
本文介绍了将脚本转换为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆