获取自定义对象数组最后元素时plot函数参数类型不匹配问题问询
问题解决:Pine Script自定义对象数组元素的plot展示问题
问题分析
报错的核心是类型不匹配:plot()函数要求传入series float类型的数值,但你直接传入了自定义的Candle对象。Candle是包含index、pivotHigh、pivotLow的复合类型,无法直接作为plot的参数。
解决方案
需要从Candle对象中提取具体的数值字段(比如pivotHigh或pivotLow),再传入plot()函数。同时优化最后一个元素的获取逻辑,具体修改如下:
修改后的完整代码
//@version=5 indicator("枢轴高点展示", overlay=true) pricePH = ta.pivothigh(10, 10) type Candle int index float pivotHigh float pivotLow var CandleArray = array.new<Candle>(0) if pricePH ph = Candle.new(time[10], high[10], low[10]) array.push(CandleArray, ph) // 提取数组最后一个Candle对象的pivotHigh字段 var float lastPivotHigh = na if array.size(CandleArray) > 0 lastCandle = array.get(CandleArray, array.size(CandleArray) - 1) lastPivotHigh := lastCandle.pivotHigh // 绘制最后一个枢轴高点 plot(lastPivotHigh, display = display.status_line, color=color.red, title="最后枢轴高点") // 保留原有的标签绘制逻辑 for newPH in CandleArray label.new(newPH.index, newPH.pivotHigh, str.tostring(newPH.pivotHigh), xloc.bar_time, style = label.style_label_down, color=color.blue)
关键修改点
- 新增
lastPivotHigh变量,专门存储从Candle对象中提取的pivotHigh数值(符合float类型要求) - 通过
.操作符从获取到的最后一个Candle对象lastCandle中,访问其pivotHigh字段并赋值给lastPivotHigh - 将
plot()的参数改为lastPivotHigh,满足函数对series float类型的要求
额外说明
在Pine Script中,自定义类型的对象不能直接作为需要基础数据类型(如float、int)的函数参数使用,必须提取对象内的具体字段值。你之前通过for-in循环访问数组元素的逻辑是正确的,因为循环中可以直接访问对象字段来创建标签;而plot需要的是连续的数值序列,因此要单独提取对应字段并维护成series变量。
内容的提问来源于stack exchange,提问作者x945
相关产品推荐
相关产品推荐

