MetaQuotes Language 4 (MQL4)
- MetaQuotes Language 4 (MQL4) 初学者指南
MetaQuotes Language 4 (MQL4) 是一种专为 MetaTrader 4 (MT4) 交易平台设计的编程语言。MT4 是全球最受欢迎的 外汇交易平台之一,MQL4 允许交易者和开发者创建自己的交易机器人 (Expert Advisors, EAs)、自定义指标 (Custom Indicators) 和脚本 (Scripts),从而自动化交易策略、进行深入的市场分析,并扩展 MT4 的功能。 本文旨在为初学者提供 MQL4 的全面概述,涵盖其基本概念、语法、数据类型、运算符、函数以及如何使用它来开发简单的交易工具。
MQL4 概述
MQL4 基于 C 语言,但针对金融市场的特定需求进行了优化。 它提供了访问实时市场数据、执行交易订单、管理仓位以及执行技术分析的工具。MQL4 程序编译成可执行文件 (.ex4 文件),可以直接在 MT4 平台中运行。
MQL4 主要有三种类型的程序:
- Expert Advisors (EAs):自动交易机器人,可以根据预定义的规则自动执行交易。交易机器人开发
- Custom Indicators:自定义技术指标,用于分析市场趋势和识别交易信号。技术指标、移动平均线、相对强弱指数、MACD、布林带
- Scripts:一次性执行的任务,例如批量修改止损止盈或关闭所有订单。交易脚本
MQL4 基本语法
MQL4 的语法与 C 语言类似,但有一些关键的区别。
- 结构:MQL4 程序通常包含以下部分:
* 包含文件:使用 #include 指令包含必要的头文件,例如 Trade.mqh (用于交易功能) 和 Indicators.mqh (用于技术指标函数)。 * 全局变量:在程序的所有函数中可见的变量。 * 函数:执行特定任务的代码块。 包括 OnInit()、OnDeinit()、OnTick() 等特殊函数。 * 主函数:在 EAs 中,OnTick() 函数是主函数,每当收到新的报价时都会被调用。
- 语句:MQL4 语句以分号 (;) 结尾。
- 注释:
* 单行注释:使用双斜杠 (//) * 多行注释:使用 /* ... */
- 缩进:使用缩进使代码更具可读性。
MQL4 数据类型
MQL4 支持多种数据类型:
数据类型 | 说明 | 示例 |
---|---|---|
int | 整数 | 10, -5, 0 |
double | 双精度浮点数 | 3.14159, -2.71828 |
bool | 布尔值 (真/假) | true, false |
string | 字符串 | "Hello, world!", "EURUSD" |
datetime | 日期和时间 | 2023.10.27 10:00:00 |
color | 颜色 | clrRed, clrBlue |
MQL4 运算符
MQL4 提供了各种运算符,用于执行算术、比较、逻辑和赋值操作。
- 算术运算符: +, -, *, /, % (取模)
- 比较运算符: == (等于), != (不等于), > (大于), < (小于), >= (大于等于), <= (小于等于)
- 逻辑运算符: && (与), || (或), ! (非)
- 赋值运算符: =, +=, -=, *=, /=, %=
MQL4 函数
MQL4 提供了大量的内置函数,用于执行各种任务。 此外,交易者还可以创建自己的自定义函数。
- 内置函数:
* OrderSend():发送交易订单。订单管理 * iMA():计算移动平均线。移动平均线 * iRSI():计算相对强弱指数。相对强弱指数 * MarketInfo():获取市场信息,例如点差、最小交易量等。市场信息 * AccountInfo():获取账户信息,例如余额、权益等。账户信息
- 自定义函数: 使用关键字 `int`、`double`、`bool`、`string` 等定义函数类型,并指定函数名称、参数和返回值。
示例:
```mql4 int MyFunction(int input_value) {
int result = input_value * 2; return result;
} ```
MQL4 变量
变量用于存储数据。 在 MQL4 中,需要声明变量的类型和名称。
示例:
```mql4 int my_integer = 10; double my_double = 3.14; string my_string = "Hello"; ```
MQL4 流程控制语句
MQL4 提供了各种流程控制语句,用于控制程序的执行流程。
- if-else 语句:根据条件执行不同的代码块。
- for 循环:重复执行代码块指定的次数。
- while 循环:重复执行代码块,只要条件为真。
- switch 语句:根据变量的值执行不同的代码块。
创建一个简单的自定义指标
下面是一个简单的自定义指标,用于计算简单移动平均线 (SMA)。
```mql4
- property indicator_chart_window
int period = 10; // 移动平均线周期
double ma_value;
int OnInit() {
return(INIT_SUCCEEDED);
}
int OnCalculate(int rates_total, int prev_calculated, int begin, double &buffer[]) {
if(prev_calculated > 0) { buffer[0] = buffer[prev_calculated-1]; return(0); }
double sum = 0.0; for(int i = 0; i < period; i++) { sum += Close[i]; }
ma_value = sum / period; buffer[0] = ma_value;
return(1);
} ```
此代码首先定义了移动平均线的周期。 OnInit() 函数在指标加载时执行。 OnCalculate() 函数在每个新的报价到达时执行。 它计算 SMA 的值,并将结果存储在 buffer 数组中。
创建一个简单的 Expert Advisor
下面是一个简单的 EA,当价格上涨时买入,当价格下跌时卖出。
```mql4
- property expert_magic_number 123
int period = 10; // 移动平均线周期
double ma_value;
int OnInit() {
return(INIT_SUCCEEDED);
}
void OnTick() {
ma_value = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, 0);
double current_price = MarketInfo(Symbol(), MODE_ASK);
if(current_price > ma_value) { // 买入 OrderSend(Symbol(), OP_BUY, 0.1, current_price, 3, 0, 0, "My EA", 123, 0, Green); } else if(current_price < ma_value) { // 卖出 OrderSend(Symbol(), OP_SELL, 0.1, current_price, 3, 0, 0, "My EA", 123, 0, Red); }
} ```
此代码首先定义了移动平均线的周期。 OnInit() 函数在 EA 加载时执行。 OnTick() 函数在每个新的报价到达时执行。 它计算 SMA 的值,并根据当前价格与 SMA 的关系发送买入或卖出订单。
调试 MQL4 代码
MQL4 IDE 提供了一个调试器,可以帮助您查找和修复代码中的错误。 使用调试器,您可以逐步执行代码、检查变量的值以及设置断点。 MQL4 IDE
资源和学习材料
- MQL4 官方文档:[1](https://www.mql4.com/)
- MQL4 论坛:[2](https://www.mql4.com/forum)
- MQL4 书籍和教程: 网上有很多关于 MQL4 的书籍和教程。
- MT4 策略测试器:用于回测和优化交易策略。回测、优化
- 风险管理: 了解并实施适当的风险管理策略。
- 资金管理: 学习并应用有效的资金管理技巧。
- 成交量分析: 利用成交量数据来确认趋势和识别潜在的交易机会。
- 价量分析: 结合价格和成交量来分析市场行为。
- 支撑阻力位: 识别关键的支撑位和阻力位。
- 形态分析: 识别图表上的形态,例如头肩顶、双底等。
- 波浪理论: 了解艾略特波浪理论。
- 斐波那契数列: 利用斐波那契数列来预测价格目标。
- 日内交易策略: 探索不同的日内交易策略。
- 剥头皮交易策略: 学习剥头皮交易策略。
- 趋势跟踪策略: 开发基于趋势跟踪的交易策略。
结论
MQL4 是一种功能强大的编程语言,可以帮助交易者自动化交易策略、进行深入的市场分析并扩展 MT4 平台的功能。 通过学习 MQL4,交易者可以获得更大的控制权和灵活性,并提高交易绩效。 本指南提供了一个良好的起点,但持续学习和实践对于掌握 MQL4 至关重要。
或者,如果需要更宽泛的分类:
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源