今天来聊聊MQL4编程中最最基础,也最重要的一个概念:变量(Variable)。
什么是变量?为什么要用它?
你可以把变量想象成一个贴着标签的小抽屉。我们可以把数字、文字、价格这些信息放进不同标签的抽屉里,方便之后随时拿出来用,或者更新成新的信息。
在写交易策略时,我们无时无刻不在和各种数据打交道,这时候变量就派上用场了:
- 需要记住某个重要的价格,比如开仓价、某个支撑阻力位。
- 需要保存一个计算好的交易手数,比如0.01手。
- 需要记录某个指标的计算结果,比如当前的RSI值。
- 需要标记一个状态,比如“今天是否已经开过仓了?”。
没有变量,我们的程序就失去了记忆能力,无法执行任何有意义的交易逻辑。
举个生活中的例子: 假设你拿来一个小抽屉,给它贴上标签box1
,然后把数字10放了进去。这个动作,用代码来写就是:
int box1 = 10;
这样,我们就拥有了一个名为box1
的变量,它的值是10。之后我们就可以用它来做计算、做逻辑判断,或者在未来的某个时候把里面的10换成20。
变量的构成
在MQL4里,创建一个变量(专业叫法是“声明变量”)通常遵循这个格式:
[数据类型] [变量名] = [初始值];
这个格式告诉电脑:我要一个什么类型的“抽屉”,这个抽屉叫什么名字,我一开始要往里面放什么东西。
至关重要的一步:为数据选择合适的“抽屉”类型
“数据类型”决定了你这个变量(抽屉)能装什么东西。选错了类型,程序就会出错。MQL4里,我们作为交易策略开发者,最常用的是以下几种:
- int:整数类型。用来存放不能有小数的数字。
- 交易场景:订单的编号(ticket)、K线的数量、循环次数等。
int ticket = 12345;
- double:双精度浮点型,也就是我们常说的小数。
- 交易场景:这是我们打交道最多的类型。几乎所有和价格相关的,比如开仓价、止损价、ATR指标值、账户余额等,都必须用
double
来存。 double lot = 0.01;
- 交易场景:这是我们打交道最多的类型。几乎所有和价格相关的,比如开仓价、止损价、ATR指标值、账户余额等,都必须用
- string:字符串类型,用来存放一串文本。文本内容必须用双引号
"
包起来。- 交易场景:交易的品种名称、EA的名称、想在图表上显示的提示信息等。
string symbol = "EURUSD";
- bool (boolean):布尔型,最简单的类型,只有两个值:
true
(真)或false
(假)。- 交易场景:这是我们策略逻辑里的“开关”。比如,用来标记“是否允许交易?”、“均线是否金叉了?”。
bool isTrading = true;
- datetime:日期时间类型。
- 交易场景:记录开仓时间、设置策略只在某个时间段(比如亚盘)运行。
datetime startTime = D'2025.01.01 08:00';
- color:颜色类型。
- 交易场景:设置指标线的颜色、画出的趋势线颜色等,让图表信息更清晰。
color buyColor = clrDodgerBlue;
使用变量:先声明,后赋值
变量必须先“声明”才能使用。声明就像是先准备好抽屉。之后,你可以随时通过“赋值”操作来修改抽屉里的东西。
// 1. 声明一个名为MyVariable的int类型变量,并给它一个初始值1
int MyVariable = 1;
// 2. 之后在代码的其他地方,可以修改它的值(赋值)
MyVariable = 5;
// 3. 也可以把其他变量的值赋给它
int YourVariable = 2;
MyVariable = YourVariable;
学长避坑指南:
- 先声明、后使用:你必须先告诉电脑
int MyVariable;
(我有一个叫MyVariable的抽屉),然后才能MyVariable = 5;
(往里面放东西)。如果你直接用一个没有声明过的变量,编译器会无情报错。 - 数据类型要匹配:这是最容易出问题的环节。千万不要试图把一个小数(
double
)硬塞进一个只能装整数(int
)的变量里。虽然MQL4有时会帮你强制转换,但它的做法通常是粗暴地“砍掉”小数部分,而不是我们以为的四舍五入。比如int a = 1.9;
,最终a
的值会是1,而不是2。这种偏差在需要精密计算的价格和止损策略中是致命的。 - 大小写敏感:再次强调,
MyVariable
和myvariable
是两个完全不同的变量。保持命名大小写的一致性,能避免90%的“变量未定义”错误。 - 重复声明:同一个变量名在同一个代码范围内只能声明一次。你不能先写
int a = 1;
,过几行又写int a = 2;
,这是不允许的,编译器会告诉你变量被重复定义了。正确的修改方法是直接赋值:a = 2;
。