Características del lenguaje mql5, sutilezas y técnicas - página 239

 
Anatoli Kazharski #:

¿Cómo puedo saber si un símbolo tiene datos, para no dejarlo en la ventana [Observación del Mercado] si no los tiene?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

He probado esta opción. Desafortunadamente, no funciona. Si se añade un símbolo a la ventana [Market Watch] por primera vez, todavía no hay datos sobre él y SymbolInfoTick devuelve valores nulos.

También he probado las funciones CopyXXX, pero no tienen tiempo de espera y el proceso de espera de datos del servidor dura unos 45 segundos, lo cual es demasiado.

Necesito una forma rápida de averiguar si un carácter es inutilizable. Me refiero a casos como este


//---

Estos símbolos no tienen datos en el servidor y necesito una forma de identificarlos para que no se añadan a la ventana [Visión general del mercado] o se eliminen de la lista si lo están.

P.D. ¿Quizás haya alguna forma de quitar el bloqueo a la eliminación de símbolos de la lista en la ventana[ Observación del Mercado]?

 
Anatoli Kazharski #:

He probado esa opción. Desafortunadamente, no funciona. Si se añade un símbolo a la ventana [Market Watch] por primera vez, todavía no hay datos sobre él y SymbolInfoTick devuelve valores nulos.

Es fácil conseguir símbolos que funcionen a mano.

  1. Añada todos los símbolos a la [Observación del Mercado] en un par de clics.
  2. En un par de segundos se recibirán los ticks sobre ellos.
  3. Ordenar por tiempo con un clic del ratón.
  4. Borrar una de las colas de la lista obtenida con la tecla Supr.
Todo esto le llevará hasta medio minuto.
 
Anatoli Kazharski #:

He probado esa opción. Desafortunadamente, no funciona. Si se añade un símbolo a la ventana [Market Watch] por primera vez, todavía no hay datos sobre él y SymbolInfoTick devuelve valores nulos.

También probé las funciones CopyXXX, pero no tienen tiempo de espera y el proceso de espera de datos del servidor dura unos 45 segundos, lo cual es demasiado tiempo.

Necesito una forma rápida de averiguar si un carácter es inutilizable. Me refiero a casos como este:


//---

Estos símbolos no tienen datos en el servidor y necesitan una forma de identificarlos para que no se añadan a la ventana [Observación del Mercado] o se eliminen de la lista si lo hacen.

P.D. ¿Quizás haya alguna forma de eliminar el bloqueo a la hora de eliminar símbolos de la lista en la ventana[ Observación del Mercado]?

Llevo luchando con esto unos 6 años y pido a los desarrolladores que pongan las cosas en orden aquí.

Desafortunadamente, este problema no se ha resuelto, y por el momento hay situaciones en las que el terminal se cuelga cuando alguien accede a un instrumento financiero por primera vez.

 
Anatoli Kazharski #:

¿Cómo puedo saber si un símbolo tiene datos, para no dejarlo en la ventana [Observación del Mercado] si no los tiene?

Utilizo dicha comprobación en un bucle:

Pero después no puedo quitar manualmente los símbolos de la ventana [Observación del Mercado], ya sea uno por uno o todos a la vez, mientras que el Asesor Experto está en el gráfico:


Intente comprobar la hora de la última cotización.

SymbolInfoInteger(name, SYMBOL_TIME);

Si es 0, no hay datos.

Acabo de comprobarlo abriendo los gráficos.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
Es posible obtener datos adicionales cambiando entre servidores. No sé si esto es posible de implementar a través de código.
 
Nauris Zukas #:
Es posible obtener datos adicionales cambiando entre servidores. No sé si es posible implementarlo a través del código.

Si por "entre servidores" quieres decir "entre brokers", entonces difícilmente, a menos que intentes jugar con perfiles.

Pero si realmente necesitara cambiar entre diferentes servidores de un broker (Open tenía muchos, Finam tenía dos), lo haría a través de iptables/nftables y mis scripts bash. Pero aquí me es más fácil, tengo Linux.

 
JRandomTrader #:

Si por "entre servidores" quieres decir "entre brokers".


.

 
Nauris Zukas #:


Sí, en principio es posible.

Pero, como no hay forma de averiguar el nombre y la ip del servidor desde el programa MQL, tendrás que averiguarlos manualmente cambiando de servidor y comprobando a qué ip va la conexión.

Entonces es posible, haciendo cambios en la configuración del firewall, prohibir la conexión a algún servidor (aquí es necesario rejackear paquetes, no dejarlos caer para evitar timeout), forzando a MT a cambiar a otro.

De nuevo, no es difícil para mí hacer esto en Linux, pero no puedo imaginar cómo hacerlo en Windows.

 
Alexey Viktorov #:

Intenta comprobar la hora de la última cita.

Si es 0, no hay datos.

Acabo de comprobar con los gráficos abiertos.

Esto también se aplica a un caso similar:

He probado esta opción. Lamentablemente, no se ajusta. Si un símbolo se añade a la ventana [Observación del Mercado] por primera vez, todavía no hay datos sobre él y SymbolInfoTick devuelve valores nulos.

Si los ticks aparecen raramente, todos esos símbolos serán excluidos.

fxsaber #:

Es fácil obtener símbolos de trabajo a mano.

  1. Añada todos los símbolos a la Observación del Mercado en un par de clics.
  2. En un par de segundos se recibirán los ticks sobre ellos.
  3. Ordenar con un clic de ratón por tiempo.
  4. Borrar una de las colas de la lista obtenida utilizando la tecla Supr.
Todo esto le llevará hasta medio minuto.

No. Necesitas un automático completo.

Vladimir Pastushak #:

Llevo ya 6 años luchando con esto, y pido a los desarrolladores que pongan orden aquí.

Desafortunadamente, este problema no está resuelto, y por el momento hay situaciones en las que el terminal se cuelga cuando alguien accede a un instrumento financiero por primera vez.

Lo he notado sólo al llamar a las siguientes funciones

  • Barras()
  • iBars()
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT)

//---

Desarrolladores de terminales:

1. excluir la posibilidad de añadir símbolos sin datos en el servidor de operaciones.

2. 2. Hacer posible desactivar el bloqueo de borrado de símbolos desde la ventana [Market Watch] o solucionarlo si es un bug. Ahora sólo se puede hacer reiniciando el terminal.

3. Para funciones como CopyXXX , añadir un parámetro opcional adicional para establecer el timeout (tiempo máximo para esperar datos del servidor).

Ahora mismo no puedo reproducir esto. Hasta ahora funciona sin retraso. Pero parece que en algunos casos puede ocurrir.

4. corregir el error con espera infinita al utilizar Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) funciones en los casos en que:

  • no hay conexión con el servidor
  • no hay datos sobre el símbolo

Un intento de eliminar el programa del gráfico puede provocar que el terminal se cuelgue durante varios minutos.

5. Corrección del error de espera infinita al utilizar las funciones si no hay conexión con el servidor:

  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_FIRSTDATE)
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_LASTBAR_DATE)
  • SeriesInfoInteger(símbolo, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

En este caso también puedes añadir un parámetro opcional adicional para establecer el timeout (tiempo máximo de espera para recibir datos del servidor).

//---

P.D. De momento me he decantado por la variante con comprobación de datos con funciones como CopyXXX. Pero observaré si el problema descrito arriba aparece de nuevo.