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

Pine Script V5:基于UDT数组绘制分段Fair Value价格线的问题

在TradingView Pine Script V5中实现分段式公允价格线

问题根源

你遇到的Object has no field Value错误,是因为FairValueArray是数组对象,它本身没有.Value属性——.Value是你定义的FairValue这个UDT的字段,得从数组的每一个元素里单独提取,而不是直接访问数组的这个属性。

另外,要实现分段绘制,核心是让每一根K线都匹配到对应日期区间的公允价格值,而不是只取数组最后一个值。

解决方案代码

//@version=5
indicator("分段公允价格线", overlay=true)

// 1. 定义UDT类型
type FairValue
    int date  // 用整数存储日期(TradingView中时间戳是秒级整数)
    float value

// 2. 创建并填充公允价格数组
var FairValueArray = array.new<FairValue>()
// 示例:添加几组日期-价格数据(用timestamp()生成秒级时间戳)
if barstate.islast
    array.push(FairValueArray, FairValue.new(timestamp(2024, 1, 1), 150.0))
    array.push(FairValueArray, FairValue.new(timestamp(2024, 3, 1), 160.0))
    array.push(FairValueArray, FairValue.new(timestamp(2024, 5, 1), 170.0))

// 3. 编写函数:匹配当前K线对应的公允价格
float getCurrentFairValue() =>
    currentTime = time
    fairValue = na
    // 倒序遍历数组:优先匹配离当前时间最近的有效日期
    for i = array.size(FairValueArray) - 1 downto 0
        fv = array.get(FairValueArray, i)
        if fv.date <= currentTime
            fairValue = fv.value
            break  // 找到符合条件的第一个值就退出
    fairValue

// 4. 生成系列值并绘制
currentFv = getCurrentFairValue()
plot(currentFv, color=color.blue, linewidth=2, title="公允价格线")

关键逻辑说明

  • 倒序遍历数组:确保优先匹配离当前时间最近、且日期≤当前时间的公允价格,保证每根K线对应正确的区间值。
  • 生成连续系列:getCurrentFairValue()会在每一根K线执行一次,返回对应价格,这样plot出来的是分段连续的线条,而非单条水平线。
  • 时间戳统一:TradingView的时间以秒级整数存储,所以UDT的date用int类型,用timestamp()可快速生成指定日期的时间戳。

注意事项

  • 如果你的日期是其他格式,需先转换成秒级时间戳,保证和当前K线的time格式一致。
  • 数组填充放在barstate.islast下,避免每次K线重复添加数据造成冗余。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:22:50