Autor da ideia — George F.Peskov, criador do código MQL5 — barabashkakvn.
O CrossMA é um sistema de trading que utiliza a interseção de duas Médias Móveis (iMA) para identificar oportunidades de compra e venda. O stop loss é ajustado automaticamente com base no valor do ATR, garantindo maior segurança nas operações. Além disso, sempre que uma nova posição é aberta ou fechada, uma mensagem é enviada por e-mail, mantendo você informado sobre suas operações. Os parâmetros podem ser ajustados através de backtesting para otimizar os resultados.
Obtendo os valores dos indicadores nas primeiras barras:
//--- obter Média Móvel
mas=iMAGet(handle_iMA1,1); // média móvel longa 12
maf=iMAGet(handle_iMA2,1); // média móvel curta 4
mas_p=iMAGet(handle_iMA1,2); // média móvel longa 12
maf_p=iMAGet(handle_iMA2,2); // média móvel curta 4
Atr=iATRGet(0);
mas=iMAGet(handle_iMA1,1); // média móvel longa 12
maf=iMAGet(handle_iMA2,1); // média móvel curta 4
mas_p=iMAGet(handle_iMA1,2); // média móvel longa 12
maf_p=iMAGet(handle_iMA2,2); // média móvel curta 4
Atr=iATRGet(0);
Verificando as condições para venda:
//--- Condição para venda
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="Operação VENDA por"+Symbol()+"";
sBodyLetter="Negócio Venda por"+Symbol()+" a "+DoubleToString(m_symbol.Bid(),Digits())+
", e stop/loss definido em "+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="Operação VENDA por"+Symbol()+"";
sBodyLetter="Negócio Venda por"+Symbol()+" a "+DoubleToString(m_symbol.Bid(),Digits())+
", e stop/loss definido em "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Verificando as condições para compra:
//--- Condição para compra
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="Operação COMPRA a"+Symbol()+"";
sBodyLetter="Negócio Compra a"+Symbol()+" por "+DoubleToString(m_symbol.Ask(),Digits())+
", e stop/loss definido em "+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="Operação COMPRA a"+Symbol()+"";
sBodyLetter="Negócio Compra a"+Symbol()+" por "+DoubleToString(m_symbol.Ask(),Digits())+
", e stop/loss definido em "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Comentário 0