Errores, fallos, preguntas - página 891

 

Está claro que la puesta a cero se hizo por compatibilidad, pero no está claro por qué cuando se inicializa correctamente el enum = WRONG_VALUE no funciona correctamente. Este enfoque carece de portabilidad y aumenta significativamente la probabilidad de errores ocultos.

 
A100: no está claro por qué cuando se inicializa correctamente el enum = WRONG_VALUE no funciona correctamente.

¿Recuerdas esta regla?

Regla: Si a una constante con nombre - miembro de una enumeración no se le asigna explícitamente un valor específico, su valor se generará automáticamente. Si es el primer miembro de la enumeración, se asignará el valor 0. Para todos los miembros posteriores, los valores se calcularán en base al valor del miembro anterior sumando uno.

Lo más probable es que la comprobación de la corrección de los campos de consulta asuma que el valor de un miembro de la enumeración no puede ser negativo. No se tiene en cuenta la posibilidad de asignar WRONG_VALUE a un miembro de la enumeración.

 
Yedelkin:

Sin embargo, no se tiene en cuenta la posibilidad de asignar WRONG_VALUE a un miembro de la enumeración.

Creo que este es exactamente el error aquí. Si no se utiliza un enum concreto, es lógico que su valor sea WRONG_VALUE en lugar de, por ejemplo, ORDER_TYPE_BUY que en realidad es = 0.

y lo más importante - nada le impide cambiar la lógica de OrderCheck() y OrderSend() manteniendo la compatibilidad

 
A100: Creo que este es exactamente el error aquí. Si no se utiliza un enum concreto, es lógico que su valor sea WRONG_VALUE en lugar de ORDER_TYPE_BUY que en realidad es = 0.

y lo más importante, nada le impide cambiar la lógica de OrderCheck() y OrderSend() manteniendo la compatibilidad

Hay una forma de entender la opinión de los desarrolladores: escribir al Service Desk sobre el error.
 

He descubierto un extraño "bug".

Estoy usando este código en mi EA:

void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
    {
     if(trans.symbol == "EURUSD") EURUSD_K = 1;
    }    
  }

Una sola ejecución en el probador pasa sin problemas, pero en cuanto elijo parámetros con búsqueda completa, el probador empieza a funcionar diez o diez veces más lento. No entiendo por qué la velocidad es adecuada durante una ejecución y cae notablemente durante la optimización. Además, desciende geométricamente. Puedes ver por el porcentaje que todo está bien al principio, pero hacia el final la velocidad sigue bajando cada vez más. Busqué problemas en mi código y busqué bucles o algo así, pero no los encontré. Después de eso, reemplacé el código mencionado anteriormente con mi propio algoritmo y ¡oh, Dios mío! La optimización se ejecuta ahora a una velocidad normal y uniforme. Esto me lleva a la conclusión de que el problema está dentro de MQL5, en algún lugar del cuerpo de la función OnTradeTransaction. Pediré a los desarrolladores que presten atención a esto.

p.d. No puedo publicar el código del Asesor Experto. Intente utilizar el código anterior en cualquiera de sus EAs y observe la velocidad de optimización en OHLC M5 para el período comprendido entre el año 2000 y hoy.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
lordlev:

He descubierto un extraño "bug".

Estoy usando este código en mi EA:

Una sola ejecución en el probador pasa sin problemas, pero en cuanto elijo parámetros con búsqueda completa, el probador empieza a funcionar diez o diez veces más lento. No entiendo por qué la velocidad es adecuada durante una ejecución y cae notablemente durante la optimización. Además, desciende geométricamente. Puedes ver por el porcentaje que todo va bien al principio, pero la velocidad disminuye a medida que la carrera termina. Busqué problemas en mi código y busqué bucles o algo así, pero no los encontré. Después de eso, reemplacé el código mencionado anteriormente con mi propio algoritmo y ¡oh, Dios mío! La optimización se ejecuta ahora a una velocidad normal y uniforme. Esto me lleva a la conclusión de que el problema está dentro de MQL5, en algún lugar del cuerpo de la función OnTradeTransaction. Pediré a los desarrolladores que presten atención a esto.

p.d. No puedo publicar el código del Asesor Experto. Intente utilizar el código anterior en cualquiera de sus EAs y observe la velocidad de optimización en OHLC M5 para el período comprendido entre el año 2000 y hoy.

Con diferentes parámetros, el Asesor Experto puede trabajar durante diferentes tiempos
 
Konstantin83:
Para diferentes parámetros, el EA puede funcionar durante diferentes períodos de tiempo
En este caso, el problema no está en el Asesor Experto ni en los parámetros. El problema está en el propio MQL5.
 
lordlev:

Después de sustituir el código anterior por su algoritmo

Es decir, ¿han renunciado a utilizar OnTradeTransaction()? - entonces es lógico que la velocidad haya aumentado - se llama en cada ocasión
 
A100:
Es decir, ¿han renunciado a utilizar OnTradeTransaction() ? - entonces es lógico que la velocidad haya aumentado - se llama en cada ocasión
Es natural que te niegues a usarlo. Está claro que se convoca en cualquier ocasión. Simplemente no está claro por qué la velocidad es adecuada durante una sola ejecución, mientras que cae de repente durante la optimización. No tiene nada que ver con los parámetros en sí, como escribió otro amigo más arriba, lo comprobé a fondo diez veces. Esto me lleva a la conclusión de que los desarrolladores cometieron un error en alguna parte.
 
lordlev:

¿Qué le impide hacer un caso de prueba mínimo e informar al servicio de atención al cliente?