VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 4
声望: 0

Traceback (most recent call last):
File "H:\veighna_studio\lib\site-packages\vnpy_ctastrategy\ui\widget.py", line 168, in add_strategy
parameters: dict = self.cta_engine.get_strategy_class_parameters(class_name)
File "H:\veighna_studio\lib\site-packages\vnpy_ctastrategy\engine.py", line 858, in get_strategy_class_parameters
parameters[name] = getattr(strategy_class, name)
TypeError: getattr(): attribute name must be string

Super Moderator
avatar
加入于:
帖子: 23
声望: 3

根据你提供的错误信息,问题确实可能出在策略类的 parameters 列表定义上。getattr() 函数要求属性名称必须是字符串类型,而你的策略类中可能存在非字符串类型的元素。

解决方法

  1. 检查 parameters 列表
    确保策略类中的 parameters 列表中的所有元素都是字符串类型。例如:

    parameters: list = ["rsi_window", "rsi_level", "cci_window"]
    

    如果列表中包含非字符串类型的元素,比如整数或浮点数,会导致 getattr() 函数抛出 TypeError

  2. 检查策略类定义
    确保策略类中所有参数的定义都是合法的字符串。例如:

    class MyStrategy(CtaTemplate):
        rsi_window: int = 14
        rsi_level: float = 20
        cci_window: int = 30
    
        parameters: list = ["rsi_window", "rsi_level", "cci_window"]
    

    如果 parameters 列表中包含未定义的参数名称,也会导致类似问题。

  3. 检查策略文件编码
    确保策略文件的编码格式为 UTF-8,避免因编码问题导致字符串解析错误。

示例代码

以下是一个正确的策略类定义示例:

from vnpy_ctastrategy import CtaTemplate

class MyStrategy(CtaTemplate):
    author: str = "VeighNa AI"

    rsi_window: int = 14
    rsi_level: float = 20
    cci_window: int = 30

    parameters: list = ["rsi_window", "rsi_level", "cci_window"]

总结

  • 确保 parameters 列表中的所有元素都是字符串类型。
  • 确保策略类中所有参数的定义与 parameters 列表中的名称一致。
  • 检查文件编码格式是否为 UTF-8。

如果问题仍然存在,请提供策略类的完整代码,以便进一步排查问题。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】