MQL语法
- MQL 语法
MQL (MetaQuotes Language) 是一种专为 MetaTrader 4 (MT4) 和 MetaTrader 5 (MT5) 交易平台设计的编程语言。 它主要用于开发 自动交易机器人(也称为 EA - Expert Advisors)、自定义指标、脚本和库文件。 本文将深入探讨 MQL4 的语法,为初学者提供一个全面的入门指南。 虽然 MQL5 语法在许多方面与 MQL4 相似,但本文将专注于 MQL4,因为它仍然是许多交易者使用的主要版本。
MQL4 基础
MQL4 是一种面向过程的编程语言,其语法深受 C 语言的影响。 理解其核心元素对于编写有效的交易程序至关重要。
- 数据类型:MQL4 支持多种数据类型,包括:
* `int`: 整数 (例如: -10, 0, 100) * `double`: 双精度浮点数 (例如: 1.234, -3.14159) – 用于货币对的价格和计算结果。 * `bool`: 布尔值 ( `true` 或 `false` ) – 用于条件判断。 * `string`: 字符串 (例如: "Hello, world!") – 用于处理文本信息,如订单注释。 * `datetime`: 日期和时间 (例如: 2023.10.27 10:00:00) – 用于记录事件发生的时间戳。 * `color`: 颜色值 – 用于在图表上显示颜色。
- 变量声明:在使用变量之前,必须先声明它们。 声明变量的语法如下:
```mql4 数据类型 变量名; ``` 例如: ```mql4 int myInteger; double myDouble = 1.5; string myString = "Trade Alert"; ```
- 运算符:MQL4 提供了各种运算符,用于执行数学、逻辑和比较操作。
* 算术运算符: `+`, `-`, `*`, `/`, `%` (取模) * 比较运算符: `==` (等于), `!=` (不等于), `>`, `<`, `>=`, `<=` * 逻辑运算符: `&&` (与), `||` (或), `!` (非) * 赋值运算符: `=`, `+=`, `-=`, `*=`, `/=`, `%=`
- 注释:注释用于解释代码,提高可读性。 MQL4 支持两种类型的注释:
* 单行注释:使用 `//` 开始。 * 多行注释:使用 `/*` 开始,`*/` 结束。
控制结构
控制结构允许程序根据条件执行不同的代码块。
- if-else 语句:根据条件执行不同的代码块。
```mql4 if (条件) { // 如果条件为真,执行此代码块 } else { // 如果条件为假,执行此代码块 } ``` 例如: ```mql4 if (Close[0] > Open[0]) { Print("当前蜡烛是阳线"); } else { Print("当前蜡烛是阴线"); } ```
- for 循环:重复执行代码块指定的次数。
```mql4 for (初始化; 条件; 递增/递减) { // 重复执行的代码块 } ``` 例如: ```mql4 for (int i = 0; i < 10; i++) { Print("Iteration: ", i); } ```
- while 循环:只要条件为真,就重复执行代码块。
```mql4 while (条件) { // 重复执行的代码块 } ``` 例如: ```mql4 int i = 0; while (i < 5) { Print("Count: ", i); i++; } ```
- switch 语句:根据变量的值选择不同的代码块执行。
```mql4 switch (变量) { case 值1: // 如果变量等于值1,执行此代码块 break; case 值2: // 如果变量等于值2,执行此代码块 break; default: // 如果变量不等于任何 case 值,执行此代码块 } ```
函数
函数是执行特定任务的代码块。它们可以接受参数并返回值。
- 函数定义:函数的语法如下:
```mql4 返回值类型 函数名(参数列表) { // 函数体 return 返回值; } ``` 例如: ```mql4 int CalculateSum(int a, int b) { int sum = a + b; return sum; } ```
- 函数调用:调用函数的语法如下:
```mql4 函数名(参数); ``` 例如: ```mql4 int result = CalculateSum(5, 3); Print("Sum: ", result); ```
- 内置函数:MQL4 提供了许多内置函数,用于执行各种任务,例如获取价格数据 (`iClose()`, `iOpen()`, `iHigh()`, `iLow()`), 订单管理 (`OrderSend()`, `OrderClose()`), 技术指标计算 (`MovingAverage()`, `RSI()`)。 了解并使用这些内置函数可以大大简化您的代码。
数组
数组用于存储相同类型的数据集合。
- 数组声明:数组的语法如下:
```mql4 数据类型 数组名[数组大小]; ``` 例如: ```mql4 double myArray[10]; // 声明一个包含 10 个双精度浮点数的数组 ```
- 数组访问:使用索引访问数组元素,索引从 0 开始。
```mql4 myArray[0] = 1.23; double value = myArray[5]; ```
- 多维数组:MQL4 支持多维数组。
```mql4 double my2DArray[3][4]; // 声明一个 3 行 4 列的二维数组 ```
预定义变量
MQL4 提供了许多预定义变量,用于访问平台信息和交易数据。
- `Symbol()`: 返回当前图表的货币对名称。
- `Period()`: 返回当前图表的时间周期 (例如: PERIOD_M1, PERIOD_H1, PERIOD_D1)。
- `Close[0]`: 返回当前蜡烛的收盘价。
- `Open[0]`: 返回当前蜡烛的开盘价。
- `High[0]`: 返回当前蜡烛的最高价。
- `Low[0]`: 返回当前蜡烛的最低价。
- `Volume[0]`: 返回当前蜡烛的成交量。
事件驱动编程
MQL4 程序通过事件触发执行。常见的事件包括:
- `OnInit()`: 在程序初始化时调用。
- `OnDeinit()`: 在程序卸载时调用。
- `OnTick()`: 每当收到新的报价时调用。 这是 自动交易机器人 的核心,用于执行交易逻辑。
- `OnTrade()`: 当交易事件发生时调用 (例如: 订单开仓、订单平仓)。
- `OnTimer()`: 当定时器触发时调用。
错误处理
良好的错误处理是编写可靠交易程序的重要组成部分。 MQL4 提供了 `GetLastError()` 函数,用于获取最后一个操作的错误代码。 使用 `Print()` 或 `Alert()` 函数将错误信息输出到日志或屏幕上,以便调试。
示例:简单的移动平均线交叉策略
以下是一个简单的示例,展示了如何使用 MQL4 编写一个基于移动平均线交叉的交易策略。
```mql4 //+------------------------------------------------------------------+ //| SimpleMA.mq4 | //| Copyright 2023, Your Name | //| https://www.example.com | //+------------------------------------------------------------------+
- property copyright "Copyright 2023, Your Name"
- property link "https://www.example.com"
extern int MAPeriod = 20; // 移动平均线的周期 extern double Lots = 0.1; // 交易手数
int OnInit() {
// 初始化代码 return(INIT_SUCCEEDED);
}
void OnTick() {
// 计算移动平均线 double ma = iMA(Symbol(), Period(), MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
// 获取当前价格 double currentPrice = Close[0];
// 检查是否有交易信号 if (currentPrice > ma && Close[1] <= ma) { // 买入信号 OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "MA Crossover", 12345, 0, Green); } else if (currentPrice < ma && Close[1] >= ma) { // 卖出信号 OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "MA Crossover", 12345, 0, Red); }
} ```
总结
MQL4 是一种功能强大的编程语言,可以用于开发各种交易工具和策略。 掌握 MQL4 语法是成为一名成功的量化交易者的关键一步。 通过理解本文介绍的基础知识,并结合实践经验,您将能够编写自己的自动化交易系统和自定义指标。 记住,学习编程是一个持续的过程,持续学习和实践是进步的关键。 探索 止损单、追踪止损、马丁格尔策略、斐波那契回撤、RSI指标、MACD指标、布林带指标、K线形态、成交量加权平均价(VWAP)、资金管理、风险回报比、夏普比率、回撤、波动率、相关性分析以及 套利交易等高级主题,将进一步提升您的交易技能。
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源