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
相关产品推荐
相关产品推荐

