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

