Errores, fallos, preguntas - página 123

 

Deja que los desarrolladores lo solucionen. aquí hay una captura de pantalla de 3 ejecuciones de este script.

No me funciona.

 
Prival:

Error: antes funcionaba, pero ahora no.

Gracias por su mensaje.

Seguiremos buscando.

 

Se ha encontrado un pequeño error en el método PrintCheckResult (archivo Trade.mqh, clases Trade, clase CTrade).

void CTrade::PrintCheckResult(void) const
{
printf("CheckResult");
// printf("%d,%f,%f,%f,%f,%f,'%s'", - el penúltimo parámetro es innecesario
printf("%d,%f,%f,%f,%f,%f,'%s'",
m_check_result.retcode,m_check_result.balance,m_check_result.equity,
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level,
m_check_result.comment);
}

En lugar de la cadena: printf("%d,%f,%f,%f,%f,%f,%f,'%s'", - comentado por mí

debería haber una línea: printf("%d,%f,%f,%f,%f,%f,%f,%f,'%s'",

Lo he comprobado, la función corregida funciona correctamente.

 
Prival:

Error: antes funcionaba, pero ahora no.

Gracias por el mensaje. Estará disponible en la próxima actualización. Para que funcione en la versión actual, utilice la fundición explícita para la constante o la multiplicación en general

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+(long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired:

Se ha encontrado un pequeño error en el método PrintCheckResult (archivo Trade.mqh, clases Trade, clase CTrade).


Gracias por el mensaje.

Se arreglará pronto.

 
mql5:

Gracias por su mensaje. Estará disponible en la próxima actualización. Para que funcione en la versión actual, utilice la fundición explícita para la constante o la multiplicación en general

Gracias. Si he entendido bien, se debe a la conversión de tipos. Lástima que no haya ningún mensaje sobre la compilación, habría sido más fácil de encontrar
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival:
Gracias. Si he entendido bien, se debe a la conversión de tipos. Es una pena que no exista este mensaje en tiempo de compilación, sería más fácil de encontrar
Su código es correcto, no hay nada que reclamar. El error está realmente en la conversión de operandos en x64 y se ha solucionado. Espera una actualización.
 

Los errores ENUM_TRADE_RETURN_CODES deben ser interpretados correctamente para poder manejarlos correctamente. ¿Existe algún material que los describa con detalle?

En particular, no se entienden del todo los siguientes errores:

10008

TRADE_RETCODE_PLACED

Pedido realizado

10021

TRADE_RETCODE_PRICE_OFF

No hay presupuestos disponibles para procesar la solicitud


10028

TRADE_RETCODE_LOCKED

Consulta bloqueada para su procesamiento

10029

TRADE_RETCODE_FROZEN

Orden o posición congelada

¿Puede alguien ayudar con este asunto?

 
retired:

Los errores ENUM_TRADE_RETURN_CODES deben ser interpretados correctamente para poder manejarlos correctamente. ¿Existe algún material que los describa en detalle?

En particular, no se entienden del todo los siguientes errores:

10008

TRADE_RETCODE_PLACED

Pedido realizado

10021

TRADE_RETCODE_PRICE_OFF

No hay presupuestos disponibles para procesar la solicitud


10028

TRADE_RETCODE_LOCKED

Consulta bloqueada para su procesamiento

10029

TRADE_RETCODE_FROZEN

Orden o posición congelada

¿Puede alguien ayudar con este asunto?

Todo lo anterior se refiere a los códigos que devuelve el servidor en respuesta a la solicitud del terminal. Por eso, todo se da en la sección "Códigos de retorno del servidor comercial".

Sería lógico suponer que la lista contiene algo más que errores.

Ahora en orden.

En cuanto a

10008

TRADE_RETCODE_PLACED

Pedido realizado


Sería lógico suponer que esta respuesta no es un error, sino que simplemente informa al cliente (el terminal de operaciones) de que la orden se ha colocado con éxito.

En este caso hay tres soluciones posibles:

1. No procesar la respuesta en absoluto;

2. procesar la colocación de la orden en el bloque OnTrade() - bastante aceptable, pero no muy correcto en mi opinión;

En mi opinión, esta es la mejor manera de procesar un comercio mecánico.

PS

Prefiero procesar las respuestas del servidor en el lugar de la orden y capturar el resultado de las acciones de un comerciante, el servidor u otros Asesores Expertos en OnTrade().

Por ejemplo, en OnTrade puede captar las operaciones de los operadores (colocar o eliminar una orden, o trabajar con las posiciones).


Con respecto a


10029

TRADE_RETCODE_FROZEN

La orden o la posición está congelada


Hay un determinado nivel en el que una posición o una orden están "congeladas" (cualquier operación con ellas está prohibida).

Este nivel es una distancia al precio actual en la que el servidor prohíbe cualquier acción con la orden o posición. Esta distancia se mide en pips y se establece para cada símbolo.

Puede obtenerse utilizando SymbolInfoInteger() con elparámetro SYMBOL_TRADE_FREEZE_LEVEL.

Si recibe una respuesta de este tipo por parte del servidor, deberá esperar a que ocurra una de estas dos cosas

1. El precio no se ha movido la distancia requerida (mayor que la especificada en las propiedades del símbolo);

2. la orden o la posición no funciona en las condiciones establecidas en ellas.


Con respecto a

10021

TRADE_RETCODE_PRICE_OFF

No hay presupuestos para tramitar la solicitud


Probablemente, cuando reciba esta respuesta, debería comprobar el nombre del símbolo (por si acaso), asegurarse de que el símbolo está seleccionado (importante para los probadores y las transmisiones múltiples), comprobar la disponibilidad del historial, incluso en el servidor (si es necesario descargarlo), probablemente asegurarse de que el mercado está abierto y de que es posible operar con el símbolo.

PS

Aunque aquí será necesario especificar en los desarrolladores


¿Qué pasa con

10028

TRADE_RETCODE_LOCKED

Solicitud bloqueada para su tramitación


Esta es probablemente la más específica de las respuestas del servidor enumeradas anteriormente... es más probable que necesite una aclaración por parte de los desarrolladores (voy a suponer que probablemente sólo debe esperar una cierta cantidad de tiempo)...

 
Interesting:

En cuanto a


10029

TRADE_RETCODE_FROZEN

Orden o posición congelada


Hay un determinado nivel por debajo del cual una posición o una orden se "congelan" (cualquier acción con ellas está prohibida).

Este nivel es una distancia al precio actual en la que el servidor prohíbe cualquier acción con la orden o posición. Esta distancia se mide en pips y se establece para cada símbolo.

Puede obtenerse utilizando SymbolInfoInteger() con elparámetro SYMBOL_TRADE_FREEZE_LEVEL.

Si recibe una respuesta de este tipo por parte del servidor, deberá esperar a que ocurra una de estas dos cosas

1. El precio no se ha movido la distancia requerida (mayor que la especificada en las propiedades del símbolo);

2. la orden o la posición no ha cumplido las condiciones establecidas en ellas.


Gracias por la respuesta detallada. Entiendo el código "10029: TRADE_RETCODE_FROZEN: La orden o posición está congelada".

Sin embargo, seguimos teniendo dudas respecto al resto (quiero saber la respuesta exacta y no sólo conjeturas):

10008

TRADE_RETCODE_PLACED

Pedido realizado

10021

TRADE_RETCODE_PRICE_OFF

No hay presupuestos disponibles para procesar la solicitud


10028

TRADE_RETCODE_LOCKED

La solicitud está bloqueada para su procesamiento

En particular, no está muy claro qué significa "10008: El pedido se ha realizado", porque cuando el pedido se pone en cola en el servidor, se le asigna un ticket y se devuelve el código "10009: TRADE_RETCODE_DONE: Pedido ejecutado".