如何将自定义Volume Profile锁定至图表侧边,避免随滚动缩放移动?
自定义Volume Profile锁定到图表左右侧的实现方法
核心原理
要让自定义Volume Profile不随滚动、缩放操作移动,不能使用基于时间的坐标(xloc.bar_time),必须切换为固定位置的坐标体系——要么用基于K线索引的xloc.bar_index,要么用屏幕像素坐标xloc.pixel。
具体实现方案
1. 锁定到图表右侧
- 把
vp_x_loc设为当前最后一根K线的索引bar_index,这会让Volume Profile固定在图表最右侧的K线位置。 - 修改
f_setup_bar里的坐标计算逻辑,去掉时间相关的偏移,直接基于K线索引计算宽度。
修改后的代码片段:
// 固定到右侧的核心设置 vp_x_loc = bar_index // 绑定到最后一根K线的索引,始终在图表右侧 f_setup_bar(n) => ys = array.get(vp_a_P, n) bar_width_val = array.get(vp_a_W, n) x1 = vp_x_loc - bar_width_val // 从右侧向左延伸对应宽度 line.new(x1 = x1, y1 = ys, x2 = vp_x_loc, y2 = ys, xloc = xloc.bar_index, // 使用K线索引坐标,替代时间坐标 extend = extend.none, color = (vp_VmaxId == n ? vp_poc_color : vp_bar_color), style = line.style_solid, width = vp_bar_width) if barstate.islast for i = 0 to (vp_N_BARS - 1) by 1 f_setup_bar(i)
2. 锁定到图表左侧
- 只需将
vp_x_loc设为固定的K线索引值,比如0(对应图表最左侧的K线),或者根据需求设置固定偏移量。 - 调整
x1的计算为vp_x_loc + bar_width_val,从左侧向右延伸宽度即可。
关键细节说明
xloc.bar_index是基于K线的序列索引,而非时间轴,所以滚动、缩放时不会跟随时间移动,只会固定在指定的K线位置。- 如果需要更精准的屏幕级控制,可以使用
xloc.pixel:通过chart.pixel_width获取图表宽度,右侧设为chart.pixel_width,左侧设为0,但需要额外处理不同分辨率下的适配逻辑。
内容的提问来源于stack exchange,提问作者helanom
相关产品推荐
相关产品推荐

