Discusión sobre el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" - página 6

 

¡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.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Gracias por tu artículo.
 

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:4756
2011.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

[Eliminado]  
Financialabs:

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:4756
2011.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?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Alfff:

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);".

 
senerzen:

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.

Gracias, el error está corregido.
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
papaklass:
¿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 se puede hacer elemento a elemento), la inicialización debe hacerse después de declarar la estructura.
 
Automated-Trading:
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 ?

 
Yedelkin:

¿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:

   MqlTick my={0};