
结语:MQL4编程学习之路,终点亦是新起点
这篇 MQL4 编程学习总结系统回顾基础语法、函数模块化、EA结构、回测调试与风险管理,帮你建立清晰的 EA 开发学习路线,少走弯路,更稳地走向自动化交易。

这篇 MQL4 编程学习总结系统回顾基础语法、函数模块化、EA结构、回测调试与风险管理,帮你建立清晰的 EA 开发学习路线,少走弯路,更稳地走向自动化交易。

近些年,外汇市场无疑成为了最吸引普通投资者的领域之一。全天24小时交易、灵活的杠杆、较低的入场门槛,这些特性给了我们普通人一个进入国际金融市场的机会。 而谈到外汇交易,几乎所有人都绕不开MetaTrader4(也就是我们常说的MT4)。它之...

EA交易真的是圣杯吗?本文从平台监管、回测造假、过度拟合、剥头皮成交和马丁策略风险出发,教你系统识别 EA 交易陷阱,避免被虚假曲线和营销话术收割。

MQL4 马丁格尔策略怎么写才不失控?本文拆解马丁格尔的致命风险、反马丁思路,以及连续盈亏统计与手数倍增模块的实现方法,帮助你在 EA 开发中建立更稳健的仓位控制框架。

MQL4 调试EA到底该从哪里下手?本文系统讲解 Print() 日志、策略测试器、错误130排查、实时调试模式与编译报错处理,帮你更快定位 EA 逻辑和下单问题。

这篇 MQL4 自定义指标源码教程直接给出完整示例,并讲清缓冲区、OnInit、OnCalculate、均线通道计算与性能优化思路,适合想自己写 MT4 指标的交易者快速上手。

这篇 MQL4 包含文件教程集中展示 .mqh 自定义函数源码,覆盖手数计算、挂单开平仓、止损止盈与追踪止损等核心模块,适合搭建可复用的 EA 函数库。

这篇 MQL4 挂单策略EA 教程展示函数化设计的完整程序结构,覆盖动态手数、挂单入场、追踪止损与每K线执行一次控制,适合想写稳健 EA 的交易者参考。

这篇 MQL4 函数化设计EA 教程演示如何用包含文件搭建模块化 EA 程序,覆盖均线信号、一键平仓、追踪止损与每K线执行一次控制,适合进阶学习 EA 结构的交易者。

这篇 MQL4 进阶版挂单EA 教程展示更严谨的止损单程序结构,涵盖保证金检查、订单验证、错误处理与挂单价格计算,适合想提升 EA 稳定性的交易者深入参考。

这篇 MQL4 进阶版EA源码教程系统展示动态手数、错误处理、交易环境检测、订单管理与止损止盈优化,适合想把基础 EA 升级成更稳健程序的交易者参考。

这篇 MQL4 挂单进场EA教程讲清基础版 Buy Stop / Sell Stop 交易逻辑,涵盖反向订单处理、止损止盈设置与点值滑点封装,适合想从现价单过渡到挂单策略开发的交易者。

这篇 MQL4 基础版EA源码教程带你回顾一个最简均线交叉交易程序的完整结构,涵盖参数输入、买卖逻辑、止损止盈、点值与滑点封装,适合 MQL4 初学者理解 EA 如何从0到1成型。

这篇 MQL4 自定义指标与脚本开发教程系统讲清指标缓冲区 Buffers、OnCalculate 计算逻辑、自定义 EMA 布林带实现,以及脚本在一键平仓与批量操作中的应用,适合进阶理解 MQL4 工具开发。

学习如何在 MQL4 中用 OrderProfit() 查询订单盈利金额,并结合 OrderSelect()、开平仓价差计算订单盈利点数,快速掌握持仓与历史订单盈亏读取方法。

学习如何在 MQL4 中使用终端全局变量实现状态持久化,掌握 GlobalVariableSet()、GlobalVariableGet() 与 GlobalVariableDeleteAll() 的用法,避免 EA 重启后丢失交易计数和关键状态。

学习如何在 MQL4 中处理多个订单,掌握用 OrderSend()、数组与 for 循环批量下单的方法,并理解多订单止损止盈设置、递增参数设计与订单注释管理。

学习如何在 MQL4 中做交易前检查,掌握最低净值过滤、点差限制与 AccountEquity()、MODE_SPREAD 的实战用法,避免 EA 在高成本或高风险环境下盲目开仓。

