EasyLanguage动量指标报错‘此处需数值表达式’,求排查解决
解决EasyLanguage动量指标的数值表达式报错问题
报错Error 1; Numerical expression expected here的核心原因是:EasyLanguage不允许直接对布尔表达式(比如close > open[ss])进行算术运算,布尔值无法自动转换为数值参与加减操作,必须显式转换。
具体修改点
- 将循环内的布尔判断用
IIf函数转换为数值(涨势取1,跌势取0) - 补全循环结束语句的分号(EasyLanguage要求
end后必须加分号)
修正后的完整代码
inputs: length(14), calcLength(5), smoothLength(3); vars: s(0), MA(0), Main(0), Signal(0), ss(0); s = 0; for ss = 0 to (length - 1) begin s = s + IIf(close > open[ss], 1, 0) - IIf(close < open[ss], 1, 0); end; // 补充分号 MA = XAverage(s, calcLength); Main = XAverage(MA, smoothLength); Signal = XAverage(Main, smoothLength); plot1(Main, "Main", IIf(Main > Signal, green, red)); plot2(Signal, "Signal", IIf(Main > Signal, green, red)); plot3(0, "ZeroLine", gray); plot4(length, "UpperLine", red); plot5(-length, "LowerLine", green); plot6(length * 0.7, "Overbought", gray); plot7(-length * 0.7, "Oversold", gray); fillPlot(plot4, plot5, "Range", IIf(Main > Signal, green, red), 90); fillPlot(plot6, plot4, "Overbought", red, 90); fillPlot(plot7, plot5, "Oversold", green, 90);
逻辑说明
修改后,循环会逐周期对比当前收盘价与ss周期前的开盘价:
- 当收盘价高于前期开盘价时,给
s加1 - 当收盘价低于前期开盘价时,给
s减1
这样s就能正确累计动量差值,后续的移动均线计算也能正常执行,不会再触发数值表达式的报错。
内容的提问来源于stack exchange,提问作者Sam.H
相关产品推荐
相关产品推荐

