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

Pine Script:对象是否均为Series类型?如何创建常量自定义对象?

Pine Script自定义对象类型与常量问题解答

问题重现

测试代码

//@version=5
indicator("tickerid", overlay = true)

closevalue(tickerid) =>
    sec = request.security(tickerid, '60', close)

type security_type
    string ticker

var security_type mysecurity = security_type.new(syminfo.tickerid)

plot(closevalue(syminfo.tickerid))
plot(closevalue(mysecurity.ticker))

报错信息

Cannot call '#f0' with argument 'tickerid'='mysecurity.ticker'. An argument of 'series string' type was used but a 'simple string' is expected.


问题解答

1. 所有对象(类型)是否均为Series?

不是,但自定义对象的属性默认都是Series类型。Pine Script里用type定义的自定义对象,不管初始化属性时用的是简单值还是Series,最终属性都会被处理成Series。哪怕对象本身是用var声明的常量,属性依然和K线序列绑定,属于Series类型。

2. 自定义对象能否为常量?

可以,但这里的“常量”指的是对象实例只会在脚本启动时初始化一次(靠var实现),后续每根K线都不会重新创建这个对象。但对象的属性还是Series类型,没法变成非序列的简单常量——这是Pine Script自定义对象的设计逻辑决定的。

3. 如何创建常量自定义对象?

用var声明对象实例就能得到“常量对象”,比如你代码里的var security_type mysecurity = security_type.new(syminfo.tickerid),这个对象确实只会初始化一次。但如果要把它的属性传给需要简单值的函数(比如request.security),得把Series类型的属性转换成简单值,比如:

// 提取属性的初始值存为简单字符串常量
var string fixed_ticker = mysecurity.ticker[0]
plot(closevalue(fixed_ticker))

或者干脆把简单值提前存在独立的var变量里,再传给对象初始化:

var string fixed_ticker = syminfo.tickerid
var security_type mysecurity = security_type.new(fixed_ticker)
plot(closevalue(fixed_ticker))

4. 为何var声明未达到预期效果?

var管的是对象实例的初始化时机,让它只在第一根K线创建一次,不会重复生成。但它管不了对象属性的类型——自定义对象的属性天生就是Series类型,哪怕你用简单值初始化,Pine Script也会把它包装成序列值。而request.security的第一个参数必须是简单字符串,不能是Series字符串,所以直接传mysecurity.ticker就会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:24