学习如何在 MQL4 中利用订单注释区分不同子策略订单,掌握 OrderSend() 注释参数、OrderComment() 识别逻辑与 StringFind() 的稳妥写法,提升多策略订单管理效率。

学习如何在 MQL4 中实现订单重试机制,掌握 OrderSend() 失败后的 while 重试、GetLastError() 错误码判断、ErrorCheck() 过滤与最大重试次数控制,避免 EA 陷入死循环。

学习如何在 MQL4 中使用 SendMail() 实现 EA 邮件通知,掌握 MetaTrader 邮件设置、SMTP 参数配置、测试发信与交易提醒邮件内容构建方法。

学习如何在 MQL4 中使用 MessageBox() 创建交互对话框,掌握按钮组合、图标常量、返回值 IDYES/IDNO/IDOK 的判断方法,用于交易确认和用户交互。

学习如何在 MQL4 中为 EA 添加账户授权与演示版限制,掌握 IsDemo()、AccountNumber() 和 OnInit() 验证逻辑,保护你的策略程序并安全交付给客户。

学习如何在 MQL4 中检查 EA 运行所需的关键配置,掌握 IsTradeAllowed()、IsLibrariesAllowed() 和 IsDllsAllowed() 的自检逻辑,避免程序加载后无法正常交易。

学习 MQL4 转义字符与 Comment() 图表注释的实用写法,掌握双引号、反斜杠、换行符和 StringFormat 的用法,让 EA 输出信息更清晰易读。

