【原创EA教程】用MQL4编写简易量化交易程序 - 入门指南

[复制链接]
查看: 738|回复: 2

【原创EA教程】用MQL4编写简易量化交易程序 - 入门指南

[复制链接]
查看: 738|回复: 2
FuXiangheng

4

主题

1

回帖

207

积分

实习版主

积分
207
FuXiangheng 2025-7-14 08:14:56 | 显示全部楼层 |阅读模式
EA交易
类别: 趋势
类型: 源码
平台: MT4 
一、MQL4基础介绍
MQL4(MetaQuotes Language 4)是MetaTrader 4交易平台的专用编程语言,用于开发自动交易系统(Expert Advisors)、自定义指标和脚本。
二、开发环境准备
  • 打开MT4客户端
  • 点击顶部菜单"工具"->"MQ语言编辑器"或按F4
  • 新建EA程序:文件->新建->Expert Advisor


三、简易EA框架代码


//+------------------------------------------------------------------+
//|                                                  示例.mq4     |
//|                        Copyright 2025, 作者名               |
//|                                       https://www.eafx.top |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, 作者名"
#property link      "https://www.eafx.top"
#property version   "1.00"
#property strict

// 输入参数
input double LotSize = 0.1;       // 交易手数
input int    TakeProfit = 50;     // 止盈点数
input int    StopLoss = 30;       // 止损点数
input int    MagicNumber = 12345; // EA唯一标识(魔术号,必须有)

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // EA初始化代码
   Print("EA初始化完成");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // EA终止代码
   Print("EA终止");
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 每个tick执行的交易逻辑
   if(ShouldBuy())
   {
      OpenBuyOrder();
   }
   else if(ShouldSell())
   {
      OpenSellOrder();
   }
}


四、核心交易逻辑实现1. 开仓条件判断函数

bool ShouldBuy()
{
   // 简单示例:当快速均线上穿慢速均线时买入
   double fastMA = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0);
   double slowMA = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
   
   return (fastMA > slowMA);
}

bool ShouldSell()
{
   // 简单示例:当快速均线下穿慢速均线时卖出
   double fastMA = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0);
   double slowMA = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
   
   return (fastMA < slowMA);
}


2. 开仓函数实现

void OpenBuyOrder()
{
   // 检查是否已有持仓
   if(OrdersTotal() > 0) return;
   
   // 计算止盈止损价格
   double tp = Ask + TakeProfit * Point;
   double sl = Ask - StopLoss * Point;
   
   // 发送买单
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp, "SimpleEA Buy Order", MagicNumber, 0, clrGreen);
}

void OpenSellOrder()
{
   // 检查是否已有持仓
   if(OrdersTotal() > 0) return;
   
   // 计算止盈止损价格
   double tp = Bid - TakeProfit * Point;
   double sl = Bid + StopLoss * Point;
   
   // 发送卖单
   OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp, "SimpleEA Sell Order", MagicNumber, 0, clrRed);
}


五、EA测试与优化
  • 编译代码:点击"编译"按钮或按F7,若无错误存在则编译成功,若存在错误则编译失败,修正错误后可重新编译
  • 在MT4中测试:
    • 点击"查看"->"策略测试"
    • 选择你的EA
    • 设置测试参数
    • 点击"开始"


六、进阶功能建议
  • 添加移动止损功能
  • 实现多条件交易策略
  • 加入资金管理模块
  • 添加交易时间限制

七、注意事项
  • 始终在模拟账户测试新EA
  • 注意点差和滑点的影响
  • 考虑服务器延迟问题
  • 避免过度优化
  • 做好风险管理

希望这篇教程能帮助大家入门MQL4编程!如果有任何问题,欢迎在评论区留言讨论。
我会在后续帖子中介绍更复杂的EA开发技巧,包括高级订单管理、自定义指标集成和机器学习应用等。
祝大家交易顺利!


liyun1012

19

主题

54

回帖

659

积分

高级会员

积分
659
liyun1012 2025-10-25 10:22:19 | 显示全部楼层
学习了。谢谢分享
wang43310854

0

主题

18

回帖

40

积分

新手上路

积分
40
wang43310854 2026-3-18 11:13:49 来自手机 | 显示全部楼层
学到老,活到老
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|EA交易者联盟 |

 · EA分享网-EA交易者联盟 公益呈现。

风险提示:大陆地区擅自从事外汇保证金交易的双方不受法律保护!本站(www.eafx.top)展示信息,均为网友自发分享,不限于外汇黄金知识(外汇黄金入门知识,外汇黄金交易知识,外汇黄金EA知识,外汇黄金EA编程知识等),外汇黄金软件工具(外汇黄金EA,外汇黄金指标,外汇黄金交易系统,外汇黄金跟单软件等),外汇黄金话题讨论(外汇黄金平台介绍,外汇黄金论坛交流,外汇黄金交易策略研究,外汇黄金行情分析)等内容,该内容不构成外汇黄金投资建议。本网站提供的产品与服务不适用于中国境内居民。本网站上的任何内容均不得解释为对中国境内任何个人的邀请。本站展示的EA等外汇黄金交易软件,本网站没有审核职责,用户应谨慎下载使用,且下载即代表知晓并认同风险提示,使用软件过程中带来的风险与本站无关,用户需自行承担相关后果和责任。