如何将历史数据(overlay=false)向未来延伸绘制?以plot(close[500])为例
Pine Script 实现历史数据延伸绘制方案
要实现将close[500]这类滞后历史数据延伸显示100根K线(对应从close[500]到close[400]的历史值),由于Pine Script的plot()函数无法直接绘制到当前K线之后的位置,我们可以通过手动创建line对象来完成延伸绘制。以下是具体解决方案:
代码实现
//@version=5 indicator("延伸滞后收盘价至未来", overlay=false) // 定义参数:回溯周期和延伸周期 lookback_period = 500 extend_period = 100 // 绘制基础的滞后收盘价(到当前K线为止) plot(close[lookback_period], title="基础滞后收盘价", color=color.blue, linewidth=2) // 在最后一根K线时,绘制延伸线段 if barstate.islast // 存储需要延伸的100个历史收盘价 var float[] extend_values = array.new_float() array.clear(extend_values) // 获取对应序列:第1根延伸对应close[500],第100根对应close[400] for i = 0 to extend_period array.push(extend_values, close[lookback_period - i]) // 清除之前创建的延伸线,避免重复绘制 var line[] extend_lines = array.new_line() while array.size(extend_lines) > 0 line.delete(array.pop(extend_lines)) // 逐段绘制延伸线 for i = 0 to array.size(extend_values) - 2 x_start = bar_index + i x_end = bar_index + i + 1 y_start = array.get(extend_values, i) y_end = array.get(extend_values, i + 1) new_line = line.new(x_start, y_start, x_end, y_end, color=color.red, linewidth=2) array.push(extend_lines, new_line)
逻辑说明
- 基础绘制:先用
plot(close[lookback_period])绘制常规的滞后收盘价,这部分会自然终止于当前K线。 - 延伸数据准备:当处于最后一根K线时,通过循环获取从
close[500]到close[400]的历史收盘价序列,存入数组。 - 动态绘制延伸线:创建
line对象连接数组中的连续值,将这些历史数据绘制到当前K线之后的对应位置,实现“延伸至未来”的视觉效果。 - 资源清理:每次绘制前清除旧的
line对象,避免图表上出现重复线条。
内容的提问来源于stack exchange,提问作者Jim Fredrickson
相关产品推荐
相关产品推荐

