Discusión sobre el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" - página 6
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
¡Buenas tardes!
Actualmente estoy aprendiendo a escribir Asesores Expertos en el ejemplo de este artículo y me he encontrado con el siguiente problema - al tratar de enviar una solicitud de un comercio me sale el error 10014 - volumen incorrecto. He comprobado el volumen máximo permitido para la transacción SYMBOL_VOLUME_MAX - me devuelve 0. Pero al mismo tiempo las operaciones manuales se abren normalmente.
¿Puede decirme qué estoy haciendo mal o dónde buscar? Yo uso el código del Asesor Experto, que se adjunta en el artículo.
Gracias.
Hola,
código se ve muy bien, pero cuando lo intento me sale este error
2011.11.13 23:39:58 2011.11.01 14:20:00 Alerta: La solicitud de orden de venta no se pudo completar -error:47562011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Solicitud no válida].
No se ejecutan operaciones.
¿Podría alguien ayudar a arreglar?
Gracias
F
Hola,
código se ve muy bien, pero cuando lo intento me sale este error
2011.11.13 23:39:58 2011.11.01 14:20:00 Alerta: La solicitud de orden de venta no se pudo completar -error:47562011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Invalid request]
No se ejecuta ninguna operación.
¿Podría alguien ayudar a arreglar?
Gracias
F
Hice la misma pregunta y nadie me contestó.
Lo he encontrado.
Se trata de un error. Tienes que añadir una línea de código
ZeroMemory(mrequest);
esa línea debe estar antes de las líneas mrequest.action=... mrequest.price=... etc.
Hola.
Muchas gracias por la guía detallada y clara.
Tengo un problema. El programa compila, pero al primer intento de crear una solicitud aparece el siguiente error: "Request to set Sell order failed - error code:4756"
No he podido encontrar nada en la documentación. ¿Pueden decirme qué puedo hacer al respecto o dónde puedo encontrar información?
Tengo un problema. El programa compila, pero al primer intento de crear una solicitud aparece el siguiente error: "Request to set Sell order failed - error code:4756"
No he podido encontrar nada en la documentación. ¿Pueden decirme qué se puede hacer al respecto o dónde encontrar información?
Solucionado, descarga la versión actualizada del Asesor Experto.
El problema estaba en la estructura mrequest, hay que ponerla a cero previamente usando la función ZeroMemory. Antes de las líneas con "mrequest.action=TRADE_ACTION_DEAL;" (p. 199 y 245) debe añadir "ZeroMemory(mrequest);".
Hice la misma pregunta y nadie respondió.
La he encontrado.
Es un error. Tienes que añadir una línea de código
MemoriaCero(mrequest);
esa línea debe estar antes de las líneas mrequest.action=... mrequest.price=... etc.
¿Es siempre necesario hacer esto, es decir, poner a cero la estructura de petición antes de la petición?
Antes de enviar una petición hay que inicializar todos los campos de la estructura (en este caso se hace mediante la función ZeroMemory, aunque puedes hacerlo elemento a elemento), la inicialización debe hacerse después de declarar la estructura.
¿Lo dice el Manual de Referencia? (Ahora no tengo ocasión de comprobarlo).
Resulta que basta con declarar una variable de tipo estructura una vez a nivel global del programa, inicializarla una vez y no volver a plantearse la cuestión de utilizar de nuevo la función ZeroMemory ?
¿Dice algo al respecto el Manual? (No tengo ocasión de comprobarlo ahora)
Ninguna variable está obligada a ponerse a cero cuando se declara. Es el programador quien debe limpiar/asignar él mismo todas las variables antes de utilizarlas.
Utilizar variables no inicializadas (o incompletas) (especialmente estructuras) es un error muy común en programación.
Resulta que basta con declarar una variable de tipo estructura una vez a nivel global del programa, inicializarla una vez y no volver a plantearse la cuestión del uso de la función ZeroMemory ?
Es mejor inicializar las variables correctamente en lugar de luchar (inútilmente y más peligroso) con la inicialización llevándola al nivel global.
Es muy fácil hacerse la pregunta "¿por qué creo que alguien va a inicializar variables y especialmente estructuras complejas por mí?
Es muy conveniente inicializar estructuras sin el inconveniente ZeroMemory al declararlo: