如何解决仅在小于60分钟周期显示VWAP的Pine Script代码错误?
解决Pine Script中VWAP仅在小于60分钟时间框架显示的错误问题
我来帮你排查并修复这段代码里的问题,主要有两个关键错误需要修正:
错误原因分析
- 第一个错误(第18行):你用
timeframe.period < 60来判断时间框架,这是不对的。timeframe.period返回的是字符串格式的周期标识(比如"M15"代表15分钟、"H1"代表1小时),字符串和整数没办法直接做小于比较,所以编译器报错了。 - 第二个错误(第25行):因为第一个错误导致
tf1变量没有被正确声明初始化,后续引用它的时候自然就提示"未声明的标识符"了。
修正后的完整代码
//@version=4 study("VWAP/MVWAP", overlay = true) vwaplength= input(title="VWAP Length", type=input.integer, defval=1) emaSource1= input(title="EMA 1 Source", type=input.source, defval=close) // 修正:使用timeframe.multiplier获取周期的数值部分,判断是否小于60分钟 tf1 = timeframe.multiplier < 60 cvwap = ema(vwap, vwaplength) // 仅当时间框架小于60分钟时绘制VWAP plotvwap = plot(tf1 ? cvwap : na, color=color.navy, transp=0, title="VWAP", linewidth=3, display=display.all)
关键修改说明
- 替换时间周期判断方式:把
timeframe.period换成timeframe.multiplier,这个函数会返回周期的整数数值(比如1分钟周期返回1,30分钟返回30,1小时返回60),这样就能和整数60正确比较,判断是否是小于60分钟的时间框架。 - 简化布尔表达式:直接用
timeframe.multiplier < 60赋值给tf1,不需要三元表达式返回1/0,Pine Script支持直接用布尔值做条件判断,代码更简洁。 - 优化绘制条件:原代码里的
tf1 and cvwap其实多余,只要tf1为true时绘制cvwap即可,cvwap是计算后的有效数值,不会影响判断逻辑。
内容的提问来源于stack exchange,提问作者rohan sawant
相关产品推荐
相关产品推荐

