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

Indie脚本中禁止使用global语句时,如何存储跨K线的持久化值?

Indie脚本中禁止使用global语句时,如何存储跨K线的持久化值?

嘿,刚好我对Indie脚本的状态管理比较熟悉,来帮你解决这个问题!

你遇到的global语句被禁止的问题,其实是Indie脚本环境的设计决定——它的执行模型是为了高效并行处理K线数据,全局变量很容易引发状态混乱或者线程安全问题,所以直接禁用了global的使用。

那正确的做法就是用你提到的MutSeriesF(或者对应类型的可变序列),这是Indie官方专门为跨K线存储可变值设计的工具,完全适配它的运行机制。

我把你的代码修改成正确的版本,你可以参考:

# indie:lang_version = 5
from indie import indicator, param, plot, color, MutSeriesF

@indicator("Persistent Value Example")
@param.int("length", default=10, min=1, title="Length")
@plot.line("trend_line", color=color.BLUE, title="Trend Line")
class MyIndicator:
    def __init__(self):
        # 初始化一个可变浮点序列,初始值设为0.0,用来存跨K线的值
        self.persistent_value = MutSeriesF(0.0)

    def Main(self, length):
        # 把当前K线的close值存入可变序列
        self.persistent_value[0] = self.close[0]

        # 如果你需要访问上一根K线存储的值,就用self.persistent_value[1]
        # 比如可以做这样的操作:prev_value = self.persistent_value[1]
        return self.persistent_value[0]

给你拆解一下关键修改点:

  • 首先导入了MutSeriesF,这是处理浮点型可变跨bar值的类型,如果要存整数就用MutSeriesI,布尔值用MutSeriesB,按需选择即可
  • 把指标改成了类的形式(这是Indie推荐的管理状态的方式),在__init__方法里初始化了MutSeriesF对象,作为实例的属性
  • 在Main方法里直接操作这个实例属性,不需要任何global声明,就能安全地在K线之间保留值
  • 如果要访问上一根K线存储的旧值,只需要用self.persistent_value[1],和你访问self.close[1]的方式完全一致

这样做完全符合Indie的运行规则,不会有报错,而且能安全地管理跨K线的状态,避免了全局变量带来的各种潜在问题。

备注:内容来源于stack exchange,提问作者turfira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:42:56