3种表达式
这三种表达式是编写策略逻辑的核心工具,需结合案例熟练掌握。
一、算术表达式
作用:执行加减乘除等数学运算,返回数值结果。
核心运算符:
运算符 | 含义 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 35 + 45 | 80 |
- | 减法 | 35 - 45 | -10 |
* | 乘法 | 35 * 45 | 1575 |
/ | 除法 | 35.0 / 45.0 | 0.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...
}
注意事项:
- 类型转换:整数相除需用
double
强制转换(如(double)a / b
),避免精度丢失(int
相除会截断小数)。 - 运算符优先级:遵循数学规则(乘除优先于加减),可通过括号改变优先级(如
(a + b) * c
)。
二、关系表达式
作用:比较两个值的关系,返回布尔值(true
/false
)。
核心运算符:
运算符 | 含义 | 示例 | 结果 |
---|---|---|---|
> | 大于 | 35 > 45 | false |
< | 小于 | 35 < 45 | true |
== | 等于 | 50 == 50 | true |
!= | 不等于 | 50 != 50 | false |
>= | 大于等于 | 35 >= 45 | false |
<= | 小于等于 | 35 <= 45 | true |
代码示例:
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
}
逻辑运算规则:
- 与(&&):全真为真,一假则假。
- 或(||):一真为真,全假则假。
- 非(!):真变假,假变真。
四、实战调试技巧
Print函数调试:
- 在代码中插入
Print("信息:", 变量);
,结果会显示在MT5的专家日志中(路径:查看→工具箱→专家
)。 - 替代
Alert()
避免频繁弹窗干扰,适合批量输出调试信息。
- 在代码中插入
运算符优先级:
- 记忆口诀:非→算术→关系→逻辑(如
!a && b > c
等价于(!a) && (b > c)
)。 - 复杂逻辑建议用括号明确优先级,避免歧义。
- 记忆口诀:非→算术→关系→逻辑(如