MT4斐波那契线 - MT4 EA自动突破交易从零搭建

搭建EA的基础框架与关键变量
写EA之前,你得先搞清楚它要干哪些活。首先,它得知道你要监控哪条水平线,比如前高或者前低。这个水平线不是随便画的,你得在代码里把它定义成一个变量,通常用双精度浮点数。另外,还得设定突破的幅度,因为有时候价格只是扫一下影线,不算真突破。我一般会设一个“突破点差”,比如10个点,价格必须超过水平线10个点以上,才算有效突破。
在MQL4编辑器里新建一个EA文件,开头先定义输入参数。用input关键字,这样你可以在MT4的EA属性框里随时改数值,不用每次都改代码。比如设定一个double型的水平线价格,再设一个int型的突破点差。还有止损和止盈的数值,也得提前写好,不然开仓后没法自动管理。说实话,我刚开始写的时候老忘记设止损,结果扛单扛到爆仓,后来就学乖了。
接下来是初始化部分,通常在OnInit函数里做点准备工作,比如检查水平线是否合理。如果水平线设得离当前价格太远,EA可能一辈子都不会触发。我会加个简单的判断,如果水平线距离当前价格超过500点,就弹个警告提示。这一步虽然简单,但能避免很多低级错误。代码跑起来后,EA会每来一个新报价就执行一次,所以你得在OnTick函数里写核心逻辑。
还有一个关键点就是开仓方向的判断。如果价格向上突破水平线,就开多单;如果向下突破,就开空单。这个方向不能搞反了,不然就变成逆势交易了。我建议在代码里用两个变量分别记录突破方向,比如一个布尔型变量isBullishBreak,当价格大于水平线加上突破点差时,设为true。这样逻辑清晰,后面调用开仓函数时也不容易乱。
监控价格突破的核心逻辑实现
突破检测的核心其实不复杂,就是拿当前价格跟预设的水平线做比较。在OnTick函数里,每次有新报价时,先获取当前买价和卖价。对于做多来说,你得看卖价(Ask)是否突破了水平线;做空则看买价(Bid)。很多新手会搞混,以为看K线收盘价就行,但EA是实时报价,所以必须用当前盘口的买价和卖价。记住,开多单用Ask突破,开空单用Bid跌破。
为了过滤假突破,我习惯加一个“确认条件”。比如,价格突破后,连续两个报价都保持在突破点差之外,才算确认。这个可以用一个计数器来实现。每来一个报价,如果满足突破条件,计数器加1;如果不满足,计数器清零。当计数器达到2时,才触发开仓。说实话,这个技巧是我从别人写的EA里偷师来的,用了之后假信号少了很多,胜率明显提升。
还有一个容易忽略的细节:避免重复开仓。如果价格突破后,EA开了一单,然后价格又回撤再突破,可能会重复开仓。所以你得在代码里加一个开仓状态标记。比如用一个静态变量bool tradeOpened,初始设为false。当开仓成功后,立刻设为true,并且只在false状态下才执行开仓逻辑。这样的话,直到你手动平仓或者EA重新启动前,它都不会再开第二单。
光有突破检测还不够,你还得考虑水平线的动态更新。比如,如果你设的是前高突破,那每次突破后,新的高点可能成为新的水平线。但说实话,这个功能比较复杂,对于新手来说,最好先固定一个水平线,比如手动画一条线,然后在EA里读取这条线的价格。MT4里有个ObjectGet函数,可以获取画线对象的价格,用起来很方便。这样你就不用每次改代码,直接在图表上拖动水平线就行。
开仓与仓位管理的自动化设置
突破确认后,下一步就是开仓。MQL4里有个OrderSend函数,专门用来下订单。你需要传入交易品种、开仓方向、手数、开仓价格、滑点、止损价、止盈价、注释、魔法号等参数。手数不要设太大,我一般建议用0.01手先测试,等跑稳了再慢慢加。魔法号是个很重要的东西,用来标记这个订单是哪个EA开的,方便后续管理。你可以在EA的输入参数里定义一个int型的魔法号,每个EA用不同的数字。
止损和止盈的设置得跟突破逻辑匹配。比如做多突破,止损可以放在水平线下方10-20个点,止盈则根据盈亏比来定。我习惯设一个固定的点数,比如止损30点,止盈60点,这样盈亏比是1:2。当然,你也可以用动态止损,比如追踪止损,但那样代码会更复杂。对于新手来说,固定止损止盈已经够用了。记住,止损价和止盈价在OrderSend里要用市场价格加减点数来计算,别搞反了方向。
开仓后,EA还得继续监控仓位。你可以在OnTick里加一段代码,检查当前持仓的盈利情况。如果盈利达到一定点数,可以移动止损到成本价附近,保证不亏钱。这个功能叫“保本止损”,说实话,是防止盈利变亏损的好办法。实现起来也不难,用OrderSelect函数选中订单,然后比较当前价格和开仓价,如果浮动盈利大于某个值,就修改止损价。
仓位管理这块,还有一个常见的做法是分批开仓。比如价格突破后先开0.01手,如果价格继续向有利方向移动10个点,再加0.01手。
这样既能控制风险,又能放大收益。但加仓逻辑要小心,不要加得太频繁,否则仓位会变得很重。我一般只加一次,而且加仓的条件比首次开仓更严格,比如需要价格突破后再突破一个次级水平线。这部分的代码量会大一些,但效果确实不错。
测试优化与实盘注意事项
写好的EA不能直接扔到实盘上,得先在MT4的策略测试器里跑一遍。测试的时候,选好交易品种和时间周期,比如EURUSD的1小时图,然后运行EA。看看它的历史回测结果,重点关注胜率、最大回撤和总盈亏。如果回测结果不好,别急着改代码,先分析一下是什么原因。比如是不是突破点差设得太小,导致太多假信号;或者是不是止损设得太紧,被频繁扫掉。
优化参数也是个技术活。你可以用MT4的优化功能,让软件自动跑不同参数组合,找出最优解。但要注意,不要过度优化,否则EA在实盘上会失效。我有个经验,优化时只看最近半年的数据,不要用太久的历史。而且,优化出来的参数要在不同的时间段里再验证一下,比如用前一年的数据跑一遍,看看结果是否稳定。如果相差太大,说明这个参数组合不够稳健。
实盘运行前,还有几个坑要避开。第一,确保你的MT4平台是24小时在线的,不然EA断线了就无法监控。可以用VPS(虚拟专用服务器)来跑,一个月几十块钱,很划算。第二,注意交易商的点差和佣金,突破交易对点差比较敏感,点差太大的话,突破点差设小了可能根本赚不到钱。第三,要定期检查EA的运行日志,看看有没有报错。比如订单被拒绝,可MT4账户历史报表注释筛选功能缺失的应对办法能是账户资金不足或者交易时间不对。
最后,说实话,没有哪个EA是万能的。突破交易在震荡行情里很容易连续亏损,所以你得有心理准备。我建议在EA里加一个开仓次数限制,比如一天最多开3单,这样能避免在不好的行情里过度交易。另外,如果连续亏损3次,可以暂停EA一段时间,等行情恢复正常再启动。这些风控逻辑虽然简单,但能帮你保住本金。毕竟,活下来比赚多少更重要。