La función OnCalculate() es llamada sólo en los indicadores personalizados cuando es necesario calcular los valores del indicador por el evento Calculate.
Esto suele ocurrir cuando se recibe un nuevo tick para el símbolo, para el que se calcula el indicador.
No es necesario que este indicador esté unido a ningún gráfico de precios de este símbolo.
La función OnCalculate() debe tener un tipo de retorno int. Hay dos definiciones posibles. Dentro de un indicador no se pueden utilizar ambas versiones de la función.
La primera forma está pensada para aquellos indicadores que pueden ser calculados en un solo buffer de datos. Un ejemplo de este tipo de indicador es la Media Móvil Personalizada.
intOnCalculate(constint rates_total,// tamaño de la matriz price[] constint prev_calculado,// barras manejadas en una llamada anterior constint begin,// dónde empiezan los datos significativos constdouble& price[]// matriz para calcular );
La función OnCalculate() es llamada sólo en los indicadores personalizados cuando es necesario calcular los valores del indicador por el evento Calculate.
Esto suele ocurrir cuando se recibe un nuevo tick para el símbolo, para el que se calcula el indicador.
No es necesario que este indicador esté unido a ningún gráfico de precios de este símbolo.
La función OnCalculate() debe tener un tipo de retorno int. Hay dos definiciones posibles. Dentro de un indicador no se pueden utilizar ambas versiones de la función.
La primera forma está pensada para aquellos indicadores que pueden ser calculados en un solo buffer de datos. Un ejemplo de este tipo de indicador es la Media Móvil Personalizada.
intOnCalculate(constint rates_total,// tamaño de la matriz price[] constint prev_calculado,// barras manejadas en una llamada anterior constint begin,// dónde empiezan los datos significativos constdouble& price[]// matriz para calcular );
Cuando escribo abajo código de retorno a mi indicador personalizado entonces mi indicador personalizado comienza a lag. Pero funciona correctamente, lo que quiero.
return(0); // starts to lag...
Y cuando escribo por debajo de código de retorno a mi indicador personalizado entonces mi indicador personalizado no funciona correctamente lo que quiero. Me refiero a que mientras el falso cruce de MA "Flecha" no vuelve al punto de cruce de MA anterior.
return rates_total-1; // does not go back to previous MA cross pointreturn(rates_total-1); // and same thing here
P:¿Qué puedo hacer para esta situación, por favor?
Max Enrik: Y cuando escribo por debajo de código de retorno a mi indicador personalizado entonces mi indicador personalizado no funciona correctamente que quiero. Me refiero a que mientras el falso cruce de MA "Flecha" no vuelve al punto de cruce de MA anterior.
Publica todo tu código. Esto no tiene sentido sin el contexto.
string counts;
void _a()
{
counts += "a - " + IntegerToString( ObjectsTotal( OBJ_ARROW ) );
//---return;
}
void _b()
{
counts += " - b - " + IntegerToString( ObjectsTotal( OBJ_ARROW ) );
//---return;
}
Print( counts );
// while 1st loop: a - 2 - b - 4// while 2nd loop: a - 2 - b - 4a - 2 - b - 4// while 3rd loop: a - 2 - b - 4a - 2 - b - 4a - 2 - b - 4a - 2 - b - 4// and so on...// But I like only 1st loop results even that loop runs 10 thousand times
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
OnCalculate
La función OnCalculate() es llamada sólo en los indicadores personalizados cuando es necesario calcular los valores del indicador por el evento Calculate .
Esto suele ocurrir cuando se recibe un nuevo tick para el símbolo, para el que se calcula el indicador.
No es necesario que este indicador esté unido a ningún gráfico de precios de este símbolo.
La función OnCalculate() debe tener un tipo de retorno int. Hay dos definiciones posibles. Dentro de un indicador no se pueden utilizar ambas versiones de la función.
La primera forma está pensada para aquellos indicadores que pueden ser calculados en un solo buffer de datos. Un ejemplo de este tipo de indicador es la Media Móvil Personalizada.
intOnCalculate(constint rates_total,// tamaño de la matriz price[]
constint prev_calculado,// barras manejadas en una llamada anterior
constint begin,// dónde empiezan los datos significativos
constdouble& price[]// matriz para calcular
);
OnCalculate
La función OnCalculate() es llamada sólo en los indicadores personalizados cuando es necesario calcular los valores del indicador por el evento Calculate .
Esto suele ocurrir cuando se recibe un nuevo tick para el símbolo, para el que se calcula el indicador.
No es necesario que este indicador esté unido a ningún gráfico de precios de este símbolo.
La función OnCalculate() debe tener un tipo de retorno int. Hay dos definiciones posibles. Dentro de un indicador no se pueden utilizar ambas versiones de la función.
La primera forma está pensada para aquellos indicadores que pueden ser calculados en un solo buffer de datos. Un ejemplo de este tipo de indicador es la Media Móvil Personalizada.
intOnCalculate(constint rates_total,// tamaño de la matriz price[]
constint prev_calculado,// barras manejadas en una llamada anterior
constint begin,// dónde empiezan los datos significativos
constdouble& price[]// matriz para calcular
);
( Utilizo la palabra "Lag" significa que retrasa la acción del precio, la orden de apertura, el cierre, sólo una palabra hace caer mi plataforma MT4 )
Utilizo la siguiente función para mi indicador personalizado.
Cuando escribo abajo código de retorno a mi indicador personalizado entonces mi indicador personalizado comienza a lag. Pero funciona correctamente, lo que quiero.
Y cuando escribo por debajo de código de retorno a mi indicador personalizado entonces mi indicador personalizado no funciona correctamente lo que quiero. Me refiero a que mientras el falso cruce de MA "Flecha" no vuelve al punto de cruce de MA anterior.
P:¿Qué puedo hacer para esta situación, por favor?
Gracias de antemano.
Aquí tienes.
Gracias de antemano.
¡BIEN! ¡Gracias!
Todavía necesito una respuesta más clara.
Gracias de antemano.
La respuesta es:Comprobar tanto el cruce de la MA actual como el cruce de la MA anterior .
#Buffer(array out of range in ) - Cerrado
#Indicador personalizado retrasado - Cerrado
#Primer resultado del bucle - Abierto
Gracias de antemano.