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

 
Alain Verleyen:

Usted está repitiendo "fallando al instanciar", pero eso no es exacto. El indicador se instala en todos los casos.

El problema es que los datos no están disponibles de forma sincronizada, tienes que lidiar con ello. NO es un bug de MT5, es una CARACTERÍSTICA.

Propongo dejar la discusión y esperar la respuesta de SD.

Tal vez no articulé bien que por más bucles y esperas, no podrás acceder a los datos del indicador (de diferentes TF) hasta después de la primera pasada de (*edit) OnCalculate();

Estoy perfectamente dispuesto a aceptar que puedo estar equivocado, por lo que tengo una recompensa de 10 dólares si puedes demostrar lo contrario. Por favor... demuestre que estoy equivocado. Necesito una solución para este estúpido error, perdón, quiero decir "función".

 
nicholishen:

Tal vez no articulé adecuadamente que no importa cuántos bucles y esperas, no podrá acceder a los datos del indicador (de diferentes TF) hasta después de la primera pasada de (*edit) OnCalculate();

Estoy perfectamente dispuesto a aceptar que puedo estar equivocado, por lo que tengo una recompensa de 10 dólares si puedes demostrar lo contrario. Por favor... demuestre que estoy equivocado. Necesito una solución para este estúpido error, perdón, quiero decir "función".

¿Por qué lo necesitas en la primera "pasada"? Si los datos necesarios no están disponibles, espera hasta que lo estén, eso es todo.
 
Alain Verleyen:
¿Por qué lo necesitas en la primera "pasada"? Si los datos necesarios no están disponibles, hay que esperar a que lo estén, eso es todo.

Porque estoy desarrollando un indicador que requiere el acceso a los datos del mismo indicador (mismo símbolo) en un marco de tiempo diferente. Dado que no se procesará hasta después del segundo tick, esto significa que el indicador no funcionará fuera de línea, y sólo funciona cuando llega el segundo tick.

¿Por qué tenemos que comprometernos por este error? ¿Por qué lo defiendes con tanta furia?

 
nicholishen:

Porque estoy desarrollando un indicador que requiere el acceso a los datos del mismo indicador (mismo símbolo) en un marco de tiempo diferente. Dado que no se procesará hasta después del segundo tick, esto significa que el indicador no funcionará fuera de línea, y sólo funciona cuando llega el segundo tick.

¿Por qué tenemos que comprometernos por este error? ¿Qué hay para que lo defiendas con tanta furia?

???

Yo no defiendo nada, y desde luego no "furiosamente". Por favor, mantén la calma.

 
Alain Verleyen:

???

No defiendo nada, y mucho menos "furiosamente". Por favor, mantén la calma.

Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading

[MQL5 BUG] Los indicadores no se instancian correctamente cuando se llaman/crean desde un indicador de diferente marco temporal de trabajo.

Alain Verleyen, 2017.01.31 12:46

Ok no me crees, estás en tu derecho, pero te equivocas

Sólo puedo sugerirte que escribas al ServiceDesk, y que por favor informes de su respuesta aquí.


OK.

He colgado este trabajo por si a alguien le interesa echarle un cable.

https://www.mql5.com/en/job/57516

 
nicholishen:

Esto significa que si los datos están disponibles inmediatamente para un script o EA, entonces estarían igualmente disponibles para el indicador (como en este caso no es un problema de disponibilidad de datos). El indicador simplemente no se instala antes de la segunda pasada de OnCalculate() (también conocido como el primer tick)

Usted entiende la palabra "disponibilidad" demasiado literalmente. Mientras que algunos datos pueden existir en la memoria del terminal, el propio terminal puede contener alguna lógica de sincronización que bloquee las actualizaciones para cualquier marco temporal mientras se comprueban los datos subyacentes para un marco temporal (probablemente otro). O pueden bloquear las peticiones de datos de un indicador hasta que termine su propia creación (por favor, recuerde que los indicadores son gestionados por las llamadas asas, mientras que los expertos y los scripts no) y esto es lógico para mí. Estas son sólo suposiciones, que he hecho desde el punto de vista de los desarrolladores de MQ. Puedes preguntarles directamente a través de th service desk.

Su trabajo es imposible de realizar debido al punto 3:

3. Debe acceder al buffer en la inicialización

Esto va en contra de la arquitectura del terminal y de la documentación:

No se puede acceder a los datos del indicador justo después de su creación, ya que el cálculo de los valores del indicador requiere algún tiempo

Lea también la función CopyBuffer:

Nota

Cuando se solicitan datos del indicador, si las series de tiempo solicitadas aún no están construidas o necesitan ser descargadas del servidor, la función devolverá inmediatamente-1, pero se iniciará el proceso de descarga/construcción.

Cuando se solicitan datos de un Asesor Experto o un script, se iniciará la descargadesde el servidor, si el terminal no tiene estos datos localmente, o se iniciará la construcción de una serie temporal requerida, si los datos pueden ser construidos desde el historial local pero no están listos todavía. La función devolverá la cantidad de datos que estarán listos en el momento de la expiración del tiempo de espera.

Así, los expertos y los scripts se procesan de forma sincrónica hasta un tiempo de espera predefinido, pero los indicadores - de forma asincrónica.

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
En cuanto a tu tarea específica, se puede hacer fácilmente de otra manera. No eres el primero que construye un indicador en el indicador y quiere que funcione sin conexión. Utiliza un temporizador.
 
Stanislav Korotky:
En cuanto a tu tarea específica, se puede hacer fácilmente de otra manera. No eres el primero que construye un indicador en el indicador y quiere que funcione sin conexión. Utiliza un temporizador.
Lo he probado. No funcionó.
 
nicholishen:
Lo intenté. No ha funcionado.
Publica una pregunta más específica con un código de ejemplo. Puede ser un error. El enfoque funciona para mí.
 
Stanislav Korotky:
Publique una pregunta más específica con un código de ejemplo. Es posible que haya un error. El enfoque me funciona.
No entiendo cómo puedo ser más específico de lo que ya he hecho...

Ninguna cantidad de temporizadores o bucles puede superar el hecho de que el indicador no se instanciará hasta después de que Oncalculate regrese al menos una vez. La recursión tampoco funciona.