Indie指标开发报错:Symbol self.length not found问题求助
Indie指标开发报错:Symbol self.length not found问题求助
嘿,这个问题我之前开发Indie指标时也踩过类似的坑,咱们一步步来把它解决掉!
问题根源
你当前的代码有两个关键问题导致了self.length找不到的报错:
calc方法的签名错误:你把length作为方法参数声明了,但Indie框架在调用calc时并不会传递这个参数,反而会因为签名不匹配干扰属性的正常访问;- 虽然用
@param装饰器定义的参数会自动绑定到self实例上,但错误的方法签名打乱了框架的属性注入逻辑,导致self.length无法被正确识别。
修复方案
只需要调整calc方法的签名,并确保正确访问参数属性即可,以下是修正后的完整代码:
# indie:lang_version = 5 from indie import indicator, param, plot, color, MainContext from indie.algorithms import Highest, Lowest @indicator("Support, Resistance and Median with Trend", overlay_main_pane=True) @param.int("length", default=22, min=1, title="Historical Length") @plot.line("resistance", color=color.RED, line_width=2, title="Resistance") @plot.line("support", color=color.GREEN, line_width=2, title="Support") @plot.line("median", color=color.WHITE, line_width=1, title="Median") class Main(MainContext): # 修正:去掉calc方法的length参数,保持默认签名 def calc(self): # 正确通过self.length访问框架注入的参数 highest_high = Highest.new(self.high, self.length)[0] lowest_low = Lowest.new(self.low, self.length)[0] resistance_level = highest_high support_level = lowest_low median_level = (resistance_level + support_level) / 2 # 返回顺序要和@plot装饰器的定义顺序完全对应(resistance → support → median) return resistance_level, support_level, median_level
额外注意事项
- 所有用
@param系列装饰器(比如@param.int、@param.float)定义的参数,都会自动成为Main类实例的属性,不需要手动初始化,直接用self.参数名就能访问; calc方法的返回值顺序必须和@plot装饰器的定义顺序完全一致,否则会导致绘图数据和指标名称不匹配;Highest.new(self.high, self.length)[0]里的[0]是取当前K线周期的最高值,如果你需要获取完整的历史序列可以去掉[0]。
备注:内容来源于stack exchange,提问作者Pavlito
相关产品推荐
相关产品推荐

