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

