Ter o problema da Moving Average com fio enquanto criava a EA.

 

o que estou fazendo de errado?

há uma captura de tela de uma parte de um código responsável pela média móvel. Eu substituí todas as variáveis por valores para que você possa ver as configurações. a outra captura de tela mostra a diferença no desenho do MA e do indicador MA lançado no gráfico (ou melhor, todos os 4 tipos deles).

O azul claro é na verdade o alisado e não está nem perto do MA gerado no testador.
O mais próximo do MA gerado é o Simples, mas não corresponde a ele.

O que diabos está acontecendo?

Arquivos anexados:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee:

o que estou fazendo de errado?

há uma captura de tela de uma parte de um código responsável pela média móvel. Eu substituí todas as variáveis por valores para que você possa ver as configurações. a outra captura de tela mostra a diferença no desenho do MA e do indicador MA lançado no gráfico (ou melhor, todos os 4 tipos deles).

O azul claro é na verdade o alisado e não está nem perto do MA gerado no testador.
O mais próximo do MA gerado é o Simples, mas não corresponde a ele.

O que diabos está acontecendo?

E que valor você obteve? Não consigo vê-lo em lugar nenhum.
 
angevoyageur:
E que valor você obteve? Não consigo vê-lo em lugar nenhum.

compare as 2 janelas. uma à esquerda é a MA gerada pelo testador de estratégia. ela vai exatamente entre os negócios. à direita você tem todos os tipos de MA370 (SMA, EMA, SSMA e LWMA) e nenhum deles combina com o MA 370 à esquerda. o SSMA é o azul claro e não está nem perto do MA gerado no teste de retaguarda.

Anexando outra captura de tela com adição de linha de alerta de depuração do valor atual da variável "ma" (exibido o último valor de MA no log e, à direita, o último valor de Light Blue Smoothed 370 MA "jogado" no gráfico)

Notei que os MAs no gráfico se referem ao preço fechado enquanto o código ma se refere ao preço aberto, mas como alterei as médias móveis no gráfico, não as alterou visualmente de forma significativa. eles ainda têm o mesmo aspecto que na captura de tela anexa.

Arquivos anexados:
ma_problem3.png  142 kb
 
não é que ea não funcione. funciona bem, mas quando eu estava depurando, notei que o MA gerado é totalmente diferente do que deveria ser. Eu sei que estou fazendo algo errado, mas ainda não sei o que é. Eu anexei outra captura de tela das configurações da tela azul claro suavizada, assim você tem uma imagem completa.
Arquivos anexados:
ma_problem4.png  66 kb
 
a MA mais parecida que encontrei é a Smoothed MA 220, imagem de tela anexada. Não faz sentido, :( mas talvez seja uma pista de algum tipo...
Arquivos anexados:
ma_problem5.png  57 kb
 

isolei a questão para uma EA separada.

#property copyright   "Grzegorz Korycki"
#property version     "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define  MAGICMA  20131002

double Bid;
double Ask;

   
double OnTester()
{
    double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
    return (custommax);
}

CTrade  trade;
   
void OnTick()
{
   MqlTick last_tick;
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
}
  
int OnInit()
{
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation=99;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode(false);
   return(0);
}  
  
      
      
      
void trend1()
{

   int ma_temp;
   double ma_buffer[20];

   double ma;
   ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);
   CopyBuffer(ma_temp,0,0,1,ma_buffer);
   ma=ma_buffer[0];
   
   Alert("ma=", ma);

}

      


void start()
{
   trend1();
}

O par de teste é GBP/NZD.
Arquivos anexados:
ma_test.mq5  2 kb
 

o problema está ficando cada vez mais estranho. Quando eu testei a EA acima a partir de 2012, os resultados para MA (no diário de bordo você pode ver o valor real) são ligeiramente diferentes do que quando eu testei a partir de 2013. Nenhum deles está próximo do 370 SSMA colocado no gráfico.

Talvez seja algo em minha inicialização que faça a EA agir assim...

incluindo capturas de tela. Observe que as linhas desenhadas estão em níveis diferentes ao comparar as duas capturas de tela e é a mesma EA.

Arquivos anexados:
 

Parece um erro básico: os elementos não são indexados como nas séries temporais (ordem inversa).

Para corrigi-lo, você precisa chamar esta função...

ArraySetAsSeries(ma_buffer,true);
 
figurelli:

Parece um erro básico: os elementos não são indexados como nas séries temporais (ordem inversa).

Para corrigi-lo, você precisa chamar esta função...

quando eu adicionar, eu recebo:

cannot be used for static allocated array       ma_test.mq5     50      4

mas eu só uso 1 frame desta matriz. isso importa? E por que o aviso?

Depois de adicionar esta linha nada mudou (tanto o aviso como os testes anteriores indicam que a adição não teve efeito)

a documentação afirma que ela deve ser usada apenas com constantes:

[...]

const datetime &time[],

[...]

ArraySetAsSeries(time,true); 

e meu ma_buffer é um array de variáveis:

 double ma_buffer[20];
 
angreeee:

quando eu adiciono, eu recebo:

mas eu só uso 1 frame desta matriz. isso importa? E por que o aviso?

Depois de adicionar esta linha nada mudou (tanto o aviso quanto os testes anteriores indicam que a adição não teve efeito)

Você está certo se copiar apenas um quadro, e esta não é a causa raiz (sua declaração de ma_buffer[20] desviou minha atenção para este fato).

Entretanto, sugiro que você mude a linha abaixo para Init() e o cabo para global, porque isto é realmente uma fonte de problemas (depois de fazer isto, por favor, teste-o novamente).

ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);
 
figurelli:

Você está certo se copiar apenas um quadro, e esta não é a causa raiz (sua declaração de ma_buffer[20] desviou minha atenção para este fato).

Entretanto, sugiro que você mude a linha abaixo para Init() e o cabo para global, porque isto é realmente uma fonte de problemas (depois de fazer isto, por favor, teste-o novamente).

modifiquei o roteiro de acordo com suas diretrizes e o problema ainda persiste :(

agora é o que parece:

#property copyright   "Grzegorz Korycki"
#property version     "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define  MAGICMA  20131002

double Bid;
double Ask;

   int ma_temp;
   double ma_buffer[20];

   
double OnTester()
{
    double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);
    return (custommax);
}

   CTrade  trade;
   

   void OnTick()
  {
   MqlTick last_tick;
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
  }
  
int OnInit()
  {
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation=99;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode(false);
   ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);


   return(0);
   }  
  
      
      
      
void trend1()
{

   double ma;
   CopyBuffer(ma_temp,0,0,1,ma_buffer);
   ma=ma_buffer[0];
   
   Alert("ma=", ma);
}

void start()
{
         trend1();

}

talvez alguém possa criar um rascunho de EA como ele criaria tal gerador de valor de MA e eu poderia comparar ambos - testá-lo e isolar o erro. (se alguém tiver alguns minutos de sobra)

Vou verificar em um segundo e responder se o problema é o mesmo em outros pares ou se é apenas este par, pois isto é muito estranho.

Razão: