在正式开始写我们自己的EA之前,我们需要先学习写语法基础,确保我们都理解代码世界里最基本的一些规则。如果你有其他编程经验,这部分可以快速跳过;但如果你是第一次接触代码,请务必仔细阅读,这能帮你避开新手80%的低级错误。
语法 (Syntax)
如果你接触过C++、PHP这类语言,那MQL4会让你感到非常亲切。对于纯新手来说,你只需要记住一个最核心的规则。
在MQL4里,分号(;
)就像是我们中文里的句号。它用来告诉编译器:“这句话说完了”。每一句完整的指令,都必须用分号来结束。
// 获取上一根K线的高点值
double LastHigh = High[1];
// 拼接一个可以写成多行的字符串,但注意结尾的分号
string MultiLine = StringConcatenate("这是一个跨行语句。",
"这是一个跨行语句。");
学长避坑指南: 忘记在语句末尾加分号,是新手程序员犯的最高频的错误,没有之一。当你编译代码时,如果看到“semicolon expected”(缺少分号)的错误提示,第一时间就去检查是不是哪句话忘了加“;
”。
当然,也有例外。那些由一对大括号{}
包裹起来的代码块,本身是不需要分号的。你可以把大括号理解为一个“容器”,比如if
条件判断、for
循环或者一个函数。容器的“盖子”{
和“盒子底部”}
本身不需要句号,但放在容器里的每一句话,依然要严格遵守用分号结尾的规则。
if(Compound == true)
{
// 大括号内的语句,是独立的指令,必须以分号结束
Print("这是一个复合表达式内的语句");
}
// 结束大括号}的后面,也不需要加分号
注释
注释是代码中非常重要的一个部分,它并不会被执行,是专门写给我们人看的。它的主要作用有两个:
- 写备忘录:当你隔了几个月再回来看自己写的复杂策略时,如果没有注释,你可能完全想不起来当初某段代码是为了实现什么逻辑。好的注释,是你写给未来自己的“说明书”。
- 调试代码:这是一个超级实用的技巧。当你怀疑某段代码有问题时,不用急着删掉它。先用注释把它“屏蔽”掉,让它暂时不生效,然后编译运行看看结果。这是我们排查问题最高效的方法之一。
MQL4中有两种注释方法:
单行注释:使用双斜杠//
,从//
开始直到这一行的末尾,都会被当作注释。
// 这是一个单行注释,从这里开始直到行尾
多行注释:以/*
开始,以*/
结束。可以把一大段代码或文字包裹起来。
/*
这是一个多行注释块,
可以包含任意多行文本,
这里的所有内容都会被当作注释处理。
*/
标识符
标识符,说白了就是我们给变量和函数起的“名字”。就像每个人都有自己的名字一样,代码里的每个“东西”也需要一个独一无二的名字,方便我们随时调用它。
给变量起名是一门艺术,也是一个好习惯。比如,用来存储止损价格的变量,我们最好叫它StopLoss
或者sl_price
,而不要随便叫a
或者x1
。好的命名能让你的代码像一篇流畅的文章,而不是一本天书。
当然,起名也要遵守一些基本规则:
- 可以由字母、数字和下划线
_
组成。 - 名字总长度不能超过31个字符。
- 绝对不能使用MQL4语言自身已经用掉的词(称为“保留字”),比如
if
,for
,double
,int
这些词都有特殊用途了,你不能再用它们来当变量名。
// 定义一个双精度浮点型变量,它的“名字”(标识符)是StopLoss
double StopLoss;
// 声明一个返回整数的自定义函数,它的“名字”(标识符)是Order_Count
int Order_Count()
学长避坑指南:
MQL4是严格区分大小写的!这意味着StopLoss
和stoploss
在它眼里是两个完全不同的东西。无数新手因为大小写问题,导致变量找不到、函数不执行,白白浪费了大量时间去排查。请务必、务必、务必在写代码时,确保你引用的变量或函数,其大小写与你当初定义它时完全一致。