如何修改Pine Script代码使成交量高于前后K线时变色?
成交量柱变色Pine Script代码问题排查
我想编写一段Pine Script代码,实现当成交量高于当前K线的前一根和后一根K线成交量时,该成交量柱变色。我写了如下代码,但结果不符合预期。因为我在检查volume[1],所以用了offset来偏移绘图,但不确定问题出在哪,是不是遗漏了什么?
//@version=5 indicator("vol",overlay = false) peakHigh = bool(na) peakHigh := volume[1] > volume[0] and volume[1] > volume[2] plot(volume, style=plot.style_columns, color=peakHigh, color.red:color.new(color.gray,50),title="Volume",offset = 1)
运行后结果不符合预期(变色逻辑未正确生效)。
问题分析与修正
你的代码存在三个核心问题:
- 颜色参数语法错误:
plot函数的颜色参数不能用color.red:color.new(...)这种写法,Pine Script要求用三元运算符? :实现条件颜色切换。 - 偏移逻辑不匹配:你判断的是
volume[1](前一根K线)为峰值,但设置offset=1会把当前K线的颜色偏移到下一根,导致颜色和目标K线错位。 - 冗余变量初始化:
peakHigh = bool(na)属于无效代码,直接赋值条件表达式即可。
修正方案一(推荐:直接标记当前峰值K线)
直接判断当前K线是否为成交量峰值,无需偏移,颜色直接对应目标K线:
//@version=5 indicator("成交量峰值标记", overlay = false) // 判断当前K线成交量是否高于前后两根 isVolumePeak = volume > volume[1] and volume > volume[-1] // 条件设置颜色:峰值用红色,否则用半透明灰色 plot(volume, style=plot.style_columns, color=isVolumePeak ? color.red : color.new(color.gray, 50), title="成交量")
修正方案二(匹配你原有的判断逻辑)
如果你坚持判断前一根K线是否为峰值,需要把偏移改为-1,让颜色对应到前一根K线:
//@version=5 indicator("vol", overlay = false) // 判断前一根K线是否为成交量峰值 peakHigh = volume[1] > volume[0] and volume[1] > volume[2] // 偏移-1,将颜色应用到前一根K线 plot(volume, style=plot.style_columns, color=peakHigh ? color.red : color.new(color.gray, 50), title="Volume", offset = -1)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

