¿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.
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.
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.
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.
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);
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];
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);
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.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
¿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?