Tener un problema de media móvil cableada al crear EA..

 

¿qué estoy haciendo mal?

hay una captura de pantalla de una parte del código responsable de la media móvil. Reemplacé todas las variables con valores para que pueda ver la configuración. la otra captura de pantalla muestra la diferencia en el dibujo de la MA y el indicador MA lanzado en el gráfico (o más bien los 4 tipos de ellos).

El Light Blue es en realidad el Smoothed y no se acerca en absoluto al MA generado en el tester.
La más cercana a la MA generada es la Simple, pero no coincide con ella.

¿Qué diablos está pasando?

Archivos adjuntos:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee:

¿qué estoy haciendo mal?

hay una captura de pantalla de una parte del código responsable de la media móvil. Reemplacé todas las variables con valores para que pueda ver la configuración. la otra captura de pantalla muestra la diferencia en el dibujo de la MA y el indicador MA lanzado en el gráfico (o más bien los 4 tipos de ellos).

El Light Blue es en realidad el Smoothed y no se acerca en absoluto al MA generado en el probador.
La más cercana a la MA generada es la Simple, pero no coincide con ella.

¿Qué diablos está pasando?

¿Y qué valor obtuviste? No lo veo por ningún lado.
 
angevoyageur:
¿Y qué valor obtuviste? No lo veo por ningún lado.

compare las 2 ventanas. la de la izquierda es la MA generada por el probador de estrategias. va exactamente entre las operaciones. a la derecha tiene todos los tipos de MA370 (SMA, EMA, SSMA, y LWMA) y ninguno de ellos coincide con la MA 370 de la izquierda. la SSMA es la de color azul claro y no se acerca a la MA generada en el back-test.

Adjuntando otra captura de pantalla con la línea de alerta de depuración añadida del valor actual de la variable "ma" (se muestra el último valor de la MA en el registro, y a la derecha el último valor de la MA 370 suavizada de color azul claro "lanzada" en el gráfico)

Me he dado cuenta de que las MAs en el gráfico se refieren al precio de cierre mientras que el código ma se refiere al precio de apertura, pero como he cambiado las medias móviles en el gráfico no las ha cambiado visualmente de forma significativa. siguen pareciendo las mismas que en la captura de pantalla adjunta.

Archivos adjuntos:
ma_problem3.png  142 kb
 
no es que el ea no funcione. funciona bien, pero cuando estaba depurando me di cuenta de que el MA generado es totalmente diferente de lo que debería ser. Sé que estoy haciendo algo mal, pero todavía no sé lo que es. Adjunto otra captura de pantalla de los ajustes del ea suavizado en azul claro, para que tengan una imagen completa.
Archivos adjuntos:
ma_problem4.png  66 kb
 
el MA más similar que he encontrado es Smoothed MA 220, captura de pantalla adjunta. No tiene ningún sentido, :( pero tal vez es una pista de algún tipo..
Archivos adjuntos:
ma_problem5.png  57 kb
 

He aislado el problema a un EA separado.

#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();
}

El par de prueba es GBP/NZD.
Archivos adjuntos:
ma_test.mq5  2 kb
 

el problema es cada vez más extraño. Cuando pruebo el EA anterior de 2012 da resultados ligeramente diferentes para MA (en el registro del diario se puede ver el valor real) que cuando lo pruebo de 2013. Ninguno de ellos se acerca al 370 SSMA puesto en el gráfico.

Tal vez sea algo en mi inicialización que hace que el EA actúe así?

Incluyendo capturas de pantalla. Fíjate que las líneas dibujadas están en niveles diferentes al comparar ambas capturas de pantalla y es el mismo EA.

Archivos adjuntos:
 

Parece un error básico: los elementos no están indexados como en las series de tiempo (orden inverso).

Para solucionarlo, es necesario llamar a esta función...

ArraySetAsSeries(ma_buffer,true);
 
figurelli:

Parece un error básico: los elementos no están indexados como en las series de tiempo (orden inverso).

Para solucionarlo, hay que llamar a esta función ...

cuando la añado obtengo:

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

pero solo uso 1 frame de este array. ¿importa eso? ¿Y por qué la advertencia?

Después de añadir esta línea no ha cambiado nada (tanto la advertencia como las pruebas retrospectivas indican que añadirla no ha tenido ningún efecto)

la documentación indica que debe usarse sólo con constantes:

[...]

const datetime &time[],

[...]

ArraySetAsSeries(time,true); 

y mi ma_buffer es un array variable:

 double ma_buffer[20];
 
angreeee:

cuando lo añado obtengo:

pero solo uso 1 cuadro de este array. ¿importa eso? ¿Y por qué la advertencia?

Después de añadir esta línea no ha cambiado nada (tanto la advertencia como las pruebas retrospectivas indican que añadirla no ha tenido ningún efecto)

Tienes razón si copias sólo un fotograma, y ésta no es la causa principal (tu declaración de ma_buffer[20] desvió mi atención a este hecho).

Sin embargo te sugiero que muevas la línea de abajo a Init() y el handle a global, porque esto es realmente una fuente de problemas (después de hacer esto por favor pruébalo de nuevo).

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

Tienes razón si copias sólo un fotograma, y esta no es la causa principal (tu declaración de ma_buffer[20] desvió mi atención a este hecho).

Sin embargo te sugiero que muevas la línea de abajo a Init() y el handle a global, porque esto es realmente una fuente de problemas (después de hacer esto por favor pruébalo de nuevo).

he modificado el script de acuerdo a tus indicaciones y el problema aún persiste :(

ahora se ve así:

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

}

tal vez alguien pueda crear un borrador de EA como crearía dicho generador de valores MA y yo podría comparar ambos - probarlo y aislar el error. (si alguien tiene unos minutos de sobra)

Voy a comprobar en un segundo y responder si el problema es el mismo en otros pares o es sólo este par, ya que esto es muy extraño.

Razón de la queja: