Discusión sobre el artículo "Gestión de errores y logging en MQL5" - página 2

 
Михаил:

¡Sergei!

Para eso están los códigos de retorno de los servidores comerciales.

Ejemplo: Usted comprobó la disponibilidad de fondos libres y recibió un resultado afirmativo.

Usted envía una orden, pero no fue aceptada (como usted dijo: "Lo que puede suceder"),

por lo que el servidor de negociación le dará el error "Fondos insuficientes" en el código de retorno.

Mikhail, ¿de verdad crees que no entiendo esto? :)

Ok, traduzco mi frase y el pensamiento del artículo: primero hacemos una comprobación previa y luego comprobamos el resultado. No me cuelgo en el comercio (para ello, sí, estos son los códigos de retorno del servidor de comercio), ya que podría ser cualquier cosa:

1) Por ejemplo un fichero: primero comprobar si existe tal fichero, si no, crearlo y escribir datos en él. A continuación, compruebe el resultado.

2) Por ejemplo, un objeto gráfico: compruebe primero si existe tal objeto. Si no existe, se creó, si no, se movió (si las coordenadas han cambiado). Después comprobamos qué hemos obtenido.

etc. Casi todo depende de otra cosa y puede fallar.


Así que, sigamos definiendo/resumiendo. ¿Tu principal queja es que no se tienen en cuenta los códigos de los retornos de error del servidor de comercio y las posibles reacciones del programa ante ellos?

Sobre el primer punto - todo esto está en la documentación.
Sobre el segundo punto - me parece que si lees el artículo, las posibles reacciones serán obvias.

Pero si no estás de acuerdo conmigo, la solución más fácil es escribir un artículo entero sobre ello. Personalmente, no creo que sea tan necesario escribir sobre ello. Si es tan importante para ti, hazlo. Estoy seguro de que lo harás mejor que yo, porque tienes un claro interés en ello.

P.D. Estoy seguro de que MQL4/5 no se trata sólo de Asesores Expertos. Obviamente, para usted es sobre todo ellos. Pero por ejemplo, en los últimos dos meses he hecho el doble de indicadores que de EAs. Así que todo es muy subjetivo.

 

¡Sergey!

No tengo ninguna queja sobre tu artículo.

 

Hola,

gracias por su artículo.

¿Puedo usar tu clase CLogger en mis propios proyectos?

BTW: ¿A qué tipo de licencia pertenecen los artículos/código fuente de mql5.com?

Saludos cordiales,

Alex

 

Yo uso MT5.

Cuando usé tu ejemplo en el backtest, el "mylog" está escrito en la carpeta C:\Program Files\MetaTrader 5 Terminal\Tester\Agent-127.0.0.1-3000\MQL5\Files.

Para facilitar las cosas, pensé en ponerlo en una carpeta personal: "C:\\MT5Personal\\Logs\mylog", por ejemplo.

Sin embargo, siempre obtengo el error 5002, y el tamaño del nombre no supera los 255 bytes.

¿Qué puede estar mal?

Muchas gracias.

 
Por desgracia, es un registrador muy ineficiente. Yo quería usarlo, pero supongo que tendré que inventar mi propia bicicleta ;-).
 

Sobre la eficiencia del logger... El lenguaje java también hizo primero un logger, y luego tuvo que sufrir durante mucho tiempo.

En java, este problema fue resuelto usando var args, que no estan disponibles en MQL4/5. ¿Cuál es el problema? - primero llamamos error.toString() luego concatenamos todas las cadenas en `CLogger::log(cadena1 + cadena2 + cadena3...); ` y solo al final comprobamos si la cadena obtenida debe imprimirse.


¿Qué sugiero en su lugar? - Nada nuevo, lo que de hecho se ha convertido en un estándar en el mismo java:

`if(CLogger::isLevel(LOG_LEVEL_INFO))

CLogger::log(cadena1 + cadena2 + cadena3);`

por supuesto en este caso necesitas tener diferentes loggers para logear a fichero, printf y otros.

 

Todo está atado en un solo archivo. ¿Y si tienes que guardar dos? ¿Y si sólo hay que imprimir y escribir algo en un archivo? No hay flexibilidad. Es necesario no hacer una llamada a través de defyne, sino a través de la creación de un objeto.

O por ejemplo, quiero imprimir y escribir en un archivo. O quiero enviar un push y enviar un email al mismo tiempo.

 

¡Qué tesoro! ¡Gracias por tu contribución!

Saludos, Zarik