MT5 build 1455
Indicador de la prueba:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Poner el indicador en el gráfico
2. Cerrar el terminal
3. terminal abierto
Registro:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
¿Me estoy perdiendo algo o es imposible confiar en la variable prev_calculado, tengo que crujir la muleta?
MT5 build 1455
Indicador de la prueba:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Poner el indicador en el gráfico
2. Cerrar el terminal
3. terminal abierto
Registro:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
¿Me estoy perdiendo algo o es imposible confiar en la variable prev_calculado, tengo que crujir la muleta?
La variable prev_calculated puede ponerse a 0 incluso sin la paginación de la historia si la suma de comprobación ha cambiado (esta es una respuesta aproximada de servicedesk).
Ya veo. Gracias. Así que para el carpintero...
Se han añadido los operadores *(Dereferencia/Inderección) y &(Dirección-de), no se harán/planean cambios adicionales en el lenguaje
Por favor, aclare lo siguiente:
* Obtener una variable por referencia - sólo se aplica a:
2. objetos de estructura
3. Tipos fundamentales
En este contexto, ¿es sólo rlvalue o también lvalue?
La tarea del programador es atrapar tal evento
Así que no soy un programador: mis tareas son diferentes. Carpintero, supongo - "muleto la muleta" y creo que estoy "cogiendo el evento".
Y no exagero, porque el propósito declarado de esta variable:
Además de ese propósito, también se supone que es una bandera de cambio en el historial, además de algunos otros cambios que hay que tener en cuenta. Todo esto es útil pero no podemos usarlo para su propósito directo - mostrar cuántas 'barras fueron procesadas durante la llamada anterior' - prev_calculated.
Así que no soy un programador: mis tareas son diferentes. Carpintero, supongo - "muleto la muleta" y creo que estoy "cogiendo el evento".
Y no exagero, porque el propósito declarado de esta variable:
Además de ese propósito, también se supone que es una bandera de cambio en el historial, además de algunos otros cambios que hay que tener en cuenta. Todo esto es útil, pero no se puede utilizar para su propósito directo - para mostrar cuántas "barras se procesaron en la llamada anterior" - prev_calculated
Así que no soy un programador: mis tareas son diferentes. Carpintero, supongo - "muleto la muleta" y creo que estoy "cogiendo el evento".
Y no exagero, porque el propósito declarado de esta variable:
Además de ese propósito, también se supone que es una bandera de cambio en el historial, además de que se supone que debe rastrear algunos otros cambios. Todo esto es útil, pero no podemos utilizarlo para su propósito directo - mostrar cuántas barras fueron "procesadas en la llamada anterior" - prev_calculated
Si prev_calculated=0, significa que se debe realizar un recálculo completo. Todos los indicadores estándar se recalculan completamente en este caso.
¿Qué no está claro?
Se dice que la suma de comprobación ha cambiado en la historia. Sería más barato volver a calcular el indicador que averiguar por qué ha cambiado la suma de comprobación.
La documentación menciona explícitamente que
Observe la conexión entre el valor de retorno de OnCalculate() y el segundo parámetro de entrada prev_calculado. El parámetro prev_calculado en la llamada a la función contiene un valor devuelto por OnCalculate() en lallamada anterior.Esto permite economizar los algoritmos de cálculo del indicador personalizado para evitar cálculos repetidos para aquellas barras que no han cambiado desde la anterior llamada a esta función.
Para ello, suele bastar con devolver el valor del parámetro rates_total, que contiene el número de barras de la llamada a la función actual. Si desde la última llamada de OnCalculate() los datos del precio han cambiado (se ha bombeado un historial más profundo o se han llenado los espacios en blanco del historial), entonces el valor del parámetro de entrada prev_calculado será puesto a cero por el terminal.
¿Qué tal si simplemente se recalcula todo el indicador cuando es 0? En mi opinión, la mejor solución.
Esto es exactamente lo que debe hacer: cuando se recibe prev_calculate==0, debe recalcular todo el indicador. Ya que rev_calculate==0 suele ser un cambio de historia. Y si el historial se intercambia, significa que puede haber nuevas barras que se hayan perdido o que no se hayan calculado antes, es decir, las lecturas del indicador serán incorrectas.
- 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