如何在PineScript中实现从最低价下方显示成交量柱
如何让自定义成交量柱从主图最低价下方开始显示?
我尝试添加带额外移动平均线的自定义成交量柱,但始终无法让它从最低价下方开始显示,试过多种方法都无效。找到的参考代码(如下)也没解决问题,成交量柱还是从0开始:
// This shows an example of how to place values at the bottom of the main chart and scale with chart //@version=5 indicator("FRM Volume Scale v1.0", "Scaler", true, format = format.volume, scale = scale.none) // Inputs scalePercentage = input.int(30, "Vertical %", step = 10, maxval = 100) lookBack = input.int(100, "Last Bars to Look", minval = 2, step = 20) scaleFactor = 100 / scalePercentage plot(volume, color = color.orange, title="Volume", style=plot.style_columns, transp=0) limit = ta.highest(volume, lookBack) plot(limit * scaleFactor, "High", #00000000)
我现在能调整缩放让成交量柱只显示在图表底部,但没法把它上移(最后一段plot只是画了条线,没改变底部位置)。当前代码如下:
//@version=5 indicator("Volume Bar", "Scaler", true, format = format.volume, scale = scale.none) // Inputs scalePercentage = input.int(30, "Vertical %", step = 10, maxval = 100) lookBack = input.int(100, "Last Bars to Look", minval = 2, step = 20) scaleFactor = 100 / scalePercentage c_off_vol = volume * ta.highest(high, lookBack) / ta.highest(volume, lookBack) + ta.lowest(low, lookBack) / scaleFactor plot(i_vol_on ? c_off_vol / scaleFactor : na, "Volume", color= open < close ? color.new(color.green, 50) : color.new(color.red, 50), style=plot.style_columns)
无论怎么设置偏移量,成交量柱仍从0开始显示。
解决方案
核心思路是将成交量柱的底部基准从0替换为主图最低价下方的偏移位置,同时把成交量数值按比例缩放到主图的垂直空间内。修改后的代码如下:
//@version=5 indicator("Volume Bar at Bottom", "VolBottom", overlay=true, format=format.volume) // 输入参数 scalePercentage = input.int(30, "成交量区域占主图垂直比例", step=10, maxval=100) lookBack = input.int(100, "计算区间K线数量", minval=2, step=20) volOffset = input.float(0.5, "最低价下方偏移比例", step=0.1) // 控制成交量柱底部与最低价的距离 // 计算主图价格区间和成交量缩放因子 priceRange = ta.highest(high, lookBack) - ta.lowest(low, lookBack) volMax = ta.highest(volume, lookBack) volScale = (priceRange * scalePercentage / 100) / volMax // 让成交量最大值匹配设定的垂直比例 // 设定成交量柱的底部基准(最低价下方) baseLevel = ta.lowest(low, lookBack) - (priceRange * volOffset) // 计算成交量柱的顶部位置 volBarTop = baseLevel + (volume * volScale) // 绘制自定义成交量柱 plot(volBarTop, "成交量柱", color=open < close ? color.new(color.green, 30) : color.new(color.red, 30), style=plot.style_columns) // 可选:添加成交量均线 volMA = ta.sma(volume, 20) plot(baseLevel + (volMA * volScale), "成交量均线", color=color.blue, linewidth=2)
关键修改说明
- 替换
scale=scale.none为overlay=true,确保指标直接叠加在主图上 - 计算主图价格区间
priceRange,将成交量数值按比例缩放到主图的垂直空间,避免成交量数值过大导致显示异常 - 用
baseLevel定义成交量柱的底部位置(最低价下方偏移),彻底替代默认的0基准 - 成交量柱的顶部位置由
baseLevel加上缩放后的成交量数值得到,柱子从设定的底部位置向上延伸
内容的提问来源于stack exchange,提问作者DenisZ
相关产品推荐
相关产品推荐

