CrossMA: Sistema de Trading para MetaTrader 5

Mike 2017.01.26 18:05 25 0 0
Anexo

Autor da ideiaGeorge F.Peskov, criador do código MQL5barabashkakvn.

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);

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;
     }

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;
     }

Lista
Comentário 0