Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Lo tengo implementado de la misma manera, sólo que a través de funciones.
Ya veo. Su código es similar al de MK - entre OrderCheck y OrderSend hay una capa de manejo de errores por parte del usuario.
Yo lo tengo implementado así, sólo a través de funciones.
OrderCheck está implícito y se comprueba necesariamente dentro de OrderSend.
Así, si el pedido no se rellena correctamente, la respuesta se devuelve inmediatamente sin enviarla de nuevo al servidor.
Vea lo que dice el manual al respecto:
Primera selección: vemos que la función es para las transacciones comerciales y no se mencionan los cheques.
Bueno, si digo que hay controles, entonces es verdad.
Ningún pedido sale de la terminal sin controles estrictos.
Segundo punto destacado: vemos que las comprobaciones se realizan en el servidor y los desarrolladores recomiendan utilizar OrderCheck() para comprobar la petición antes de enviarla al servidor. De nuevo, no se menciona que OrderSend() realice ninguna validación.
En concreto, recomendamos que los operadores tengan la oportunidad de averiguar de antemano si la orden se ejecuta correctamente, y tomar las medidas oportunas.
Quien lo desee, puede comprobarlo previamente. Quien no lo desee, comprobará y devolverá respuestas similares por ellos de todos modos.
El único lugar en el que se menciona que la comprobación antes de enviar la solicitud es "En caso de que la comprobación básica de las estructuras (comprobación de punteros) tenga éxito ....". Pero la comprobación de los punteros y la comprobación de los valores de los campos de la estructura de petición para los errores no es la misma cosa. Y la recomendación de los desarrolladores de utilizar la función OrderCheck() es una prueba indirecta de que OrderSend() no realiza una verdadera comprobación de errores antes de enviar una solicitud al servidor. Si no es así, ¿por qué debemos hacer "manteado": OrderSend() comprueba primero, y luego la misma comprobación debe ser realizada por OrderCheck() de nuevo?
Por lo tanto, de la referencia se deduce inequívocamente que la comprobación se realiza únicamente en el servidor.
Nadie echará de menos un flujo erróneo o excesivo de peticiones al servidor.
La lógica básica es suficiente para entender esto. Y ampliaremos la documentación.
No lo tiene. Todos los errores son manejados por la lógica del negocio.
Yo tengo uno. La lógica de negocio se encarga de los eventos relacionados con la lógica de negocio (por ejemplo, el fallo en la realización del pedido), pero todo lo demás (por ejemplo, el retraso en la respuesta del servidor) - una plantilla universal, basada en la que se puede implementar absolutamente cualquier experto.
Pero MT5 es muchas veces más complicado en términos de manejo de códigos de retorno + asincronía.
De eso estamos hablando, como ya he escrito antes de forma similar, y hay cero información sobre este tema. Y desde hace años los MKs intentan por todos los medios desvincularse de su prestación. Esto es lo que escribí: los concesionarios se benefician de un producto en el que hay puntos que conducen a la fuga, es decir, para MQ es un factor de aumento de las ventas. Por desgracia, estamos en un mercado en el que los competidores (nosotros y MQ), no los camaradas.
Estás pidiendo lo imposible a un envoltorio. La biblioteca estándar no es lógica de negocio. Es una envoltura "sobre" las funciones de la terminal. Un envoltorio sobre el relleno del caramelo.
Entonces no tiene mucho sentido esa estructuración.
Al igual que la función de impresión no puede garantizar el espacio libre en el disco. Y los errores de registro. Tienes que usar otras funciones para el manejo de errores y son específicas para cada caso.
Ni siquiera la envoltura adecuada puede garantizarlo todo, pero sí muchas cosas relacionadas con las funciones relacionadas.
Ya se ha escrito sobre lo específico más de una vez. Si MQ no es capaz de proporcionar una solución preparada, que al menos haga un manual sobre la gestión de errores y los códigos de retorno. Desbloqueado de todas las maneras posibles. En la documentación de 4 esto estaba presente en parte (por ejemplo, esperar 30 segundos en tal caso), en parte los usuarios han identificado por experiencia el manejo de situaciones no documentadas. Para el 5 no hay nada en absoluto. Y como lo hay, nadie lo usará.
Pues bien, si así responde MQ porque la infraestructura de negociación simplemente creada no lo permite en principio, entonces qué puedo decir: es un fracaso total de todo el proyecto MT5, dado que hay una masa increíble de otros escollos también.
Si quieres, puedes repasar cada código de retorno y ver las principales situaciones posibles.
Con gusto lo haría con un Asesor Experto en MQL5 tan experimentado como tú. Esperaremos el tiempo y la necesidad. Gracias a Dios sigo teniendo el 4 que es mucho más cómodo en muchos aspectos.
-Alexey-:
una solución lista, al menos una guía para el manejo de errores y códigos de retorno
¿Qué código causa problemas de procesamiento?
Código
Identificador
Descripción
10004
TRADE_RETCODE_REQUOTE
Requote
10006
TRADE_RETCODE_REJECT
Solicitud rechazada
10007
TRADE_RETCODE_CANCEL
Solicitud anulada por el comerciante
10008
TRADE_RETCODE_PLACED
Pedido realizado
10009
TRADE_RETCODE_DONE
Orden ejecutada
10010
TRADE_RETCODE_DONE_PARTIAL
Requisición parcialmente ejecutada
10011
TRADE_RETCODE_ERROR
Error de procesamiento de la solicitud
10012
TRADE_RETCODE_TIMEOUT
Solicitud anulada por expiración de plazo
10013
TRADE_RETCODE_INVALID
Solicitud incorrecta
10014
TRADE_RETCODE_INVALID_VOLUME
Volumen incorrecto en la solicitud
10015
TRADE_RETCODE_INVALID_PRICE
Precio incorrecto en la solicitud
10016
TRADE_RETCODE_INVALID_STOPS
Paradas incorrectas en la solicitud
10017
TRADE_RETCODE_TRADE_DISABLED
Comercio prohibido
10018
TRADE_RETCODE_MARKET_CLOSED
El mercado está cerrado
10019
TRADE_RETCODE_NO_MONEY
Insuficiencia de fondos para la ejecución de la solicitud
10020
TRADE_RETCODE_PRICE_CHANGED
Los precios han cambiado
10021
TRADE_RETCODE_PRICE_OFF
No hay presupuesto para tramitar la solicitud
10022
TRADE_RETCODE_INVALID_EXPIRATION
Fecha de caducidad no válida en la solicitud
10023
TRADE_RETCODE_ORDER_CHANGED
Se ha modificado el estado del pedido
10024
TRADE_RETCODE_TOO_MANY_REQUESTS
Solicitudes demasiado frecuentes
10025
TRADE_RETCODE_NO_CHANGES
No hay cambios en la solicitud
10026
TRADE_RETCODE_SERVER_DISABLES_AT
El servidor deniega el comercio automático
10027
TRADE_RETCODE_CLIENT_DISABLE_AT
Autotrading prohibido por el terminal del cliente
10028
TRADE_RETCODE_LOCKED
Solicitud bloqueada para su tramitación
10029
TRADE_RETCODE_FROZEN
Orden o posición congelada
10030
TRADE_RETCODE_INVALID_FILL
Se indica un tipo de orden de balance no soportado
10031
TRADE_RETCODE_CONNECTION
No hay conexión con el servidor de comercio
10032
TRADE_RETCODE_ONLY_REAL
La operación está permitida sólo para las cuentas reales
10033
COMERCIO_RETODECÓDIGO_LIMITE_DE_PEDIDOS
Límite del número de órdenes pendientes alcanzado
10034
VOLUMEN_DEL_CÓDIGO_DE_COMERCIO_ALCANZADO
Alcanzado el límite de volumen de órdenes y posiciones para este símbolo
Por ejemplo, 10004. ¿Dónde está escrito lo que hay que hacer? Y había al menos algo en la documentación cuádruple:
Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
¿qué código plantea problemas de procesamiento?
10006 (¿qué motivo se rechaza, qué otros motivos puede haber que no figuren en los demás códigos?)
10011, 10013, 10028
10006 (¿qué motivo se rechaza, qué otros motivos puede haber que no se indiquen en los otros códigos?)
10011, 10013, 10028
Los colegas, ya hartos de buscar la verdad. ¡El tema es similar a lo que necesito, así que escribo aquí pidiendo ayuda!
Coloco la orden con ejecución inmediata, mientras está colgada compruebo el precio cada tick y si es posible lo rastreo, pero por alguna razón siempre me da el error 10013. He mirado en todos los foros posibles y he añadido casi todas las líneas de la orden inicial (aunque en la descripción pone que para este tipo de acciones sólo basta con el símbolo, la acción y sl y tp. Nada funciona. Aquí está el código.