MQL5均线交叉EA交易策略:完整代码及SEO优化

这篇文章提供了一个完整的MQL5均线交叉EA交易策略代码,该策略基于快速、中间和慢速三条均线的交叉信号进行交易决策。 为了方便您理解和使用该策略,代码中包含了详细的注释。

代码MQL5//+------------------------------------------------------------------+//| MovingAverageCrossoverEA.mq5 |//| Created by ChatGPT |//+------------------------------------------------------------------+#property copyright 'Created by ChatGPT'#property link 'https://www.example.com'#property version '1.000'//---#include <Trade\PositionInfo.mqh>#include <Trade\Trade.mqh>#include <Trade\SymbolInfo.mqh>

CPositionInfo m_position; // trade position objectCTrade m_trade; // trading objectCSymbolInfo m_symbol; // symbol info object

//--- input parametersinput double Lots = 0.05; // 交易手数input int FastMA = 6; // 快速均线周期input int MedianMA = 16; // 中间均线周期input int SlowMA = 30; // 慢速均线周期input ulong m_magic=42828093; // 魔术数字ulong m_slippage=10; // 滑点

//---int handle_fastMA; // 快速均线指标句柄int handle_medianMA; // 中间均线指标句柄int handle_slowMA; // 慢速均线指标句柄

//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){ //--- if(!m_symbol.Name(Symbol())) // 设置交易品种名称 return(INIT_FAILED);

RefreshRates();

string err_text='';    if(!CheckVolumeValue(Lots,err_text))    {        Print(err_text);        return(INIT_PARAMETERS_INCORRECT);    }

//---    m_trade.SetExpertMagicNumber(m_magic);

if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))        m_trade.SetTypeFilling(ORDER_FILLING_FOK);    else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))        m_trade.SetTypeFilling(ORDER_FILLING_IOC);    else        m_trade.SetTypeFilling(ORDER_FILLING_RETURN);

m_trade.SetDeviationInPoints(m_slippage);

//--- 创建快速均线指标句柄    handle_fastMA = iMA(m_symbol.Name(), PERIOD_M15, FastMA, 0, MODE_SMA, PRICE_CLOSE);    //--- 创建中间均线指标句柄    handle_medianMA = iMA(m_symbol.Name(), PERIOD_M15, MedianMA, 0, MODE_SMA, PRICE_CLOSE);    //--- 创建慢速均线指标句柄    handle_slowMA = iMA(m_symbol.Name(), PERIOD_M15, SlowMA, 0, MODE_SMA, PRICE_CLOSE);

//--- 检查指标句柄是否创建成功    if(handle_fastMA == INVALID_HANDLE || handle_medianMA == INVALID_HANDLE || handle_slowMA == INVALID_HANDLE)    {        Print('Failed to create moving average indicators for the symbol ', m_symbol.Name());        return(INIT_FAILED);    }

return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){ //---}

//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){ //--- 仅在新K线生成时进行交易 static datetime PrevBars=0; datetime time_0=iTime(0); if(time_0==PrevBars) return; PrevBars=time_0;

//--- 获取均线值    double fastMA = iMAGet(0, handle_fastMA);    double medianMA = iMAGet(0, handle_medianMA);    double slowMA = iMAGet(0, handle_slowMA);

//--- 检查当前是否有持仓    for(int i=PositionsTotal()-1;i>=0;i--)    {        if(m_position.SelectByIndex(i))        {            if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)            {                if(m_position.PositionType()==POSITION_TYPE_BUY && fastMA < medianMA && fastMA < slowMA)                {                    //--- 卖出持仓                    m_trade.PositionClose(m_position.Ticket());                    break;                }                else if(m_position.PositionType()==POSITION_TYPE_SELL && fastMA > medianMA && fastMA > slowMA)                {                    //--- 买入持仓                    m_trade.PositionClose(m_position.Ticket());                    break;                }            }        }    }

//--- 添加交易逻辑    double diff = iMAGet(0, handle_fastMA) - iMAGet(0, handle_slowMA);    double dea = iMAGet(0, handle_medianMA);    double macd = 2 * (diff - dea / 2);    double trendLine = iMAGet(0, handle_slowMA);    double prevTrendLine = iMAGet(1, handle_slowMA);

//--- 如果MACD>0且趋势线变为红色区域,进行买入交易    if(macd > 0 && trendLine > prevTrendLine && m_position.PositionType() != POSITION_TYPE_BUY)    {        m_trade.Buy(Lots, m_symbol.Name());    }    //--- 如果MACD<0且趋势线变为绿色区域,进行卖出交易    else if(macd < 0 && trendLine < prevTrendLine && m_position.PositionType() != POSITION_TYPE_SELL)    {        m_trade.Sell(Lots, m_symbol.Name());    }}

//+------------------------------------------------------------------+//| 刷新交易品种行情数据 |//+------------------------------------------------------------------+bool RefreshRates(void){ //--- 刷新行情数据 if(!m_symbol.RefreshRates()) { Print('RefreshRates error'); return(false); }

//--- 保护返回值不为'零'    if(m_symbol.Ask()==0 || m_symbol.Bid()==0)        return(false);

return(true);}

//+------------------------------------------------------------------+//| 检查交易手数的正确性 |//+------------------------------------------------------------------+bool CheckVolumeValue(double volume, string &error_description){ //--- 最小允许交易手数 double min_volume = m_symbol.LotsMin(); if(volume < min_volume) { error_description = StringFormat('Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f', min_volume); return(false); }

//--- 最大允许交易手数    double max_volume = m_symbol.LotsMax();    if(volume > max_volume)    {        error_description = StringFormat('Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f', max_volume);        return(false);    }

//--- 获取交易手内容:数的步长    double volume_step = m_symbol.LotsStep();    //--- 检查交易手数是否为步长的整数倍    double remainder = fmod(volume, volume_step);    if(remainder != 0)    {        error_description = StringFormat('Volume is not a multiple of SYMBOL_VOLUME_STEP=%.2f', volume_step);        return(false);    }

return(true);}

代码说明

该EA交易策略主要基于以下逻辑:

  • 三均线交叉: 使用快速、中间和慢速三条均线判断趋势。* MACD指标: 使用MACD指标辅助判断买入和卖出信号。* 趋势线: 使用慢速均线作为趋势线,判断趋势方向变化。

SEO优化

  • 标题: 使用关键词丰富的标题,例如“MQL5均线交叉EA交易策略:完整代码及SEO优化”。* 描述: 编写简洁明了的描述,突出文章内容,例如“这篇博客提供了一个完整的MQL5均线交叉EA交易策略代码,包含详细的代码注释和SEO优化,帮助您理解和使用该策略进行自动化交易”。* 关键词: 使用相关关键词,例如“MQL5, EA, 交易策略, 均线交叉, 自动化交易, SEO优化”。

免责声明

这只是一个示例代码,不构成任何投资建议。在使用该EA交易策略之前,请您充分了解其风险,并谨慎使用。

MQL5均线交叉EA交易策略:完整代码及SEO优化

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

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