Auteur de l'idée : George F.Peskov, auteur du code MQL5 : barabashkakvn.
Le système de trading CrossMA repose sur l'intersection de deux moyennes mobiles (iMA). Le stop loss est automatiquement déterminé en fonction de la valeur de l'ATR. Une notification par e-mail est envoyée chaque fois qu'une position est ouverte ou fermée. Les paramètres peuvent être ajustés grâce au backtesting.
Récupération des valeurs d'indicateur :
//--- Récupérer la Moyenne Mobile
mas=iMAGet(handle_iMA1,1); // moyenne mobile longue 12
maf=iMAGet(handle_iMA2,1); // moyenne mobile courte 4
mas_p=iMAGet(handle_iMA1,2); // moyenne mobile longue 12
maf_p=iMAGet(handle_iMA2,2); // moyenne mobile courte 4
Atr=iATRGet(0);
mas=iMAGet(handle_iMA1,1); // moyenne mobile longue 12
maf=iMAGet(handle_iMA2,1); // moyenne mobile courte 4
mas_p=iMAGet(handle_iMA1,2); // moyenne mobile longue 12
maf_p=iMAGet(handle_iMA2,2); // moyenne mobile courte 4
Atr=iATRGet(0);
Conditions de vente :
//--- Condition pour vendre
if(maf<mas && maf_p>=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Ask()+Atr,Digits());
res=m_trade.Sell(lots,Symbol(),m_symbol.Bid(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Opération VENTE par "+Symbol()+"";
sBodyLetter="Transaction VENTE par "+Symbol()+" à "+DoubleToString(m_symbol.Bid(),Digits())+
", avec un stop/loss à "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
if(maf<mas && maf_p>=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Ask()+Atr,Digits());
res=m_trade.Sell(lots,Symbol(),m_symbol.Bid(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Opération VENTE par "+Symbol()+"";
sBodyLetter="Transaction VENTE par "+Symbol()+" à "+DoubleToString(m_symbol.Bid(),Digits())+
", avec un stop/loss à "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Conditions d'achat :
//--- Condition pour acheter
if(maf>mas && maf_p<=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Bid()-Atr,Digits());
res=m_trade.Buy(lots,Symbol(),m_symbol.Ask(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Opération ACHAT à "+Symbol()+"";
sBodyLetter="Transaction ACHAT à "+Symbol()+" pour "+DoubleToString(m_symbol.Ask(),Digits())+
", avec un stop/loss à "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
if(maf>mas && maf_p<=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Bid()-Atr,Digits());
res=m_trade.Buy(lots,Symbol(),m_symbol.Ask(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Opération ACHAT à "+Symbol()+"";
sBodyLetter="Transaction ACHAT à "+Symbol()+" pour "+DoubleToString(m_symbol.Ask(),Digits())+
", avec un stop/loss à "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}

Commentaire 0