把以下交易函数和交易逻辑写到下面的MT5交易代码之中:交易函数:DIFF=EMACLOSE12 - EMACLOSE26;DEA=EMADIFF9;MACD=2DIFF-DEA2;AH=HHVMACD131;AL=LLVMACD1303;STICKLINEMACD0 MACD010COLOR0000AALINETHICK1;STICKLINEMACD0 MACD010COLOR008800LINE
//+------------------------------------------------------------------+ //| 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 object CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object
//--- input parameters input 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;
}
}
}
}
//--- 如果快速均线上穿中间均线和慢速均线,进行买入交易
if(fastMA > medianMA && fastMA > slowMA && m_position.PositionType() != POSITION_TYPE_BUY)
{
m_trade.Buy(Lots, m_symbol.Name());
}
//--- 如果快速均线下穿中间均线和慢速均线,进行卖出交易
else if(fastMA < medianMA && fastMA < slowMA && m_position.PositionType() != POSITION_TYPE_SELL)
{
m_trade.Sell(Lots, m_symbol.Name());
}
//--- 添加交易逻辑
double DIFF = iMA(CLOSE, 12, 0, MODE_EMA, PRICE_CLOSE
原文地址: https://www.cveoy.top/t/topic/iqeU 著作权归作者所有。请勿转载和采集!