
很多人在MT5上手动交易了一段时间后都会冒出同一个念头能不能让电脑替我看盘、开仓、平仓这个念头对应的工具就是EA——Expert Advisor中文常叫智能交易系统或专家顾问。MT5里写EA用的是MQL5语言写代码的编辑器是MetaEditor。第一次打开MetaEditor的人十有八九会被那一排工具栏按钮搞懵新建、打开、保存还好说后面那一堆编译、运行、单步、调试按钮到底是什么关系怎么把一个写好的EA弄到MT5图表上去为什么点了运行却没有任何反应搞不清这些后面语法学得再多都用不上。作为MQL5教程的第一篇我不打算上来就讲语法而是先把“EA怎么被写出来、怎么被编译、怎么被加载运行”这条链路完整讲透。这篇的内容够你用一整个入门阶段。1. 先把概念捋顺EA、指标、脚本还有MetaEditor的分工1.1 EA到底是个什么东西EA的全称是Expert Advisor翻译过来叫“专家顾问”但在实际使用中它就是一段跑在MT5图表上的自动交易程序。你可以把它理解成一个“赛博交易员”平台每收到一个新的报价就会推给EA一次EA根据你写好的条件判断——要不要开仓、往哪个方向开、开多大、在哪里止损止盈然后直接通过终端下单。这里有个新手常犯的认知偏差以为EA是MT5平台自带的功能只要“打开”就能用。不是的。EA是一段需要人写的代码本质是一个文件。在MT5里程序化的东西分成三类EA智能交易系统挂在图表上每个报价跳动都会触发它可以自动交易。文件放在数据目录的MQL5/Experts文件夹下后缀是.mq5编译后生成.ex5。指标Indicator挂在图表上做视觉分析画线、画柱、算数值用不能自主下单。文件在MQL5/Indicators后缀.mq5编译后.ex5。脚本Script挂在图表上从头到尾只执行一次跑完就结束。可以下单但不会持续监控行情。文件在MQL5/Scripts。这三类文件用同一种语言MQL5编写用同一个编辑器MetaEditor打开和编译区别只在于程序入口函数不同。EA的入口是OnTick()指标是OnCalculate()脚本是OnStart()。搞清楚这个分类你以后找文件、看别人源码、定位问题都会快很多。1.2 MetaEditor在整套流程里的角色MetaEditor是MT5自带的集成开发环境你可以把它理解成“写代码的Word”。它负责三件事写代码、编译代码、调试代码。有人会问既然要跑在MT5上为什么不在MT5窗口里直接写因为两者职责不同。MT5终端是“运行环境”负责加载EA、接收行情、执行下单MetaEditor是“开发环境”负责把人类可读的MQL5源码编译成终端能执行的机器码.ex5。终端只认.ex5不认.mq5源码。所以完整流程是在MetaEditor里写.mq5源码 → 按F7编译成.ex5文件 → 回到MT5终端把.ex5加载到图表上 → EA开始运行。这条链路里任何一个环节断了EA都跑不起来。我见过太多人把源码直接拖到图表上结果MT5弹出一个文件选择框人当场就懵了。另外安装MT5时会自动安装MetaEditor不需要单独下载。如果你在电脑上找不到MetaEditor打开MT5终端按F4快捷键就能直接呼出它。F4这个快捷键建议第一个记下来。1.3 顺带说一句“交易信号”不是EA最近网上经常有人搜“EA交易信号源”这里必须澄清一下MT5里有个内置的“信号”功能是MetaQuotes官方的跟单服务你可以订阅别人的交易信号让系统自动复制别人的交易。这是平台自带的服务不需要写代码。而EA是你自己编写的程序逻辑完全由你控制。两者完全是两回事。很多新手把“信号”和“EA”混为一谈结果在导航器里看到一个“信号”分组进去一顿操作以为自己在配置EA实际上是在订阅跟单服务。如果你是想自己写策略做自动化方向别跑偏先专注于EA和MetaEditor。2. 在MT5终端里加载与管理EA四个关键操作点2.1 导航器窗口EA的存放与装载入口在MT5终端里按CtrlY或者在“视图”菜单里勾选“导航器”屏幕左侧会弹出一个面板。这个面板顶部有一排小图标其中有几个分组智能交易系统、指标、脚本、信号、技术指标等。所有已经编译好的EA会出现在“智能交易系统”这个分组下面。如果分组是空的说明你的MQL5/Experts目录下还没有.ex5文件。你可以在MT5里按CtrlShiftD打开数据文件夹找到MQL5/Experts目录把编译好的EA文件丢进去。文件放进去后回到导航器在那个分组上点右键选择“刷新”EA就会出现在列表里。这里有个新手常犯的错误直接把.mq5源码文件放进Experts文件夹然后抱怨“为什么导航器里看不到”。终端只认.ex5编译产物源码放进去也不会被加载。所以流程永远是编译 → 生成.ex5→ 放入或直接在MetaEditor里编译时输出到Experts目录 → 刷新导航器。2.2 把EA挂到图表上的标准步骤以及“算法交易”按钮把EA加载到图表上有三种方式任选其一在导航器里双击EA名称它会自动挂到当前激活的图表上。从导航器直接拖拽EA名称到指定的图表上。右键导航器里的EA选择“附加到图表”。挂上去之后图表右上角会显示一个EA名称标签同时可能弹出一个属性设置对话框。注意此时EA并不一定会自动交易因为MT5有一个全局的“算法交易”总开关——就是主工具栏上的“算法交易”按钮图标看起来像一架纸飞机或一个播放符号。这个按钮是灰的说明算法交易全局禁用哪怕EA挂在图表上它也不会下单。正确操作是先确认主工具栏上“算法交易”按钮处于激活状态再确认EA属性对话框里勾选了“允许算法交易”。这两层开关都打开EA才真正拥有下单权限。这是新手最容易踩的坑之一——EA挂在图上日志里显示“已初始化”但就是不交易十有八九就是这个全局开关没开。2.3 属性对话框逐页解读Common、Inputs、Dependencies双击图表上已经挂载的EA名称或者右键EA名称选择“属性”会打开属性对话框。MT5的EA属性对话框通常有三个标签页常用Common这里有几个重要选项。“允许算法交易”是总权限开关“禁用”勾选后EA会被暂停“图表上显示说明”决定是否显示EA的描述文字。最下面通常还有一个“描述”区域显示EA作者在代码里写的策略说明。输入Inputs这里是EA的参数配置页。EA里用input关键字声明的所有参数都会出现在这里比如开仓手数、止损点数、均线周期等。你可以在不修改代码的情况下在这里调整参数重新加载。注意修改参数后需要确认“重新初始化”才能生效。依赖项Dependencies显示这个EA用到了哪些交易品种和周期。这个页面通常不需要动但它能帮你快速了解一个EA跑在什么市场环境下。2.4 验证EA是否在运行笑脸图标和日志EA挂在图表上之后怎么确认它真的在跑看图表右上角的EA名称标签。如果名称前面是一个笑脸图标说明EA正常运行如果是哭脸或有感叹号说明出错如果是个灰色图标说明被禁用。更详细的运行信息在MT5底部的“工具箱”面板里切换到“专家”标签页这里会实时滚动显示EA用Print()输出的日志信息比如“EA已启动”“开仓成功”“止损触发”等。养成看专家日志的习惯排错效率直接翻倍。另外正式让一个EA上真金白银的图表之前务必先在“策略测试器”里跑一遍历史数据回测。按CtrlR打开策略测试器选择EA、交易品种、周期、时间范围和回测模式把参数跑一遍看回测报告里的净利润、回撤、胜率、盈亏比再决定要不要实盘。这一条建议值得反复强调——跳过回测直接实盘的基本都是在给市场交学费。3. MetaEditor工具栏逐组拆解从文件到调试再到查找3.1 左侧文件操作区新建、打开、保存真正在干什么MetaEditor工具栏最左侧是一组文件操作按钮和大多数编辑器没有本质区别但在MT5的开发语境下每个按钮背后都对应着具体的工作流。“新建”按钮快捷键CtrlN会打开文件创建向导你可以选择创建EA、指标、脚本、库文件、包含文件等。这是每个MQL5程序员的起点——从向导生成的模板里开始写比从空白文件开始要省力得多因为模板会把程序入口函数、注释框架都给你铺好。“打开”按钮用于打开已有源码文件它会定位到数据目录里的MQL5文件夹而不是让你去电脑任意位置找文件这是很多新人不适应的地方——在MetaEditor里文件操作默认锁定在MQL5目录体系以内。“保存”按钮CtrlS没什么好说的但要重点提醒保存不等于编译。源码修改后必须按F7编译新的.ex5才会生成。很多人改了代码忘了编译直接切回MT5加载旧版EA折腾半天还以为代码有bug。正确习惯是每次改完代码顺手CtrlS再F7两步连成肌肉记忆。工具栏上还有一个不起眼的“同步”按钮它的作用是把本地文件与MQL5云存储同步。如果你用了MQL5的在线存储功能或者从他人那里导入了源码这个按钮能帮助拉取最新版本。新手期用不到知道它存在即可。3.2 中间编译与调试区F7、F5、断点、单步的关系这一块是MetaEditor工具栏的核心也是新手最迷糊的地方。我按功能拆开讲。编译Compile快捷键F7把当前打开的.mq5源码从头到尾做语法检查并生成对应的.ex5文件。编译结果输出在底部“工具箱”面板的错误标签页里会列出错误error、警告warning和备注message三类信息。双击任意一条错误信息光标会自动跳到出错的代码行这是定位问题的基本操作。运行Run快捷键F5这里的“运行”不是让EA直接在图表上跑而是启动“调试模式”。调试模式下EA会被加载到一个内置的模拟环境中代码执行到你设置的断点处会暂停你可以逐步查看每一行代码的变量值检查逻辑为什么跟预期不符。断点快捷键F9在代码左侧的灰色栏里点击或者选中某一行按F9可以设置或取消断点。断点就是程序运行到这一行时强制暂停的位置。调试时一般会在可疑代码前后各设一个断点配合变量监视窗口一步步看数据怎么流过去。单步Step Into、跳过Step Over、跳出Step Out这三个按钮是在断点暂停后使用的。单步会进入当前行调用的函数内部逐行执行跳过会以整个函数为单位直接执行完并跳到下一行跳出则是从当前函数内部直接返回到调用它的上一层。简单记忆单步是钻进细节跳过是看完即走跳出是遇到不关心的函数直接退出。调试还有个前提MetaEditor必须处于“Debug”构建模式。工具栏里有一个下拉框可以选择“Debug”或“Release”调试时确保选的是Debug否则断点不生效。3.3 右侧查找与面板区搜索和工具窗口的使用习惯工具栏右侧主要是查找和面板开关按钮。“查找”按钮CtrlF在当前文件中搜索关键词支持大小写匹配、全词匹配、正则表达式。写EA时经常要定位某个函数定义在哪里、某个变量在哪里被赋值熟练使用查找是最基本的效率技能。查找结果会列在底部面板的“搜索结果”标签页里点一下就能跳到对应位置。面板开关按钮则控制MetaEditor左右两侧的窗口显隐。最常用的是“导航器”和“工具箱”导航器CtrlShiftN左侧的树形面板展示MQL5目录下的所有源文件以及MQL5内置函数库。写代码时看文件结构、找头文件都用它。工具箱CtrlShiftT底部的输出面板整合了编译输出、查找结果、调试变量、调用栈等功能。写代码时保持它常开编译结果一眼就能看到。这几个面板窗口为什么单独拿出来讲因为新手经常不小心把导航器或工具箱关掉了然后整个MetaEditor看起来光秃秃的不知道去哪找回来。记住这两个快捷键任何时候都能把界面恢复原样。4. 第一次编译实操从向导模板到一个能跑的EA4.1 新建文件的正确姿势按CtrlN打开向导选择“Expert Advisor”填写名称比如MyFirstEA指定保存位置默认是Experts目录点击完成。此时MetaEditor会生成一个标准模板里面有OnInit()、OnDeinit()、OnTick()三个函数骨架以及注释说明。这个模板是一个完整的可编译程序——即使你一行代码不写直接按F7也能编译通过只是它什么事都不会做。我建议第一次接触的人不要跳过模板直接手写代码。模板能保证程序入口函数声明正确、代码块闭合完整你只需要在对应函数体里填充逻辑学习曲线会平缓很多。4.2 一个最小可用EA的逐行拆解为了让“能跑”的感觉更明显我把模板简化写一个只要挂上图表就会打印日志的最小EA//------------------------------------------------------------------ //| MyFirstEA.mq5 | //------------------------------------------------------------------ #property copyright MyFirstEA #property version 1.00 input double Lots 0.01; // 开仓手数 input int StopPoints 50; // 止损点数 //------------------------------------------------------------------ //| Expert initialization function | //------------------------------------------------------------------ int OnInit() { Print(EA已启动账户余额, AccountInfoDouble(ACCOUNT_BALANCE)); return(INIT_SUCCEEDED); } //------------------------------------------------------------------ //| Expert deinitialization function | //------------------------------------------------------------------ void OnDeinit(const int reason) { Print(EA已卸载原因代码, reason); } //------------------------------------------------------------------ //| Expert tick function | //------------------------------------------------------------------ void OnTick() { // 每个新报价都会触发这里 } //------------------------------------------------------------------不要觉得它太简单。这个程序已经具备了EA的完整骨架input声明了两个可在图表属性里调节的参数OnInit()在挂载时打印账户余额OnDeinit()在卸载时打印原因OnTick()定义了每个报价到来时的行为。你在这个基础上加仓、加止损、加均线判断就是一个真正的策略。所谓复杂EA无非是把OnTick()里的逻辑写得越来越多而已。有一个细节需要留意AccountInfoDouble(ACCOUNT_BALANCE)是MQL5内置函数用来获取当前账户余额。“MQL5基本上所有信息都可以通过内置函数获取”——这是我学MQL5时印象最深的一句话。价格、时间、持仓、保证金、历史订单全部有对应的内建函数。遇到不懂的函数光标放在函数名上按F1会直接调出官方参考文档这个习惯越早养成越好。4.3 编译输出的读法错误、警告和注释分别怎么处理写好代码后按F7编译底部工具箱会显示输出。第一次编译的人看到一堆英文信息容易慌其实只需要抓住三类错误error必须修复否则不会生成.ex5。错误信息里会带行号和简短的原因描述比如Lots - undeclared identifier意思是某个标识符没有声明多半是变量名写错或缺少声明。警告warning不阻止编译但往往意味着潜在问题比如定义了变量却没使用、隐式类型转换。警告多了会掩盖真正的错误遇到警告最好也顺手处理。备注message编译过程的普通提示比如告知生成的文件路径、编译用时通常可以忽略。双击错误信息编辑器会自动跳转到出错行并在行首用高亮标记。修复代码后再次F7直到错误数为0。编译通过后去MT5终端的导航器里刷新一下“智能交易系统”分组下就会出现MyFirstEA这个新EA。4.4 在策略测试器里跑一遍才算验收把新EA拖到图表上只会打印日志不产生交易信号。想验证它能不能正常下单最快的方式是用策略测试器模拟跑一遍。打开MT5按CtrlR在“智能交易系统”下拉框里选择MyFirstEA选择交易品种和周期设置一个历史日期范围回测模式选“每个报价基于真实报价”精度最高速度最慢自己练习选任意一个即可然后点“开始”。测试器跑完后会生成一份报告包含净利润、回撤、最大回撤比例、盈利因子等指标。对刚入门的你来说报告数字不是重点重点是你亲手走完了“写代码→编译→加载→回测”这个完整链路。后面的教程会在这个链路上不断加深比如写入场逻辑、加止盈止损、做参数优化。链路熟了学什么都快。5. 新手最容易栽的坑以及几个让效率翻倍的习惯5.1 从MQL4搬代码导致的常见编译错误网上很多EA源码是MQL4写的直接复制进MetaEditor编译会报出一大堆错误。最典型的是这几个OrderSend - function not foundMQL4的OrderSend()下单函数在MQL5里不存在。MQL5改为使用CTrade类或OrderSend()加上MqlTradeRequest、MqlTradeResult结构体的方式。参数模型完全不同不是改几个参数名就能解决的。Period - ambiguousMQL4里Period()返回当前图表周期MQL5里同类函数是Period()但在某些上下文下会与ENUM_TIMEFRAMES类型冲突需要显式声明变量类型。Bars - function not definedMQL4的Bars数组在MQL5里被CopyRates()等复制函数取代。原因是MQL5采用“复制数据”而不是“直接访问历史数组”的模型这对线程安全更友好但代码结构差异很大。所以如果你是MQL4转MQL5的千万别抱有“代码直接能用”的幻想。两种语言的持仓模型也完全不同MQL4是一单一单管理MQL5把“订单、持仓、成交”三者分开处理一个交易品种可能有多笔持仓。这个差异会直接影响你写平仓逻辑的方式建议系统学一遍MQL5的文档再做迁移。5.2 两层“开关”没打开EA就是不动作前面提过的全局“算法交易”按钮和EA属性里的“允许算法交易”选项是新手期最高频的“假死”案例。有时候你在策略测试器里跑得好好的一上实盘图表就一动不动检查顺序应该是看图表右上角EA图标是不是笑脸看主工具栏“算法交易”按钮是否高亮右键EA → 属性 → 常用 → 确认“允许算法交易”勾选看工具箱“专家”标签页日志有没有报错信息。按这个顺序排查90%的“EA不交易”问题都能定位。我每次换电脑、换交易账户、重装MT5后都会按这个清单核对一遍省了不少冤枉时间。5.3 首次更新或下载很慢时的处理方法很多人在网上搜“EA软件安装”“EA downloading update很慢”之类的问题。这里说一下实际经验MetaEditor和MT5共用一个数据目录首次安装后启动MetaEditor时它有时会去下载一些组件或库文件如果网络状况不好会显得很慢。常规处理办法是检查防火墙和杀毒软件是否拦截了terminal64.exe和metaeditor64.exe的网络访问把它加入白名单选择在非交易高峰时段更新避开服务器拥堵如果实在慢可以找官网提供的完整安装包覆盖安装而不是用增量更新的方式。注意不要从不知名网站下载所谓的“破解版”“绿色版”安装包这类文件体积小、来路不明很容易夹带私货。交易软件直接关系到资金安全只认官方渠道。5.4 几个值得养成的MetaEditor使用习惯最后分享几个我踩过坑之后总结出来的使用习惯新手可以直接照做改完代码先编译再回图形界面MetaEditor和MT5是两个窗口很多人改完代码忘记编译跑到MT5里加载半天发现还是旧逻辑。把“编辑→保存→编译”当成一个不可分割的刷新动作。多用F1查文档MetaEditor内置了完整的MQL5参考文档。遇到不懂的函数光标放上去按F1比你上网搜索快得多而且信息是官方的、准确的。善用模板和代码段常用逻辑开仓、平仓、计算手数、移动止损可以存成自己的片段或模板文件下次写新EA直接插入避免重复敲键盘也减少敲错的风险。定期备份MQL5目录整个MQL5文件夹就是你的全部开发资产。修改重要EA前先复制一份养成版本管理的习惯。数据目录按CtrlShiftD就能打开备份就是把这个文件夹复制到别处。写EA这件事真正拦住大部分人的并不是语法晦涩而是对整个开发链路没有整体概念。Grasp住“源码→编译→加载→运行→调试”这条主线再往里填语法和函数就顺理成章了。下一篇教程我会开始拆解MQL5的语法基础——变量、类型、运算符和控制流程把这些地基打牢后面写策略才能又快又稳。