如何让你的炒外汇的EA不那么“激动”,不是一有风吹草动(每个微小的价格变动)就去分析和做决定,而是更有“耐心”,只在每根新的K线蜡烛图(比如每小时一根、每4小时一根或每天一根)刚开始的时候才去思考和行动一次。 想象一下: 默认情况(每个ti...

日期时间变量实际上是基于从1970年1月1日开始计算的秒数。比如,2009年6月15日凌晨0点会被记录为1245024000。这种日期时间格式的好处是,它使过去和将来时间的比较及数学运算变得相当简便。 例如,若想判断一个日期是在另一个日期之...

在构建交易策略时,我们往往不仅需要知道指标当前的值,还需要了解它相较于过去是如何变化的。例如,判断移动平均线 (MA) 是正在上升还是下降,或者一个震荡指标(如随机指标)是否刚刚穿越了某个关键水平(如超买/超卖线)。这都需要比较当前或最近完...

在 MQL4编程中,我们使用条件运算符 if 和 else 来构建和评估交易系统的入场、出场及其他管理逻辑。您在本书的前面部分可能已经见过它们的应用,但为了照顾初学编程的读者,这里我们快速回顾一下它们的基本用法。 1. if 运算符 if ...

在 MQL4编程中,调用技术指标函数(如 iMA(), iStochastic(), iCustom() 等)以及某些价格数据函数时,经常需要传入一些特定类型的参数,例如时间周期、应用价格类型、移动平均线的计算方式等。MQL 为这些常用的参...

网络上有成百上千可用于 MetaTrader 平台的自定义指标。如果您决定在您的EA中使用这类非平台内置的自定义指标,那么就需要进行一些额外的工作。 获取源代码的重要性:在使用自定义指标时,如果能拥有其 .mq4 源代码文件无疑是最佳情况。...

技术指标 绝大多数交易系统都会利用各种技术指标来辅助判断市场状况和产生交易信号,MetaTrader 平台内置了超过 20 种常见的技术指标,例如: 移动平均线 (MA) 平滑异同移动平均线 (MACD) 相对强弱指数 (RSI) 随机震荡...

在过去的几章中,我们致力于创建一系列用于执行订单处理机制的函数。这些函数是几乎所有EA都通用的基础模块,设计它们的初衷是希望它们能在各种交易场景中被复用,并尽可能保持灵活性。这样做的目的是让我们能够从繁琐的订单操作细节中解放出来,从而更专注...

现在我们来修改均线交叉EA的 OnTick() 函数,以便应用我们新创建的那些功能。首先,在建立新的买单前,我们会检查当前是否已经有买单持仓。我们不再是去平掉单个卖单,而是直接调用一个函数来平掉所有卖单。这种方法不需要用到订单号。 // 买...

盈亏平衡止损 除了追踪止损外,另一种常用的订单风险管理技术是盈亏平衡止损 。它的核心逻辑相对简单:当一笔订单的浮动盈利达到或超过预先设定的一个最小盈利点数后,就自动将该订单的止损位移动到其开仓价格。 这样做的目的是,一旦交易向有利方向发展并...

追踪止损的实现 追踪止损是一种动态调整止损位的风险管理技术。其核心思想是:当订单产生浮动盈利时,自动将止损位朝着盈利方向移动,以“锁定”已获得的利润,并在价格反向回调时保护这些利润。 工作原理: 设置距离: 首先设定一个追踪距离,通常以pi...

在开发 EA 时,经常需要知道当前由本EA管理的、符合特定条件的订单数量。例如,统计总共有多少订单、有多少买单、多少卖单、多少挂单等。这对于执行某些策略逻辑(如限制最大持仓数、判断是否已有同向订单)或进行信息展示都非常有用。我们可以创建一系...

在前面已经接触过 OrderSelect() 函数。本节我们将探讨如何结合使用 OrderSelect() 函数与 MQL 中的循环运算符(for 循环和 while 循环),来实现对订单池(即当前所有持仓订单和挂单的集合)的遍历操作,以便...

使用包含文件 (.mqh) 来组织函数 随着我们创建的辅助函数越来越多(如 PipPoint, GetSlippage, CalcLotSize, VerifyLotSize, OpenBuyOrder, AddStopProfit 等),...

封装添加/修改止损止盈函数 (AddStopProfit) 为了进一步细化函数职责,我们将为现有订单添加或修改止损 (SL) 和止盈 (TP) 的操作也封装成一个独立的函数。这个函数尤其适用于配合那些为了兼容 ECN 而在下单时不设置 SL...

封装验证与调整函数 为了方便地处理前面讨论的停止级别验证问题,我们可以创建两类辅助函数: 验证函数 (Verification Functions): 这类函数只检查给定的价格(如 SL/TP 或挂单价)是否满足最小停止距离要求,并返回一个...

封装SL/TP价格计算函数 为了将 SL/TP 的计算逻辑与验证逻辑分离,并提高代码复用性,我们可以创建专门的函数来根据开仓价和用户指定的点数 (pips) 计算出目标的 SL 或 TP 价格。 函数设计要点: 输入: 函数接收交易品种 (...

封装平仓函数 最后,我们将订单平仓的逻辑也封装成一个可重用的函数。这个函数将专注于关闭单个指定的市价订单。当您需要精确地关闭某一个特定的订单时(例如,基于订单号)这时下面这个函数就很有用,同时加入了必要的检查和错误处理。 关闭指定买单 (C...

封装市价买单函数 (OpenBuyOrder()) 现在我们来创建一个用于开立市价买单的可重用函数。在设计这个函数时,我们与之前直接在 OnTick() 函数中编写的代码有所不同,主要出于以下考虑: 这个下单函数只负责发送开仓指令。它不包含...

在前面的章节中,我们逐步构建了包含下单、错误处理、价格验证、手数计算等功能的代码逻辑。现在,我们将学习如何将这些代码块封装成可重用的函数。这样做的好处是: 将复杂的细节(如手数计算、价格验证等)隐藏在函数内部,使得 OnTick() 等核心...

现在我们将把本章学习到的所有高级功能——包括订单修改、交易上下文检查、预定义变量刷新以及动态手数计算与验证等等整合到之前那个简单的移动平均线交叉 EA 中。 修订后 EA 的结构与代码片段: 文件头部与全局设定: #property cop...

MetaTrader平台为所有运行在上面的EA提供了一个单一的交易执行线程。这意味着,在同一时刻,只有一个EA能够成功地执行交易相关的操作(如下单、平仓、修改订单等),无论您在终端中同时运行了多少个 EA 实例。这种机制是为了保证订单处理的...

在构建交易策略时,除了精心设计入场、出场、止损和止盈规则外,确定每次交易使用多大的手数是风险管理中至关重要的一环。最简单直接的方法是设置一个固定的手数(例如,通过 extern 变量让用户输入),并在所有交易中都使用这个固定值。然而,这种方...

在计算出目标止损价和止盈价之后,我们必须验证它们是否满足经纪商的最小距离要求(即 MODE_STOPLEVEL 对应的价格距离)。需要注意的是,对市价单和挂单的止损验证,其考虑因素略有不同。 止盈验证规则: 买单止盈价必须 >= As...

在MQL4中为市价单设置止损(Stop Loss) 和止盈 (Take Profit) ,传统方法是直接在调用 OrderSend() 函数时就将 SL/TP 价格作为参数传入。虽然这种方式对于大多数经纪商运行良好,但是一些账户不支持在提交...