Skip to content

3种表达式

这三种表达式是编写策略逻辑的核心工具,需结合案例熟练掌握。

一、算术表达式

作用:执行加减乘除等数学运算,返回数值结果。
核心运算符

运算符含义示例结果
+加法35 + 4580
-减法35 - 45-10
*乘法35 * 451575
/除法35.0 / 45.00.777...

代码示例

cpp
int OnInit()  
{  
    int currentRSI = 35;   // 当前RSI值(整型)  
    int prevRSI = 45;      // 前一根RSI值(整型)  
    
    // 加法:计算RSI和  
    int sum = currentRSI + prevRSI;  
    Print("RSI和:", sum);  // 输出:80  
    
    // 减法:计算RSI差值  
    int diff = currentRSI - prevRSI;  
    Print("RSI差:", diff);  // 输出:-10  
    
    // 乘法:计算乘积  
    int product = currentRSI * prevRSI;  
    Print("RSI乘积:", product);  // 输出:1575  
    
    // 除法:计算比值(需用浮点型接收)  
    double ratio = (double)currentRSI / prevRSI;  
    Print("RSI比值:", ratio);  // 输出:0.777777...  
}

注意事项

  1. 类型转换:整数相除需用double强制转换(如(double)a / b),避免精度丢失(int相除会截断小数)。
  2. 运算符优先级:遵循数学规则(乘除优先于加减),可通过括号改变优先级(如(a + b) * c)。

二、关系表达式

作用:比较两个值的关系,返回布尔值(true/false)。
核心运算符

运算符含义示例结果
>大于35 > 45false
<小于35 < 45true
==等于50 == 50true
!=不等于50 != 50false
>=大于等于35 >= 45false
<=小于等于35 <= 45true

代码示例

cpp
int OnInit()  
{  
    int currentPrice = 50;  
    int targetPrice = 50;  
    
    // 大于判断  
    bool isGreater = currentPrice > targetPrice;  
    Print("价格大于目标价?", isGreater);  // 输出:false  
    
    // 小于判断  
    bool isLesser = currentPrice < targetPrice;  
    Print("价格小于目标价?", isLesser);  // 输出:false  
    
    // 等于判断(注意是双等号!)  
    bool isEqual = currentPrice == targetPrice;  
    Print("价格等于目标价?", isEqual);  // 输出:true  
    
    // 不等于判断  
    bool isNotEqual = currentPrice != targetPrice;  
    Print("价格不等于目标价?", isNotEqual);  // 输出:false  
}

注意事项

  • 双等号==:区分赋值号=(如a = 5是赋值,a == 5是判断相等)。
  • 浮点型比较:避免直接用==比较浮点型(因精度问题),改用差值判断(如MathAbs(a - b) < 0.0001)。

三、逻辑表达式

作用:组合多个布尔值,返回新的布尔值,常用于条件判断。
核心运算符

运算符含义示例结果
&&逻辑与(且)(5 > 3) && (4 < 6)true
||逻辑或(或)(5 > 3) || (4 > 6)true
!逻辑非(取反)!(5 > 3)false

代码示例

cpp
int OnInit()  
{  
    bool isUptrend = true;   // 是否处于上升趋势  
    bool isHighVolume = false; // 成交量是否高  
    
    // 逻辑与:同时满足两个条件才开仓  
    bool canBuy = isUptrend && isHighVolume;  
    Print("可以买入吗?", canBuy);  // 输出:false(因isHighVolume为false)  
    
    // 逻辑或:满足任意条件则预警  
    bool needAlert = isUptrend || isHighVolume;  
    Print("需要预警吗?", needAlert);  // 输出:true(因isUptrend为true)  
    
    // 逻辑非:取反当前趋势状态  
    bool isNotUptrend = !isUptrend;  
    Print("非上升趋势吗?", isNotUptrend);  // 输出:false  
}

逻辑运算规则

  • 与(&&):全真为真,一假则假。
  • 或(||):一真为真,全假则假。
  • 非(!):真变假,假变真。

四、实战调试技巧

  1. Print函数调试

    • 在代码中插入Print("信息:", 变量);,结果会显示在MT5的专家日志中(路径:查看→工具箱→专家)。
    • 替代Alert()避免频繁弹窗干扰,适合批量输出调试信息。
  2. 运算符优先级

    • 记忆口诀:非→算术→关系→逻辑(如!a && b > c等价于(!a) && (b > c))。
    • 复杂逻辑建议用括号明确优先级,避免歧义。