Médias móveis em tempo de execução divergente da média móvel do gráfico.

 

Boa noite a todos...

Tanto o iMA quando o iCustom não fica igual aos indicadores desenhados no gráfico, dando a entender que o cruzamento está ocorrendo com atraso. Alguém saberia como buscar exatamente o momento do cruzamento das linhas que o usuário vê?

 
Lucas Belkys Carvalho Goncalves:

Boa noite a todos...

Tanto o iMA quando o iCustom não fica igual aos indicadores desenhados no gráfico, dando a entender que o cruzamento está ocorrendo com atraso. Alguém saberia como buscar exatamente o momento do cruzamento das linhas que o usuário vê?

Impossível.

Sem código, só com Bola de Cristal...

 
Flavio Jarabeck:

Impossível.

Sem código, só com Bola de Cristal...

Vamos ver se esse especialista consegue...


int OnInit()

  {

//---   

   /*

   

   */

   EventSetTimer(1);

   sma=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

//   sma=iCustom(_Symbol,_Period,"Custom Moving Average.ex5",20,0,MODE_SMA,PRICE_CLOSE);

   if(sma==INVALID_HANDLE)

     {

      return INIT_FAILED;

     }

   else 

     { 

     ema=iMA(_Symbol,PERIOD_CURRENT,3,0,MODE_EMA,PRICE_CLOSE); 

//     ema=iCustom(_Symbol,_Period,"Custom Moving Average.ex5",3,0,MODE_EMA,PRICE_CLOSE);

     if(ema==INVALID_HANDLE)

      {

      return INIT_FAILED;

      }

     }

//--- 

   Print("EA Inicializado com sucesso.");            

   

   return(INIT_SUCCEEDED);

  }



void OnTick()

  {

//---

   last_tick = getTick(_Symbol);   

//---

   

   if(!CopyBuffer(sma,MAIN_LINE,1,20,sma_data))

      return;


   if(!CopyBuffer(ema,MAIN_LINE,1,3,ema_data))

      return;               

   if( ema_data[0] > sma_data[0] && ema_data[0] < sma_data[1]){


         Comment("Cotacao Atual: ",sma_data[0], " Media Simples: ", sma_data[0]," Media Exponencial: ", ema_data[1]);

         Print("Cotacao Atual: ",sma_data[0], " Media Simples: ", sma_data[0]," Media Exponencial: ", ema_data[1]);

         orderNow("BUY", last_tick.ask);         

      

   }

   else

     {

          

      if (ema_data[0] < sma_data[0] && ema_data[0] > sma_data[1]){

      

         Comment("Cotacao Atual: ",sma_data[0], " Media Simples: ", sma_data[0]," Media Exponencial: ", ema_data[1]);

         Print("Cotacao Atual: ",sma_data[0], " Media Simples: ", sma_data[0]," Media Exponencial: ", ema_data[1]);

         orderNow("SELL", last_tick.bid);                  

      }

     }

   

   return;

  }

 

Sou novo em MQL4, e estou tendo que alterar um código, podem me ajudar em descobrir o valor (taxa) de uma vela 10 períodos atrás, e o valor (taxa) que uma SMA esta no momento ?

Obrigado.

 
NWI.Leonardo1:

Sou novo em MQL4, e estou tendo que alterar um código, podem me ajudar em descobrir o valor (taxa) de uma vela 10 períodos atrás, e o valor (taxa) que uma SMA esta no momento ?

Obrigado.

Boa noite!

   //--- Fechamento
   double PriceClose = iClose(_Symbol, PERIOD_CURRENT, 10);

   //--- SMA
   double DataMA = iMA(_Symbol, PERIOD_CURRENT, 12, 0, MODE_SMA, PRICE_CLOSE, 10);
 
Lucas Belkys Carvalho Goncalves:

. . .

Boa noite!


Você pode utilizar o exemplo abaixo para trabalhar com as médias móveis:

//+------------------------------------------------------------------+
//|                                                           MA.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int sma, ema;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sma=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);
   if(sma == INVALID_HANDLE)
     {
      Print(_Symbol, " - Error creating MA indicator...");
      return(INIT_FAILED);
     }

   ema=iMA(_Symbol,PERIOD_CURRENT,3,0,MODE_EMA,PRICE_CLOSE); 
   if(ema == INVALID_HANDLE)
     {
      Print(_Symbol, " - Error creating MA indicator...");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double sma_data[], ema_data[];

   if(CopyBuffer(sma,MAIN_LINE,1,2,sma_data) < 0)
     {
      Print(_Symbol, " - Failed to copy data from MA indicator...");
      return;
     }

   if(CopyBuffer(ema,MAIN_LINE,1,2,ema_data) < 0)
     {
      Print(_Symbol, " - Failed to copy data from MA indicator...");
      return;
     }

   //--- Buy signal
   if(ema_data[0] <= sma_data[0] && ema_data[1] > sma_data[1])
     {
      . . .
     }

   //--- Sell signal
   else if (ema_data[0] >= sma_data[0] && ema_data[1] < sma_data[1])
     {
      . . .
     }
  }
//+------------------------------------------------------------------+
//| Expert End                                                       |
//+------------------------------------------------------------------+
Razão: