You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取自定义对象数组最后元素时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:18