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

自适应移动平均交易系统报public修饰符无效错误如何解决

错误原因

触发该报错的核心是C#语法规则限制:

  • 你在第21行写的属性声明public int AvgTrueRange.value1 { get; set; }不符合C#类成员命名规则,.是成员访问运算符,不能出现在自定义属性/字段的名称中。
  • 编译器会把AvgTrueRange.value1识别为显式接口实现语法,而显式接口实现的成员不允许添加public这类访问修饰符,因此直接抛出以下错误:

the modifier public is not valid for this item
哪怕你删掉public也会因为语法不匹配继续报错。

修复方案

第一步:修复核心语法错误

根据你的业务逻辑二选一即可:

  • 如果你是要在当前类中新增一个存储ATR阈值的属性,直接将属性名修改为合法的C#命名即可,示例:
// 替换原第21行代码
public int AtrThreshold { get; set; }

后续构造函数赋值、逻辑判断中用到AvgTrueRange.value1的地方统一替换为AtrThreshold。

  • 如果你是要访问已经初始化过的AvgTrueRange指标实例的value1成员,不需要在当前类重复声明,直接删除第21行的整行代码即可。

第二步:修复代码中其他潜在编译错误

你的代码还有多处不符合C#语法的问题,需要同步修改才能正常运行:

  1. 补全FirstAverage方法的返回值:非void方法必须保证所有执行分支都有返回值,示例修改:
private double FirstAverage()
{
    if (AverageTrueRange < AtrThreshold)
        return FirstLength;
    return 0; // 替换为你的业务逻辑需要的默认返回值
}
  1. 修正方法调用语法:CalcBar中switch (FirstAverage)需要改为switch (FirstAverage()),FirstAverage是方法,必须加括号调用才能拿到返回值参与判断。
  2. 补全括号:Bars.Close.CrossesOver所在的if判断缺少右括号,修改为:
if (Bars.CurrentBar > 1 && Bars.Close.CrossesOver(FirstAverage(), ExecInfo.MaxBarsBack))
  1. 修正switch case语法:C#中case后面必须跟常量,你当前写的case FirstLength:不合法,因为FirstLength是可变属性,建议将这段switch逻辑替换为if判断。

内容的提问来源于stack exchange,提问作者Vittoria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:09:03