如何将float[]转换为series float以实现小周期日收盘价绘图?
解决Pine Script数组转序列的plot报错问题
错误根源
plot()函数的series参数要求输入序列类型(series float)——也就是每根K线对应一个单值的数据流,但你代码里的_1d_close是数组(float[]),属于一组值的集合,类型不兼容才会触发报错。
修正思路:不用数组,直接用序列逻辑维护日收盘价
Pine Script的序列特性本身就能跟踪日K收盘价,没必要用数组存储。下面是修正后的可运行代码:
//@version=5 indicator("最近10根日K收盘价", overlay=true) lookback = 10 // 要展示的日K数量 // 获取日周期收盘价序列 daily_close = request.security(syminfo.tickerid, "D", close) // 标记小周期图上的日K切换点 new_day = ta.change(time("D")) != 0 // 用var数组维护最近10个日收盘价(只初始化一次) var float[] daily_closes = array.new_float(lookback) // 当日K切换时,把前一个日收盘价加入数组头部,移除最旧的尾部值 if new_day array.unshift(daily_closes, daily_close[1]) if array.size(daily_closes) > lookback array.pop(daily_closes) // 更新数组最后一位为当前日的最新收盘价(因为当日还没走完,价格会变动) array.set(daily_closes, array.size(daily_closes)-1, daily_close) // 将数组转换为plot可接受的序列:匹配每根小K线对应的日收盘价 current_daily_close = na for i = 0 to lookback-1 // 定位对应日K的时间范围 target_day_time = time("D", lookback=i) if time >= target_day_time current_daily_close = array.get(daily_closes, i) // 绘制最终的序列值 plot(current_daily_close, title="最近10根日K收盘价", color=color.green, linewidth=2, style=plot.style_line)
代码说明
- 获取日收盘价:通过
request.security()拉取日周期收盘价,在小周期图上每根K线都会对应所属日的价格。 - 日切换判断:
new_day标记哪根小K线是新一天的开始,用来触发数组更新。 - 数组维护历史数据:用
var数组存最近10个日收盘价,新日到来时自动更新,保证数据始终是最新的10根。 - 数组转序列:通过循环判断当前小K线属于哪个日K的时间区间,从数组中取出对应价格赋值给序列变量,这样
plot()就能接收正确的参数类型。
更简洁的实现方式
用ta.valuewhen()直接抓取历史日收盘价,省去部分数组操作:
//@version=5 indicator("最近10根日K收盘价", overlay=true) lookback = 10 // 获取日收盘价和日切换信号 daily_close = request.security(syminfo.tickerid, "D", close) new_day = ta.change(time("D")) != 0 // 维护最近10个日收盘价的数组 var float[] daily_closes = array.new_float() if new_day array.unshift(daily_closes, daily_close[1]) array.set(daily_closes, 0, daily_close) // 实时更新当前日收盘价 if array.size(daily_closes) > lookback array.pop(daily_closes) // 生成plot可用的序列 plot_series = na for i = 0 to array.size(daily_closes)-1 plot_series := ta.valuewhen(new_day, array.get(daily_closes, i), i) plot(plot_series, title="最近10根日K收盘价", color=color.green, linewidth=2)
内容的提问来源于stack exchange,提问作者HalSkyTrader
相关产品推荐
相关产品推荐

