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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:15:46