Errores, fallos, preguntas - página 1805

 
Alexey Kozitsyn:
@Slawa, por favor aclara, ¿hay alguna restricción en la escritura de los buffers de los indicadores fuera de la función OnCalculate()? En el caso de escribir buffers en las funciones OnTimer(), OnBookEvent(), OnChartEvent(), ¿se escribirá siempre todo correctamente?

No hay restricciones explícitas. Puedes probarlo.

Pero puede encontrarse con la redistribución de los buffers en el momento de añadir una nueva barra (la redistribución se realiza con una reserva, así que no en cada nueva barra).

PS aunque no. todo el procesamiento es en un hilo, por lo que no debería haber colisiones. Prueba con
 
Slawa:
No hay limitaciones evidentes. Puedes probarlo.

Pero puedes encontrarte con la redistribución del buffer en el momento de añadir una nueva barra (la redistribución se realiza con cierta reserva, así que no en cada nueva barra)

Aquí, más detalles, por favor. ¿Cuál es la asignación, cómo tratarla?

Acabo de escribir la pregunta porque noto "hipo" en un bar nuevo. Y estos contratiempos restablecen los valores del búfer = 0 (con el valor vacío que establecí explícitamente - EMPTY_VALUE). Hasta ahora no he conseguido captar este momento. A veces el indicador simplemente "salta" y se restablece inmediatamente a la normalidad, otras veces simplemente se "congela". Cuando se atasca, los valores no se escriben en el archivo y los búferes no se dibujan. Los buffers se escriben en OnBookEvent().

El mismo código funciona bien en OnCalculate(), pero OnCalculate() no permite recoger todos los valores de Open Interest y otros parámetros de intercambio.

Sólo puede resolverse mediante el cambio de TF. Sí, 5-7 indicadores iguales funcionando al mismo tiempo, escribiendo datos diferentes.

Añadido:

Sí, hoy también he notado exactamente lo mismo al encender el terminal. Todo se colgó, todos los búferes, todos los valores tienen ceros en ellos, ninguna historia (escrita en un archivo) fue dada por el indicador. En otras palabras, todo se quedó colgado. El mercado seguía cerrado. Cambié de TF - el historial volvió, pero de nuevo, a la pregunta sobre la necesidad de un sello de tiempo a los valores de SESIÓN: ¡se registró el último valor conocido en el momento del cierre del terminal! La sincronización del historial fue exitosa, sin errores. Pero TimeCurrent() devuelve un valor erróneo (alrededor de las 21:03). La hora real de este valor es 23:49:59. En definitiva, una especie de tristeza.

 
Alexey Kozitsyn:

Aquí, más detalles, por favor. ¿Cuál es la asignación, cómo debe manejarse?

Acabo de escribir la pregunta porque noto "hipo" en un bar nuevo. Y estos hipo valores de búfer nulo = 0 (con el valor vacío establecido explícitamente por mí - EMPTY_VALUE). Hasta ahora no he conseguido captar este momento. A veces el indicador simplemente "salta" y se restablece inmediatamente a la normalidad, otras veces simplemente se "congela". Cuando se atasca, los valores no se escriben en el archivo y los búferes no se dibujan. Los buffers se escriben en OnBookEvent().

El mismo código funciona bien en OnCalculate(), pero OnCalculate() no permite recoger todos los valores de Open Interest y otros parámetros de intercambio.

Sólo puede resolverse mediante el cambio de TF. Sí, entre 5 y 7 indicadores se están ejecutando simultáneamente, escribiendo datos diferentes.

Es fácil. Llega el primer tick de una nueva barra. El búfer está asignado para 1000 barras y está completamente lleno.

Reasignamos el buffer a 1250 barras y copiamos 1000 barras del buffer anterior al nuevo buffer. Poner el nuevo búfer en lugar del antiguo búfer, borrar el antiguo búfer. Añadimos la barra 1001.

¿Qué quiere decir con "qué hacer con él"?

Tenga en cuenta que todos los indicadores de un símbolo se cuentan secuencialmente uno tras otro en un hilo. Si un indicador se ralentiza, todo el hilo de procesamiento de símbolos también se ralentizará
 
Slawa:
Fácil. Llega el primer tick de la nueva barra. El búfer está asignado para 1000 barras y está completamente lleno.

