MQL代码示例
- MQL 代码示例
MQL4 和 MQL5 是 MetaQuotes Language 4 和 MetaQuotes Language 5 的缩写,是用于编写交易机器人在 MetaTrader 4 和 MetaTrader 5 平台上的交易策略的编程语言。 它们允许交易者自动化他们的交易,并根据预定义的规则执行交易。 本文将为初学者提供一些基本的 MQL代码 示例,帮助他们入门。我们将涵盖简单的指标、交易脚本和 EA交易(Expert Advisor)的基础。
MQL4 与 MQL5 的区别
在深入代码示例之前,快速了解 MQL4 和 MQL5 之间的主要区别至关重要。 MQL5 是 MQL4 的后继者,提供了更强大的功能,包括:
- **更快的执行速度:** MQL5 编译为 64 位代码,而 MQL4 编译为 32 位代码,因此 MQL5 通常执行速度更快。
- **更多的内置函数:** MQL5 提供了比 MQL4 更多的内置函数,简化了复杂任务的编程。
- **策略测试器改进:** MQL5 策略测试器比 MQL4 的测试器更强大,允许更准确和现实的策略回测。
- **更强的对象支持:** MQL5 支持更多的对象类型,允许创建更复杂的图表自定义。
- **事件驱动编程:** MQL5 更加强调事件驱动编程,这使得创建响应实时市场数据的 EA 更加容易。
虽然 MQL5 提供了许多优势,但 MQL4 仍然被广泛使用,并且许多交易者仍然选择使用它。
简单指标示例:移动平均线
让我们从一个简单的指标示例开始:计算移动平均线 (MA)。 移动平均线 是一种常用的技术指标,用于平滑价格数据并识别趋势。
```mql4 //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ int start()
{
//----
int ma_period = 20; // 移动平均线周期 double ma_value = iMA(NULL, 0, ma_period, 0, MODE_SMA, PRICE_CLOSE, 0);
Print("移动平均线值: ", ma_value);
//----
return(0); }
//+------------------------------------------------------------------+ ```
这段代码使用 `iMA()` 函数计算当前价格的简单移动平均线 (SMA)。参数包括:
- `NULL`: 图表句柄,`NULL` 表示当前图表。
- `0`: 时间周期,`0` 表示当前时间周期。
- `ma_period`: 移动平均线的周期,这里设置为 20。
- `0`: 移动平均线的移动偏移量。
- `MODE_SMA`: 移动平均线类型,这里是简单移动平均线。
- `PRICE_CLOSE`: 使用收盘价计算移动平均线。
- `0`: 移动平均线的移位。
`Print()` 函数将计算出的移动平均线值输出到“专家”选项卡。 了解 技术指标 的原理是编写成功的交易策略的关键。
简单交易脚本示例:开仓和平仓
现在,让我们看一个简单的交易脚本示例,它可以在满足特定条件时开仓和平仓。
```mql4 //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ int start()
{
//----
double lot_size = 0.1; int slippage = 3; int magic_number = 12345;
// 检查是否存在未平仓仓位 if(OrdersTotal() == 0) { // 如果没有仓位,则开仓 int ticket = OrderSend(Symbol(), OP_BUY, lot_size, Ask, slippage, 0, 0, "My First Trade", magic_number, 0, Green); if(ticket > 0) { Print("开仓成功,订单号: ", ticket); } else { Print("开仓失败,错误代码: ", GetLastError()); } } else { // 如果有仓位,则平仓 for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic_number) { if(OrderType() == OP_BUY) { int ticket = OrderClose(OrderTicket(), lot_size, Bid, slippage, 0); if(ticket > 0) { Print("平仓成功,订单号: ", ticket); } else { Print("平仓失败,错误代码: ", GetLastError()); } } } } } }
//----
return(0); }
//+------------------------------------------------------------------+ ```
这段代码检查是否存在未平仓仓位。 如果没有仓位,它将开仓买入 0.1 手的交易。 如果存在仓位,它将平仓所有具有指定魔法数字的买入仓位。 理解 订单管理 是编写可靠交易机器人的基础。
简单 EA 示例:基于 RSI 的交易
现在,让我们创建一个简单的 EA交易,它基于相对强弱指数 (RSI) 进行交易。 RSI指标 是一种动量指标,用于衡量价格变动的速度和幅度。
```mql4 //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start()
{
//----
double rsi_period = 14; double overbought_level = 70; double oversold_level = 30; double lot_size = 0.1; int slippage = 3; int magic_number = 12345;
double rsi_value = iRSI(NULL, 0, rsi_period, PRICE_CLOSE, 0);
// 如果 RSI 高于超买水平,则平仓买单并开仓卖单 if(rsi_value > overbought_level && OrdersTotal() > 0) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic_number && OrderType() == OP_BUY) { int ticket = OrderClose(OrderTicket(), lot_size, Bid, slippage, 0); if(ticket > 0) { Print("平仓成功,订单号: ", ticket); } else { Print("平仓失败,错误代码: ", GetLastError()); } } } } int ticket = OrderSend(Symbol(), OP_SELL, lot_size, Ask, slippage, 0, 0, "RSI Sell", magic_number, 0, Red); if(ticket > 0) { Print("开仓卖单成功,订单号: ", ticket); } else { Print("开仓卖单失败,错误代码: ", GetLastError()); }
}
// 如果 RSI 低于超卖水平,则平仓卖单并开仓买单 if(rsi_value < oversold_level && OrdersTotal() > 0) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic_number && OrderType() == OP_SELL) { int ticket = OrderClose(OrderTicket(), lot_size, Ask, slippage, 0); if(ticket > 0) { Print("平仓成功,订单号: ", ticket); } else { Print("平仓失败,错误代码: ", GetLastError()); } } } } int ticket = OrderSend(Symbol(), OP_BUY, lot_size, Ask, slippage, 0, 0, "RSI Buy", magic_number, 0, Green); if(ticket > 0) { Print("开仓买单成功,订单号: ", ticket); } else { Print("开仓买单失败,错误代码: ", GetLastError()); } }
//----
return(0); }
//+------------------------------------------------------------------+ ```
这段代码计算 RSI 值,如果 RSI 高于超买水平,则平仓买单并开仓卖单,如果 RSI 低于超卖水平,则平仓卖单并开仓买单。 这是一个非常简单的 EA,仅用于演示目的。 实际交易策略需要更复杂的逻辑和风险管理。
风险管理与资金管理
编写交易机器人时,风险管理和资金管理至关重要。 以下是一些需要考虑的关键事项:
- **止损:** 为每个交易设置止损点,以限制潜在损失。
- **止盈:** 为每个交易设置止盈点,以锁定利润。
- **仓位大小:** 根据您的账户余额和风险承受能力调整仓位大小。 仓位管理策略 应该仔细考虑。
- **回测:** 在真实资金交易之前,对您的策略进行彻底的回测。 利用 回测工具 模拟历史数据。
- **避免过度交易:** 避免过度交易,因为这会增加交易成本并降低盈利能力。 理解 交易频率 的影响。
优化和测试
编写好代码后,进行优化和测试至关重要。 策略优化 涉及调整参数以提高策略的性能。 模拟交易 可以让你在不冒真钱的风险的情况下测试你的策略。
进阶主题
以下是一些更高级的 MQL 主题,供您进一步学习:
- **自定义指标:** 创建您自己的技术指标。
- **事件处理:** 处理不同的事件,例如订单执行、时间变化和图表事件。
- **文件操作:** 读取和写入文件。
- **网络编程:** 访问互联网上的数据。
- **高级订单类型:** 使用高级订单类型,例如止损订单和限价订单。
- **使用 DLL:** 调用外部动态链接库。
- **形态识别**: 自动识别图表上的价格形态。
- **成交量分析**: 利用成交量数据来确认趋势和预测价格变动。
- **波浪理论**: 将艾略特波浪理论融入交易策略。
- **卡纳尔系统**: 利用卡纳尔系统进行交易。
- **布林带**: 基于布林带的交易策略。
- **MACD指标**: 利用MACD指标进行交易策略。
- **斐波那契数列**: 将斐波那契数列应用于交易策略。
结论
MQL4 和 MQL5 是功能强大的编程语言,可以用于创建复杂的交易机器人和自定义指标。 本文提供了一些基本的代码示例,帮助您入门。 练习、学习和实验是成为 MQL 编程专家的关键。记住,成功的交易需要深入的 市场分析,以及良好的风险管理和资金管理策略。
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源