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

创建UDT后,何处将字段声明为simple int适配函数参数?

解决Pine Script中UDT字段与simple int函数参数不兼容的问题

你遇到的问题是Pine Script v6里,UDT(用户定义类型)的字段默认会被识别为series类型——哪怕初始化时用的是常量值,而你的square函数要求输入simple int类型,这就导致了类型不匹配的报错。

下面是两种可行的解决办法:

方案1:在UDT定义时指定字段为simple int

直接在定义Test类型的时候,把Field1的类型明确声明为simple int,这样创建实例后,字段就会是simple类型,完全符合函数的参数要求。

修改后的完整代码:

//@version=6
indicator("My script")

// 要求simple int输入的函数
square( simple int n ) => n*n

// 定义UDT时将字段声明为simple int
type Test
    simple int Field1

// 创建UDT实例
var A = Test.new( Field1 = 8 )

// 现在可以正常调用函数
plot( square( A.Field1 ) )

方案2:调用函数时转换字段类型

如果没办法修改UDT的定义,可以在调用square函数时,用simple()函数把A.Field1转换成simple int类型(注意:这种转换只适用于字段值是编译时就能确定的常量的情况)。

修改后的完整代码:

//@version=6
indicator("My script")

square( simple int n ) => n*n

type Test
    int Field1

var A = Test.new( Field1 = 8 )

// 转换为simple int后传入函数
plot( square( simple(A.Field1) ) )

原来的代码报错的核心原因是:Pine Script里默认的int字段属于series类型,即便你用var声明实例并赋值常量,字段依然会保留series属性;而simple int要求值在编译阶段就确定,不能随K线变化,所以必须显式指定类型或者做转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:42:48