Reasignamos el buffer a 1250 compases y copiamos 1000 compases del buffer antiguo al nuevo. Poner el nuevo búfer en lugar del antiguo búfer, borrar el antiguo búfer. Añadimos la barra 1001.

¿Qué quiere decir con "qué hacer con él"?

Tenga en cuenta que todos los indicadores de un símbolo se cuentan secuencialmente uno tras otro en un hilo. Si un indicador se ralentiza, todo el hilo de procesamiento de símbolos también se ralentizará
Sé de un hilo. ¿Y la redistribución, por lo que he entendido, afecta más a OnBookEvent() que a OnCalculate()?
 
Alexey Kozitsyn:
Soy consciente de lo del hilo único. ¿Y la redistribución, según entiendo, afecta más a OnBookEvent() que a OnCalculate()?
La redistribución se realiza cuando llega una nueva garrapata. Inmediatamente después de la llegada de un nuevo tick, se llama a OnCalculate fuera de turno. Y sólo después de eso se continúa el procesamiento de los eventos que fueron recibidos por el indicador

Pero, hasta que el indicador (¡cualquier indicador en este símbolo!) termine sus cálculos (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), el nuevo tick no llegará al procesamiento.
 
Slawa:
La redistribución se realiza a la llegada de un nuevo tick. Inmediatamente después de que llegue un nuevo tick de la cola , se llama a OnCalculate. Y sólo después se continúa con el procesamiento de los eventos, recibidos por el indicador

Sin embargo, hasta que el indicador (¡cualquier indicador en este símbolo!) termine sus cálculos (OnCalculate, OnTimer, OnChartEvent, OnBookEvent), no llegará un nuevo tick para ser procesado.

Además, según tengo entendido, los indicadores de un símbolo se calculan secuencialmente, es decir, si he lanzado el indicador i1, i2, i3 en una fila, entonces se calcularán en el mismo orden?

Ahora he añadido un MAKD estándar para probar; es el último de la lista. Veré si se ralentiza cuando se forme una nueva barra.

 
Alexey Kozitsyn:

Además, según tengo entendido, los indicadores de un símbolo se calculan secuencialmente, es decir, si he lanzado el indicador i1, i2, i3 en una fila, entonces se calcularán en el mismo orden?

Ahora he añadido un MAKD estándar para probar, es el último de la lista, veré si se cuelga de él cuando se forme una nueva barra.

Al principio, sí, el cálculo será en el mismo orden.

Pero si va a borrar-añadir diferentes indicadores, la secuencia de recálculo puede sorprenderle. Por lo tanto, no confíe en la secuencia
 
Slawa:
Al principio, sí, el cálculo será en la misma secuencia.

Pero si elimina y añade diferentes indicadores, la secuencia de recálculo puede sorprenderle. Así que no te fíes de la secuencia.
Esto es necesario para comprobar, si mis indicadores se cuelgan, si el último, el MAKD estándar, se calculará. Todos los míos van antes del MACD.
 
Slawa:

A esto me refería:

Se formó una nueva barra en GOLD-3.17, todos mis indicadores calculados en OnBookEvent() por este símbolo todos los valores actuales se pusieron a cero. Según la lógica del indicador, en el momento de formarse una nueva barra, los búferes no se ponen a cero, y el valor actual se escribe en ellos inmediatamente. El MACD no está en cero. El registro está vacío, significa que no hubo desincronización, todos los valores deberían ser correctos. En este caso, el fallo duró unos 5 segundos. Ayer estuve cogiendo fallos durante varios minutos seguidos.

Los demás personajes estaban bien. De nuevo, la lógica del indicador no pone los valores a 0. Así que la pregunta es: al redistribuir los nuevos artículos, en teoría, debe contener basura. Pero aquí 0,0 y cuelga...

Sí, una cosa más: si un indicador colgaba, ¡los otros deberían haber mantenido sus valores! Pero todos ellos, todos a la vez, se pusieron a cero. ¿Hay alguna situación en la que esto pueda ocurrir?
 

Se ha producido un cuelgue similar en la BR-3.17:

@Slawa ¿alguna idea de por dónde cavar? ¿Quizás haya una forma mejor de recoger los datos de los intercambios y mostrarlos?