Pinescript自定义值序列绘制报错(KO日线图)求助
解决Pine Script绘制自定义数值序列的错误问题
问题描述
我有一组数值,希望从2022年2月2日开始,在第一根K线绘制第一个值、第二根K线绘制第二个值,以此将所有数值连成一条线。但在KO日线图上运行以下Pine Script脚本时,始终出现「Study error」错误:
//@version=5 indicator("Plot Values", overlay=true) // Define the list of values float[] values = array.from(60.56, 60.95, 61.36, 61.11, 61.41, 61.78, 61.32, 61.36, 60.7, 60.69, 60.82, 60.87, 61.64, 62.2, 62.25, 61.84, 61.02, 62.15, 62.21, 62.06, 62.29, 62.4, 62.51, 61.62, 59.79, 59.28, 58.41, 58.11, 58.38, 59.14, 59.34, 59.8, 59.99, 60.35, 60.63, 60.49, 60.79, 61.25, 61.66, 61.97, 62.12, 62.05, 62.55, 62.55, 62.5, 62.87, 63.22, 63.6, 63.73, 64.24, 64.54, 64.84, 64.59, 64.89, 65.55, 65.96, 65.52, 65.78, 65.33, 65.47, 65.92, 65.11, 64.08, 63.46, 64.43, 64.48, 64.64, 64.62, 64.24, 64.28, 64.42, 65.22, 65.68, 65.74, 62.93, 61.12, 61.03, 62.16, 63.31, 63.78, 64.1, 64.46, 63.79, 63.35, 63.58, 63.2, 63.0, 63.15, 62.99, 62.25, 61.73, 61.49, 60.09, 59.83, 59.36, 59.4, 60.2, 60.79, 61.46, 62.44, 62.73, 62.45, 62.62, 62.8, 63.78, 63.47, 63.43, 63.11, 63.13, 63.01, 62.8, 62.54, 62.32, 62.43, 61.95, 62.31, 61.81, 61.53, 61.57, 61.95, 62.73, 62.9, 63.62, 63.96, 64.31, 63.89, 63.91, 63.76, 63.53, 63.18, 63.1, 63.44, 63.3, 63.55, 64.14, 64.69, 64.81, 65.06, 65.13, 64.55, 64.38, 64.37, 64.55, 63.66, 63.09, 62.51, 62.01, 62.01, 61.48, 61.29, 61.92, 62.04, 62.21, 62.39, 61.2, 60.95, 60.07, 59.74, 59.9, 59.9, 59.59, 59.39, 58.9, 58.26, 57.1, 57.03, 56.74, 56.3, 56.51, 56.68, 56.41, 55.56, 54.91, 54.59, 54.52, 54.9, 55.5, 55.18, 55.49, 56.08, 56.01, 55.43, 55.76, 56.88, 58.16, 58.92, 59.3, 60.2, 59.98, 59.77, 59.18, 58.93, 59.13, 59.35, 59.51, 59.05, 60.18, 60.89, 60.79, 60.69, 60.59, 60.66, 60.96, 61.65, 62.08, 62.42, 62.59, 62.66, 62.55, 63.2, 63.57, 64.05, 63.69, 63.54, 63.54, 63.71, 63.36, 63.74, 63.89, 63.95, 63.43, 63.01, 62.91, 62.83, 63.43, 63.37, 63.65, 64.0, 63.73, 63.87, 63.71, 63.24, 63.04, 62.52, 63.06, 62.78, 62.38, 62.15, 61.57, 61.48, 61.6, 60.5, 60.02, 60.06, 60.16, 60.4, 60.73, 60.78, 60.6) a = 0.0 start = timestamp(2022, 2, 2) if time >= start for i = 0 to 250 a := array.get(values, i) plot(series = a, color=color.blue, linewidth=2)
错误原因分析
- 循环逻辑无效:原脚本在每根符合时间条件的K线中,都会执行完整的
for循环,最终a只会被赋值为数组的第251个元素,完全无法实现“每根K线对应一个数组值”的需求。 - 数组越界风险:如果数组长度不足251,
array.get(values, i)会触发索引越界错误,直接导致脚本崩溃。 - 无K线计数机制:没有对起始时间后的K线进行连续计数,无法将数组索引与K线顺序一一对应。
修正后的脚本
//@version=5 indicator("Plot Values", overlay=true) // 定义数值数组 float[] values = array.from(60.56, 60.95, 61.36, 61.11, 61.41, 61.78, 61.32, 61.36, 60.7, 60.69, 60.82, 60.87, 61.64, 62.2, 62.25, 61.84, 61.02, 62.15, 62.21, 62.06, 62.29, 62.4, 62.51, 61.62, 59.79, 59.28, 58.41, 58.11, 58.38, 59.14, 59.34, 59.8, 59.99, 60.35, 60.63, 60.49, 60.79, 61.25, 61.66, 61.97, 62.12, 62.05, 62.55, 62.55, 62.5, 62.87, 63.22, 63.6, 63.73, 64.24, 64.54, 64.84, 64.59, 64.89, 65.55, 65.96, 65.52, 65.78, 65.33, 65.47, 65.92, 65.11, 64.08, 63.46, 64.43, 64.48, 64.64, 64.62, 64.24, 64.28, 64.42, 65.22, 65.68, 65.74, 62.93, 61.12, 61.03, 62.16, 63.31, 63.78, 64.1, 64.46, 63.79, 63.35, 63.58, 63.2, 63.0, 63.15, 62.99, 62.25, 61.73, 61.49, 60.09, 59.83, 59.36, 59.4, 60.2, 60.79, 61.46, 62.44, 62.73, 62.45, 62.62, 62.8, 63.78, 63.47, 63.43, 63.11, 63.13, 63.01, 62.8, 62.54, 62.32, 62.43, 61.95, 62.31, 61.81, 61.53, 61.57, 61.95, 62.73, 62.9, 63.62, 63.96, 64.31, 63.89, 63.91, 63.76, 63.53, 63.18, 63.1, 63.44, 63.3, 63.55, 64.14, 64.69, 64.81, 65.06, 65.13, 64.55, 64.38, 64.37, 64.55, 63.66, 63.09, 62.51, 62.01, 62.01, 61.48, 61.29, 61.92, 62.04, 62.21, 62.39, 61.2, 60.95, 60.07, 59.74, 59.9, 59.9, 59.59, 59.39, 58.9, 58.26, 57.1, 57.03, 56.74, 56.3, 56.51, 56.68, 56.41, 55.56, 54.91, 54.59, 54.52, 54.9, 55.5, 55.18, 55.49, 56.08, 56.01, 55.43, 55.76, 56.88, 58.16, 58.92, 59.3, 60.2, 59.98, 59.77, 59.18, 58.93, 59.13, 59.35, 59.51, 59.05, 60.18, 60.89, 60.79, 60.69, 60.59, 60.66, 60.96, 61.65, 62.08, 62.42, 62.59, 62.66, 62.55, 63.2, 63.57, 64.05, 63.69, 63.54, 63.54, 63.71, 63.36, 63.74, 63.89, 63.95, 63.43, 63.01, 62.91, 62.83, 63.43, 63.37, 63.65, 64.0, 63.73, 63.87, 63.71, 63.24, 63.04, 62.52, 63.06, 62.78, 62.38, 62.15, 61.57, 61.48, 61.6, 60.5, 60.02, 60.06, 60.16, 60.4, 60.73, 60.78, 60.6) // 定义起始时间 start_date = timestamp(2022, 2, 2) // 用var定义计数器,确保不会在每根K线重置 var int bar_count = 0 float plot_value = na // 当K线时间大于等于起始时间时,递增计数器并获取对应数值 if time >= start_date bar_count += 1 // 检查计数器是否在数组索引范围内,避免越界 if bar_count <= array.size(values) plot_value := array.get(values, bar_count - 1) // 数组索引从0开始,计数器从1开始,所以减1 // 绘制数值线 plot(series=plot_value, color=color.blue, linewidth=2)
修正说明
var关键字使用:var int bar_count = 0确保计数器只初始化一次,不会在每根K线重新归零,实现对起始后K线的连续计数。- 索引对应逻辑:计数器从1开始递增,数组索引从0开始,因此用
bar_count - 1获取对应位置的数值。 - 越界保护:通过
bar_count <= array.size(values)判断,避免访问数组不存在的索引,防止报错。 - 取消无效循环:移除原脚本中无意义的
for循环,改为按K线顺序逐一获取数组值,
相关产品推荐
相关产品推荐

