Autore dell'idea — Gabriel, autore del codice MQL5 — barabashkakvn.
In questo articolo parleremo di una strategia di trading basata sull'indicatore iMACD (MACD), perfetta per operare sul cross EURUSD.
Condizioni per aprire una posizione
Di seguito trovi le condizioni da controllare per decidere se aprire una posizione:
void OpenBuyOrSell()
{
double mac1,mac2,mac3,mac4,mac5,mac6,mac7,mac8;
mac1 = iMACDGet(MAIN_LINE,0);
mac2 = iMACDGet(MAIN_LINE,1);
mac3 = iMACDGet(MAIN_LINE,2);
mac4 = iMACDGet(MAIN_LINE,3);
mac5 = iMACDGet(SIGNAL_LINE,0);
mac6 = iMACDGet(SIGNAL_LINE,1);
mac7 = iMACDGet(SIGNAL_LINE,2);
mac8 = iMACDGet(SIGNAL_LINE,3);
//--- controlla la possibilità di aprire una posizione long (BUY)
if(mac8>mac7 && mac7>mac6 && mac6<mac5 && mac4>mac3 && mac3<mac2 && mac2<mac1 && mac2<-0.00020 && mac4<0 && mac1>0.00020)
{
if(!RefreshRates())
return;
double volume=LotsOptimized();
if(volume==0)
return;
m_trade.Buy(volume,Symbol(),m_symbol.Bid(),0,0,"Expert MACD");
return;
}
//--- controlla la possibilità di aprire una posizione short (SELL)
if(mac8<mac7 && mac7<mac6 && mac6>mac5 && mac4<mac3 && mac3>mac2 && mac2>mac1 && mac2>0.00020 && mac4>0 && mac1<-0.00035)
{
if(!RefreshRates())
return;
double volume=LotsOptimized();
if(volume==0)
return;
m_trade.Sell(volume,Symbol(),m_symbol.Ask(),0,0,"Expert MACD");
return;
}
}
{
double mac1,mac2,mac3,mac4,mac5,mac6,mac7,mac8;
mac1 = iMACDGet(MAIN_LINE,0);
mac2 = iMACDGet(MAIN_LINE,1);
mac3 = iMACDGet(MAIN_LINE,2);
mac4 = iMACDGet(MAIN_LINE,3);
mac5 = iMACDGet(SIGNAL_LINE,0);
mac6 = iMACDGet(SIGNAL_LINE,1);
mac7 = iMACDGet(SIGNAL_LINE,2);
mac8 = iMACDGet(SIGNAL_LINE,3);
//--- controlla la possibilità di aprire una posizione long (BUY)
if(mac8>mac7 && mac7>mac6 && mac6<mac5 && mac4>mac3 && mac3<mac2 && mac2<mac1 && mac2<-0.00020 && mac4<0 && mac1>0.00020)
{
if(!RefreshRates())
return;
double volume=LotsOptimized();
if(volume==0)
return;
m_trade.Buy(volume,Symbol(),m_symbol.Bid(),0,0,"Expert MACD");
return;
}
//--- controlla la possibilità di aprire una posizione short (SELL)
if(mac8<mac7 && mac7<mac6 && mac6>mac5 && mac4<mac3 && mac3>mac2 && mac2>mac1 && mac2>0.00020 && mac4>0 && mac1<-0.00035)
{
if(!RefreshRates())
return;
double volume=LotsOptimized();
if(volume==0)
return;
m_trade.Sell(volume,Symbol(),m_symbol.Ask(),0,0,"Expert MACD");
return;
}
}
Di seguito puoi vedere un esempio di apertura di una posizione di acquisto sul grafico:

Commento 0