花了三千买EA全爆仓后,我花0元自己写了一个——MQL4从零入门实录

| 发表于 4 小时前 | 显示全部楼层 |复制链接
先说个真事。
去年我刚接触外汇EA,在EAHub上看到各种"月收益30%""回撤不到5%"的EA,心动得不行。一口气买了5个,从200块到800块的都有,总共花了差不多三千块本金。
结果呢?
三个月时间,账户从8000亏到不到6000,亏了两万多人民币。
最气人的不是亏钱——是我根本不知道为什么会亏。EA在跑,单子在开,但每次爆仓都是事后才发现:"哦,原来那天非农数据出来EA还在加仓。"
后来我痛定思痛,决定不再买别人的黑盒EA,自己学MQL4写策略。
没想到,这条路比我想象的简单得多。

为什么你应该自己写EA
三个理由:
  • 你知道每一行代码在干什么——不会买了EA才发现它是马丁策略
  • 参数你自己定——止盈止损、仓位大小、交易时段,全部可控
  • 0成本——MetaEditor是免费的,MT4自带的

今天我就带你从零写出人生第一个能自动交易的EA。不需要任何编程基础。

第一步:打开MetaEditor
打开你电脑上的MT4,按键盘上的 F4,MetaEditor就弹出来了。
然后点顶部菜单:文件 → 新建 → EA交易(模板)→ 下一步。
名字填 MyFirstEA,点完成。系统会自动生成一个EA模板,代码大概长这样:
//+------------------------------------------------------------------+//|                                                MyFirstEA.mq4     |//|                                                          郭教授   |//|                                             https://eaceping.com |#property copyright "郭教授"#property link      "https://eaceping.com"#property version   "1.00"#property strict//| Expert initialization function                                   |int OnInit()  {//--- 创建EA时执行一次   return(INIT_SUCCEEDED);  }//| Expert deinitialization function                                 |void OnDeinit(const int reason)  {//--- 移除EA时执行一次  }//| Expert tick function                                             |void OnTick()  {//--- 每次价格变动都执行(重要!)  }

别被这些英文吓到,我逐行解释:
  • OnInit() → EA刚挂上图表时跑一次(初始化)
  • OnDeinit() → EA从图表上移除时跑一次(清理)
  • OnTick() → 核心! 价格每跳动一下就跑一次,你的策略逻辑全写在这里

你只需要在 OnTick() 里面写策略就行了。

第二步:理解你的第一个策略
在写代码之前,先把策略说清楚——代码只是把人的想法翻译给电脑:
当短期均线(5周期)从下方上穿长期均线(20周期)时,做多一单;当短期均线下穿长期均线时,平掉多单。
这就是经典的均线金叉策略,也是全球无数量化交易者的入门第一课。

第三步:写代码(30行搞定)
把下面这段代码完整替换 OnTick() 函数里的大括号内容:
void OnTick()  {   //--- 1. 计算两条均线的值   double maFast_0 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0);  // 5均线,当前K线   double maSlow_0 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0); // 20均线,当前K线      double maFast_1 = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 1);  // 5均线,前一根K线   double maSlow_1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); // 20均线,前一根K线      //--- 2. 判断有没有持仓   bool hasBuy = false;  // 默认没有多单   for(int i = 0; i < OrdersTotal(); i++)     {      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))        {         if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)           {            hasBuy = true;  // 找到了一个多单            break;           }        }     }      //--- 3. 金叉出现 + 没有持仓 → 开多单   if(maFast_1 <= maSlow_1 && maFast_0 > maSlow_0 && !hasBuy)     {      double stopLoss = Ask - 500 * Point;    // 止损500点      double takeProfit = Ask + 1000 * Point; // 止盈1000点            int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, stopLoss, takeProfit, "金叉开多", 777, 0, clrGreen);     }      //--- 4. 死叉出现 + 有多单 → 平仓   if(maFast_1 >= maSlow_1 && maFast_0 < maSlow_0 && hasBuy)     {      for(int i = 0; i < OrdersTotal(); i++)        {         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)              {               OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrRed);              }           }        }     }  }

代码逐行拆解(配合上面数字标注的4个步骤看):
第1步:计算均线值
  • iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0) →
    • NULL 当前图表品种(不用改)
    • 0 当前时间周期(不用改)
    • 5 均线周期——改这里就能调整快慢均线
    • MODE_SMA 简单移动平均
    • PRICE_CLOSE 用收盘价计算
    • 0 当前K线(1=前一根K线)

  • 我们算了两次:当前K线和前一根K线,用来判断"金叉"(交叉发生的瞬间)

第2步:判断有没有持仓
  • OrdersTotal() 总订单数
  • OrderSelect() 选出某一单
  • OrderType() == OP_BUY 判断是不是多单
  • 如果已经有单了就不重复开

第3步:金叉开多
  • maFast_1 <= maSlow_1 前一根K线快线在慢线下方(或交叉)
  • maFast_0 > maSlow_0 当前K线快线跑到慢线上方了 = 金叉!
  • OrderSend() 下多单:0.01手、止损500点、止盈1000点

第4步:死叉平仓
  • maFast_1 >= maSlow_1 前一根快线在上方
  • maFast_0 < maSlow_0 当前快线跑到下方了 = 死叉!
  • OrderClose() 平掉多单


第四步:回测看看效果
代码写好后,按 F7 编译。如果左下角没有报错,恭喜你——你的第一个EA已经可以跑了。
在MT4里按 Ctrl+R 打开策略测试,选你的 MyFirstEA,品种选EURUSD、周期选H1,点开始。
等测试跑完,你就能看到这个EA到底能不能赚钱了。

你可以自己改的三个参数[td]
参数
在哪里改
作用
快均线周期
代码里的 5
金叉灵敏度:越小越敏感
慢均线周期
代码里的 20
趋势判断:越大越稳定
止损止盈
代码里的 500 / 1000
风险控制

写在最后
这只是一个最基础的入门策略,实盘大概率赚不到钱。但它的意义在于——从这一刻开始,你不再是一个只会花钱买EA的人,你开始理解EA背后的逻辑了。
我最初写这个策略的时候,EURUSD H1回测结果是亏损的。然后我开始调整参数、加过滤条件、换品种测试,慢慢地账户曲线开始往上走了。
那种感觉,比买到一个赚钱的EA爽一百倍。

你买过几个EA?现在还活着的还有几个?评论区聊聊,我帮你分析问题出在哪。

下一篇预告:如何用MT5回测数据判断一个EA是马丁策略——1分钟教你看穿黑盒EA的把戏
最近访问 头像模式
举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册