MT5 EA交易代码:基于MACD趋势策略

本篇文章提供一个基于MACD指标和趋势线的MT5 EA交易代码示例,帮助你学习EA开发以及实现自动交易策略。

交易函数

以下是使用的交易函数:

DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA/2);AH:=HHV(MACD,131);AL:=LLV(MACD,130.3);STICKLINE(MACD>0 ,MACD,0,1,0),COLOR0000AA,LINETHICK1;STICKLINE(MACD<0 ,MACD,0,1,0),COLOR008800,LINETHICK1;趋势线:=EMA(MACD,34,1);PARTLINE(趋势线,趋势线>REF(趋势线,1),RGB(255,0,0),趋势线<REF(趋势线,1),RGB(0,255,0)),LINETHICK1;FILLRGN(趋势线,REF(趋势线,1),趋势线>REF(趋势线,1),RGB(255,0,0),趋势线<=REF(趋势线,1),RGB(0,255,0));K:=SMA(MACD,2,1);D:=SMA(K,2,1);J:SMA(D,2,1);STICKLINE(MACD>0,0.000001,0.000003,15,0),colorred;STICKLINE(MACD<0,0.000001,0.000003,15,0),colorgreen;PARTLINE(K,K>REF(K,1),RGB(255,0,0),K<REF(K,1),RGB(0,255,0)),LINETHICK1;PARTLINE(D,D>REF(D,1),RGB(255,0,0),D<REF(D,1),RGB(0,255,0)),LINETHICK1;PARTLINE(J,J>REF(J,1),RGB(255,0,0),J<REF(J,1),RGB(0,255,0)),LINETHICK2;STICKLINE(REF(MACD,1)<MACD,MACD,REF(MACD,1),7,0),colorred;STICKLINE(MACD=AH,AH,K,8,0),LINETHICK1,colorred;STICKLINE(REF(MACD,2)>MACD,MACD,REF(MACD,1),8,1),colorgreen;

交易逻辑

  • 做多: 当趋势线(EMA(MACD,34,1))变为红色区域,且 STICKLINE(REF(MACD,1)<MACD,MACD,REF(MACD,1),7,0),colorred 也为红色时开始做多,当趋势线变为红色区域,且 STICKLINE(MACD=AH,AH,K,8,0),LINETHICK1,colorred 为红色时做多,并一直持仓,直到趋势线变为绿色区域时平仓。* 做空: 当趋势线变为绿色区域,且 STICKLINE(REF(MACD,2)>MACD,MACD,REF(MACD,1),8,1),colorgreen 也为绿色时开始做空,并一直持仓,直到趋势线变为红色区域时平仓。

MT5 EA交易代码 (mq5)mq5//+------------------------------------------------------------------+//| Trend_MACD_Trading.mq5 |//| Copyright © 2021 MetaQuotes |//| https://www.mql5.com/en/ |//+------------------------------------------------------------------+#property copyright 'Copyright © 2021 MetaQuotes'#property link 'https://www.mql5.com/en/'#property version '1.00'#property strict

// 输入参数input int EMA1_Period = 12;input int EMA2_Period = 26;input int EMA3_Period = 9;input int EMA4_Period = 34;

// 全局变量double diff, dea, macd, ah, al, trendLine, k, d, j;bool isLong = false;bool isShort = false;

//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit(){ // 设置EMA指标参数 SetIndexBuffer(0, diff); SetIndexBuffer(1, dea); SetIndexBuffer(2, macd); SetIndexBuffer(3, ah); SetIndexBuffer(4, al); SetIndexBuffer(5, trendLine); SetIndexBuffer(6, k); SetIndexBuffer(7, d); SetIndexBuffer(8, j); SetIndexStyle(0, DRAW_LINE); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, DRAW_HISTOGRAM); SetIndexStyle(3, DRAW_LINE); SetIndexStyle(4, DRAW_LINE); SetIndexStyle(5, DRAW_LINE); SetIndexStyle(6, DRAW_LINE); SetIndexStyle(7, DRAW_LINE); SetIndexStyle(8, DRAW_LINE); SetIndexDrawBegin(0, EMA2_Period); SetIndexDrawBegin(1, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(2, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(3, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(4, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(5, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(6, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(7, EMA2_Period + EMA3_Period - 1); SetIndexDrawBegin(8, EMA2_Period + EMA3_Period - 1); return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]){ int limit = rates_total - prev_calculated; // 计算指标数值 for(int i = 0; i < limit; i++) { diff[i] = iMA(NULL, 0, EMA1_Period, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, EMA2_Period, 0, MODE_EMA, PRICE_CLOSE, i); dea[i] = iMAOnArray(diff, rates_total, EMA3_Period, 0, MODE_EMA, i); macd[i] = 2 * (diff[i] - dea[i] / 2); ah[i] = iHighest(NULL, 0, MODE_MAIN, EMA2_Period, i); al[i] = iLowest(NULL, 0, MODE_MAIN, MathRound(EMA2_Period * 0.3), i); trendLine[i] = iMAOnArray(macd, rates_total, EMA4_Period, 0, MODE_EMA, i); k[i] = iMAOnArray(macd, rates_total, 2, 1, MODE_SMA, i); d[i] = iMAOnArray(k, rates_total, 2, 1, MODE_SMA, i); j[i] = iMAOnArray(d, rates_total, 2, 1, MODE_SMA, i); } // 判断交易条件 if(trendLine[limit - 1] > trendLine[limit - 2] && macd[limit - 1] > 0 && macd[limit - 2] < 0) { isLong = true; isShort = false; } if(trendLine[limit - 1] < trendLine[limit - 2] && macd[limit - 1] < 0 && macd[limit - 2] > 0) { isLong = false; isShort = true; } // 执行交易操作 if(isLong) { // 做多操作 OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0, 'Long Order', 0, 0, clrRed); } else if(isShort) { // 做空操作 OrderSend(Symbol(), OP_SELL, 0.01, Bid, 3, 0, 0, 'Short Order', 0, 0, clrGreen); } return(rates_total);}

注意:

  • 以上代码仅为示例代码,可能需要根据具体需求进行修改和优化。* 代码中的交易操作仅为示例,实际交易时应根据具体情况进行调整和完善,例如添加止损止盈等。 * 在使用EA交易前,请务必进行充分的测试和评估风险。

希望本文能够帮助你更好地理解和使用MT5 EA进行交易!

MT5 EA交易代码:基于MACD趋势策略

原文地址: https://www.cveoy.top/t/topic/fvXP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录