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

Indie指标开发报错:Symbol self.length not found问题求助

Indie指标开发报错:Symbol self.length not found问题求助

嘿,这个问题我之前开发Indie指标时也踩过类似的坑,咱们一步步来把它解决掉!

问题根源

你当前的代码有两个关键问题导致了self.length找不到的报错:

  1. calc方法的签名错误:你把length作为方法参数声明了,但Indie框架在调用calc时并不会传递这个参数,反而会因为签名不匹配干扰属性的正常访问;
  2. 虽然用@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:34:37