MQL语法

From binaryoption
Jump to navigation Jump to search
Баннер1
  1. 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 | //+------------------------------------------------------------------+

  1. property copyright "Copyright 2023, Your Name"
  2. 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 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源

Баннер