Errores, fallos, preguntas - página 1925

 

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

Bichos, errores, preguntas

fxsaber, 2017.07.10 20:16

Para aliviar un montón de preguntas sobre la correcta cumplimentación de la estructura MqlTradeRequest, sugiero que cuando se pulse F9 en el terminal mientras se rellenan manualmente los campos, se haga una nota a pie de página "Detalles", donde se verán todos los campos de la estructura comercial correspondiente (con opción de copia con un solo clic). Ahora esta estructura está totalmente disponible si se coge en OnTradeTransaction después de pulsar la acción F9-window.

Falló. La implementación de la captura de la estructura llena a través de OnTradeTransaction se puede ver aquí.

 
Yury Kirillov:

A partir de al menos la build 1625 MT5 se cae cuando se prueba.

Bild 1626:

Juega al menos en los modos "cada tic..." y "todos los tic".


Por la tarde. Necesita pasos para la reproducción. Necesita experto/indicador y ajustes de prueba. Escriba a servicedesk.

 
Alexander:

Buenas tardes. Necesita pasos para la reproducción. Necesita experto/indicador y ajustes de prueba. Escriba a servicedesk.


He escrito a TA#1794147.

Parece que se genera un fallo cuando se utiliza HistoryDealGetTicket(i), con un parámetro mayor que el número de transacciones disponibles.

 
Yury Kirillov:

Escribí al TP#1794147.

Parece que se genera un fallo cuando se utiliza HistoryDealGetTicket(i), con un parámetro que excede el número de transacciones disponibles.

Sí, lo he visto. Gracias

 

No hay mensaje de error

struct A {
        int z;
};
void OnStart()
{
        int const b; //'b' - 'const' variable must be initialized
        A   const a; //нет сообщения об ошибке //по сути равнозначно записи: int const а.z; 
}
Debe haber un constructor explícito o una secuencia de inicialización
 
A100:

No hay mensaje de error

Por el constructor. Así que está bien.

 
fxsaber:

Por el constructor. Así que está bien.

¿Por un constructor que no hace nada?

struct A {
        A() {}
        int a;
}; 
void OnStart()
{
        const A a; //нормально
}

Si es posible no inicializar const int A::a, entonces ¿por qué inicializar necesariamente const int b en el caso anterior?

 
A100:

¿Por un constructor que no hace nada?

Sí, por el constructor vacío por defecto.

Si se puede desinicializar const int A::a, ¿por qué inicializar necesariamente const int b en el caso anterior?

¿Por qué aparece Error en lugar de Advertencia? Bueno, se puede hacer de esta manera

void OnStart()
{
  int a;
  const int b = a;
}

En mi opinión, debe haber una advertencia cuando una variable const de un tipo simple no se inicializa. Y no debería haber Advertencia cuando el valor de OrderSend no está marcado. Pero esta parece ser la opinión de los desarrolladores de la correcta. Es decir, el razonamiento es subjetivo.

 
fxsaber:

¿Por qué aparece Error en lugar de Advertencia? Después de todo, puedes hacerlo así

Porque el uso de una variable constante no inicializada no tiene sentido - de ahí el error (contiene un valor aleatorio y no se puede cambiar después)

 
A100:

Porque usar una variable constante no inicializada no tiene sentido - de ahí el error (contiene un valor aleatorio y su uso posterior llevará a errores difíciles de encontrar)

He tachado una palabra en la cita, pero el significado no cambiará si en el futuro sólo hay operaciones de lectura. Para los no-const da Advertencia, para los const da Error. Es una de las decisiones controvertidas de los desarrolladores.