Pine Script v6:var定义的UDT无法使用历史引用[1]问题咨询
Pine Script 6中var声明UDT无法使用历史引用的原因分析
在Pine Script 6里,用var声明的用户自定义类型(UDT)实例无法正常使用[1]这类历史引用,核心原因在于var关键字的特性:
var声明的变量是持久化单例,脚本运行全程只会初始化一次,每根K线更新时都是直接修改同一个实例的属性,不会为每根K线保留独立的历史副本。因此a[1].B访问的还是当前K线中a.B的最新值,自然和a.B相等。- 去掉
var声明的UDT实例,会在每根K线重新初始化并赋值,Pine Script会自动为这类变量维护历史数组,每根K线的实例状态都会被保存,此时a[1].B就能正确访问上一根K线的a.B值,和bar_index[1]一致。
结合你的示例代码来看:
- 用
var a = A.new()时,a从始至终都是同一个对象,每根K线执行a.B := bar_index都是覆盖同一个属性,所以(a[1]).B和a.B结果相同。 - 移除
var后,每根K线都会生成新的A实例,Pine Script保存了每根K线的实例数据,a[1].B就对应上一根K线的bar_index,和当前bar_index不相等,符合预期。
内容的提问来源于stack exchange,提问作者Micke
相关产品推荐
相关产品推荐

