在MQL5中能否通过if-else语句直接为变量赋值?
MQL5中if-else直接赋值的写法不可行,附正确实现方式
你写的这种把if-else语句直接放在赋值符号右侧的写法,在MQL5里无法正常编译运行。因为MQL5基于C++语法,if-else是流程控制语句,不是能返回值的表达式,不能直接作为赋值操作的右值使用。
正确的实现方式
有两种常用的替代方案:
方案1:使用三元条件运算符(?:)
这是最简洁的方式,适合二选一的条件赋值场景,语法格式为:变量 = 条件 ? 条件为真时的值 : 条件为假时的值;
把你的代码改成三元运算符版本如下:
void OnTick() { int UMA = (close > open) ? (high - close) : (high - open); int LMA = (close > open) ? (low - open) : (low - close); int UMA1 = (close > open) ? (close + UMAX) : (open + UMAX); int LMA1 = (close > open) ? (open + LMAX) : (close + LMAX); }
方案2:使用常规if-else语句拆分赋值
如果逻辑更复杂,或者你觉得三元运算符可读性差,可以拆分写成标准的if-else赋值:
void OnTick() { int UMA; if(close > open) UMA = high - close; else UMA = high - open; int LMA; if(close > open) LMA = low - open; else LMA = low - close; int UMA1; if(close > open) UMA1 = close + UMAX; else UMA1 = open + UMAX; int LMA1; if(close > open) LMA1 = open + LMAX; else LMA1 = close + LMAX; }
补充说明
- 代码里的
close、open、high、low在MQL5中是数组,直接使用默认取当前K线(即close[0]),若需指定其他周期或K线要补充索引。 UMAX和LMAX需要提前定义或赋值,否则编译会报错。
内容的提问来源于stack exchange,提问作者Foenkelito
相关产品推荐
相关产品推荐

