Línea:
if(period<=1 || rates_total-begin<period) return(0);
debe ser una igualdad no estricta:
if(period<1 || rates_total-begin<period) return(0);De lo contrario, si, por ejemplo, compila el código de entrega MACD.mq5 y establece InpSignalSMA=1, la línea Señal será igual a cero, mientras que debería ser igual a la línea MACD.
¿Por qué necesitas el último parámetro weightsum en
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
mientras que las otras 3 funciones no lo tienen. Si aún es necesario, cómo utilizarlo cuando al inicializar la variable externa pesosum=0, las otras funciones funcionan torcidamente y generan el error de división por cero.
¿Por qué necesitas el último parámetro weightsum en
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
mientras que las otras 3 funciones no lo tienen. Si aún es necesario, cómo utilizarlo al inicializar la variable externa weightsum=0, las otras funciones funcionan torcidamente y generan el error de división por cero.
En un indicador similar Custom Moving Average.mq5, suministrado con el terminal, se declara dentro de la función
static int weightsum;
como estática, es decir, no se restablecerá en cada nuevo recálculo del indicador. En los indicadores static int weightsum - no se cruzan, porque son hilos diferentes y tienen sus propias variables.
Pero supongo que si contamos 2 o más LWMAs (que se ejecutan desde el Asesor Experto) con diferentes períodos, entonces weightsum debe ser diferente para cada uno, y no 1 para todos declarando estática dentro de la función.
Por lo tanto, para cada LWMA, necesitamos tener nuestra propia variable global, que pasaremos a LinearWeightedMAOnBuffer(),
Por ejemplo, si hay 2 LWMAs, las siguientes variables deben ser declaradas globalmente
int pesosum1;
int pesosum2;
y luego hay que pasarlas a la función.
Si no lo he entendido bien, por favor, corrígeme.
En la función ExponentiaMA no entiendo muy bien el significado de introducir el 3er parámetro prev_value. Está claro que en una fórmula pura para calcular la media se necesita el valor del periodo anterior, pero en mi opinión la función sería más clara para el ciudadano de a pie si contara este valor internamente y sólo se introdujeran 3 datos en la función como en SimpleMA.
Totalmente de acuerdo. No está claro cómo utilizarlo. Al final opté por ExponentialMAOnBuffer porque no entendía donde coger prev_value. Estas funciones son necesarias no para llamar a un indicador externo desde el Asesor Experto, sino para leer todo lo que hay dentro. ¿Qué sugirió el desarrollador?
Me recuerda una cita del dibujo animado "Prostokvashino" - "Para vender algo que no necesitas, primero debes comprar algo que no necesitas, y no tenemos dinero".
Totalmente de acuerdo. No está claro cómo utilizarlo. Al final, elegí ExponentialMAOnBuffer, porque no entendía dónde tomar prev_value. Estas funciones son necesarias no para llamar a un indicador externo desde el Asesor Experto, sino para leer todo lo que hay dentro. ¿Qué sugirió el desarrollador?
Me recuerda una cita del dibujo animado "Prostokvashino" - "Para vender algo que no necesitas, primero debes comprar algo que no necesitas, y no tenemos dinero".
Sí, estoy de acuerdo. Lo mismo se aplica a:
//+------------------------------------------------------------------+ //| Media móvil suavizada| //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { double result=0.0; //--- comprobar periodo if(period>0 && period<=(position+1)) { if(position==period-1) { for(int i=0; i<period; i++) result+=price[position-i]; result/=period; } result=(prev_value*(period-1)+price[position])/period; } return(result); }
No importa cómo se calcula el código en amarillo. El resultado seguirá siendo una cadena verde. ¡Y esto está en las librerías estándar de MT5! ¡Sip!
Mejorar la función, de lo contrario es inútil. En MQL5, es muy útil cuando se necesita calcular valores MA en varios instrumentos. Y no se sabe de antemano cuáles. ¡No se puede formar MA maneja de todos los instrumentos de la visión general del mercado!
Totalmente de acuerdo. No está claro cómo utilizarlo. Al final, elegí ExponentialMAOnBuffer, porque no entendía dónde tomar prev_value. Estas funciones son necesarias no para llamar a un indicador externo desde el Asesor Experto, sino para leer todo lo que hay dentro. ¿Qué sugirió el desarrollador?
Me recuerda una cita del dibujo animado "Prostokvashino" - "Para vender algo que no necesitas, primero debes comprar algo que no necesitas, y no tenemos dinero".
Sí, me uno a ti. Lo mismo digo:
No importa cómo se calcule el código resaltado en amarillo. El resultado seguirá siendo una cadena verde. ¡Y esto está en las librerías estándar de MT5! ¡Sip!
Mejorar la función, de lo contrario es inútil. En MQL5, es muy útil cuando se necesita calcular valores MA en varios instrumentos. Y no se sabe de antemano cuáles. ¡No se puede formar MA maneja de todos los instrumentos de la visión general del mercado!
Bueno, podrías buscar en CodeBase y mirar allí. No soy el único que ha utilizado esta biblioteca...
Disculpe, ¿qué es la variable "posición"?
double SimpleMA(const int position,const int period,const double &price[])
double SimpleMA( const int position, const int period, const double &price[]) { double result= 0.0 ; //--- comprobar periodo if (period> 0 && period<=(position+ 1 )) { for ( int i= 0 ; i<period; i++) result+=price[position-i]; result/=period; } return (result); }
Buenos días
¿Está más claro así?
No, ya lo vi pensando que position era la primera barra a calcular como ejemplo 20 si quiero 20 periodo pero no estoy seguro.
¿el precio tiene [position - 1] (y no +1) porque mql5 no lo pone como serie por defecto?
- 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
MovingAverages - Medias Móviles:
Autor: MetaQuotes Software Corp.