pine-script - 将脚本转换为 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)
推荐阅读
- javascript - 如何通过 AJAX 显示来自 MySQL 的 BLOB 图像?
- node.js - 子文件和外部的 Socket.io on('connect)
- python - 逐元素乘法 - 'NoneType' 对象没有属性 '_inbound_nodes'
- oracle11g - 哪一个是执行计划的驱动表?
- observable - 使用 Rx 在 Kotlin 中将 Flowable 转换为 Observable
- javascript - C# 和 Jquery 数据表服务器端处理问题
- scala - 函数式编程:从嵌套循环中获取数据列表
- javascript - 在 Adobe Experience Manager 中将 Javascript 输出呈现为标记的最短方法?
- javascript - 如何将页眉和页脚删除到 window.print();
- java - 从 jar 中读取属性文件