[SOLVED] Los indicadores no se instancian correctamente cuando se llaman/crean desde un indicador de un marco de tiempo de trabajo diferente. - página 4

 
nicholishen:

...

Quiero agradecerte especialmente toda tu ayuda... ¡si no fuera por tu condescendencia no sé de dónde habría sacado la motivación para seguir adelante! /s

He visto aquí decenas de personas como tú. Se saben todos mejores que los demás, no escuchan, ponen sus propios defectos a los de otros (otro usuario, un moderador, un broker, una plataforma, Metaquotes, el SO, o lo que sea...).

Parece que aquí no se aprende nada. Esto NO es un bug, es como los desarrolladores concibieron su plataforma. Entiendo que digas que es un bug, yo descubrí MT5 y su funcionamiento hace años. Si tuvieras esto en mente y lo aceptaras, habrías visto mucho antes cuál era el problema : tu enfoque y tu comprensión.

Pero no, todavía sigues diciendo que es un "bug" o un "fallo importante", esto es simplemente ridículo. La arquitectura de MT5 que utiliza el comportamiento de las funciones asíncronas es lo que hace que esta plataforma sea mucho más rápida que MT4, por supuesto no siempre es fácil de manejar. El principal fallo de Metaquotes aquí es la documentación incompleta, incomprensible o inexistente.

Cuando no entiendes algo, deberías escuchar a otros (Stanislav y yo por ejemplo), y desde luego no insultar a la gente que está intentando ayudarte.

 
Alain Verleyen:

He visto decenas de personas como tú aquí. Saben todo mejor que los demás, no escuchan, ponen sus propios defectos a otros (un otro usuario, un moderador, un broker, una plataforma, Metaquotes, el SO, o lo que sea...).

Parece que aquí no se aprende nada. Esto NO es un bug, es como los desarrolladores concibieron su plataforma. Entiendo que digas que es un bug, yo descubrí MT5 y su funcionamiento hace años. Si tuvieras esto en mente y lo aceptaras, habrías visto mucho antes cuál era el problema : tu enfoque y tu comprensión.

Pero no, todavía sigues diciendo que es un "bug" o un "fallo importante", esto es simplemente ridículo. La arquitectura de MT5 que utiliza el comportamiento de las funciones asíncronas es lo que hace que esta plataforma sea mucho más rápida que MT4, por supuesto no siempre es fácil de manejar. El principal fallo de Metaquotes aquí es la documentación incompleta, incomprensible o inexistente.

Cuando no entiendes algo, deberías escuchar a otros (Stanislav y yo por ejemplo), y desde luego no insultar a la gente que está intentando ayudarte.

Ejecutar todos los indicadores en un solo hilo sin un método para llamar recursivamente a la siguiente iteración que no sea poner un temporizador es un fallo. ¿Quieres hablar de velocidad? En lugar de volver a poner el procesamiento en cola, acabo de gastar un ms extra en una solución. Probablemente no es el fin del mundo, pero aún así requiere una solución. Estoy muy agradecido a los que me ayudaron a entender la solución y por qué era necesaria dada la restricción de la plataforma. Sin embargo, todavía estoy tratando de entender lo que aportaste a la discusión, aparte de la condescendencia.
 
nicholishen:
Ejecutar todos los indicadores en un solo hilo sin un método para llamar recursivamente a la siguiente iteración que no sea poner un temporizador es un fallo. ¿Quieres hablar de velocidad? En lugar de volver a poner el procesamiento en cola, acabo de gastar un ms extra en una solución. Probablemente no es el fin del mundo, pero aún así requiere una solución. Estoy muy agradecido a los que me ayudaron a entender la solución y por qué era necesaria dada la restricción de la plataforma. Sin embargo, todavía estoy tratando de entender lo que aportaste a la discusión, aparte de la condescendencia.

Me parece que eres muy agresivo. Desde el principio sólo intentaba explicarte lo que ocurre, desde mi experiencia de años con MT5. No soy condescendiente, soy experto y he experimentado, y merezco respeto (como todos). Solo por el post #14 veo que quieres que funcione sin un nuevo tick, pero en el mismo post me sentí agredido por tu palabra "furiosamente", así que desistí.

De todas formas, el tema está cerrado, gracias por empujarme a aprender algo nuevo.

 

Me he estado rascando la cabeza durante mucho tiempo.

Para cualquiera que se encuentre con este problema, parece que hay una solución sencilla.

Añade una variable a nivel de módulo (RunOnce) para determinar cuándo se ejecuta el OnCalculate por primera vez. En esa primera ejecución, devuelve cero y establece la variable true para evitar más interrupciones.


bool RunOnce = false;

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 &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


A mí me ha funcionado muy bien, espero que a ti también te ayude.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Gracias por la solución