Problemas de ejecución al subir un producto a MQL5.

 

Buen día amigos, quisiera completar el registro de mi primer articulo para el Market de MQL5 y me falta al parecer un ultimo paso, que es que el EA no tenga errores de ejecución. Para ello, nos proveen con la ayuda desde MQL5 con el articulo titulado  "QUÉ COMPROBACIONES DEBE SUPERAR UN ROBOT COMERCIAL ANTES DE SER PUBLICADO EN EL MERCADO" , que se encuentra en el siguiente Link :  https://www.mql5.com/es/articles/2555.


Al intentar subir mi EA, me manda una serie de errores con el error 131. Como se puede observar en la siguiente imagen.

.

Este error corresponde, según la documentacion de MQL4, a un error de Volumen: "Volumen comercial no valido".

Como se muestra en el siguiente Link:  https://docs.mql4.com/constants/errorswarnings/errorcodes


Pero en mi EA, gracias al articulo antes mencionado,   "QUÉ COMPROBACIONES DEBE SUPERAR UN ROBOT COMERCIAL ANTES DE SER PUBLICADO EN EL MERCADO", Estoy seguro de haber solucionado ese error, de hecho, nos muestra una forma de como podríamos corregirlo. 







Mi problema es que ya implemente esa solución que ofrece MQL5 en el articulo. De hecho lo comprobé en el Strategy Tester con "mucho saldo inicial" y con "Poco saldo inicial". y los resultados son los siguientes. 

------------------------------------ Cuando el Volumen excede el limite permitido  ----------------------------------------



------------------------------------ Cuando el Volumen es menor que lo permitido ----------------------------------------

 

Para esto, en mi algoritmo de mi EA, siempre, el lote mínimo sera 0.01, pero, checo el Saldo de la cuento también, para ver si existe el saldo mínimo para abrir 0.01 lotes. 

Nota: Arroja "Correct volume value" porque como dije, mi EA siempre elegirá 0.01 como valor minimo.



Entonces, amigos, mi duda es:

¿Por que si tengo cubierto estos errores, me aparece el "error 131" cuando intento subir mi EA a MQL5? justo como en las imágenes siguientes. 

¿Estaré viendo el error desde otra perspectiva? ¿Falta agregar algo como mandar un mensaje o parar mi EA?



Agradezco de antemano sus posibles soluciones y comentarios, gracias.

Qué comprobaciones debe superar un robot comercial antes de ser publicado en el Mercado
Qué comprobaciones debe superar un robot comercial antes de ser publicado en el Mercado
  • www.mql5.com
Todos los productos del Mercado deben superar una comprobación preliminar antes de su publicación, ya que un pequeño error en la lógica del asesor o indicador podría causar pérdidas en la cuenta comercial. Precisamente por ello, hemos desarrollado una serie de comprobaciones para garantizar que los productos del Mercado tengan el nivel...
 
David Pizana Sanchez:

Buen día amigos, quisiera completar el registro de mi primer articulo para el Market de MQL5 y me falta al parecer un ultimo paso, que es que el EA no tenga errores de ejecución. Para ello, nos proveen con la ayuda desde MQL5 con el articulo titulado  "QUÉ COMPROBACIONES DEBE SUPERAR UN ROBOT COMERCIAL ANTES DE SER PUBLICADO EN EL MERCADO" , que se encuentra en el siguiente Link :  https://www.mql5.com/es/articles/2555.


Al intentar subir mi EA, me manda una serie de errores con el error 131. Como se puede observar en la siguiente imagen.

.

Este error corresponde, según la documentacion de MQL4, a un error de Volumen: "Volumen comercial no valido".

Como se muestra en el siguiente Link:  https://docs.mql4.com/constants/errorswarnings/errorcodes


Pero en mi EA, gracias al articulo antes mencionado,   "QUÉ COMPROBACIONES DEBE SUPERAR UN ROBOT COMERCIAL ANTES DE SER PUBLICADO EN EL MERCADO", Estoy seguro de haber solucionado ese error, de hecho, nos muestra una forma de como podríamos corregirlo. 







Mi problema es que ya implemente esa solución que ofrece MQL5 en el articulo. De hecho lo comprobé en el Strategy Tester con "mucho saldo inicial" y con "Poco saldo inicial". y los resultados son los siguientes. 

------------------------------------ Cuando el Volumen excede el limite permitido  ----------------------------------------



------------------------------------ Cuando el Volumen es menor que lo permitido ----------------------------------------

 

Para esto, en mi algoritmo de mi EA, siempre, el lote mínimo sera 0.01, pero, checo el Saldo de la cuento también, para ver si existe el saldo mínimo para abrir 0.01 lotes. 

Nota: Arroja "Correct volume value" porque como dije, mi EA siempre elegirá 0.01 como valor minimo.



Entonces, amigos, mi duda es:

¿Por que si tengo cubierto estos errores, me aparece el "error 131" cuando intento subir mi EA a MQL5? justo como en las imágenes siguientes. 

¿Estaré viendo el error desde otra perspectiva? ¿Falta agregar algo como mandar un mensaje o parar mi EA?



Agradezco de antemano sus posibles soluciones y comentarios, gracias.

Listo, el error fue que quise evitar la tercera parte del código que nos ofrece MQL5 en el articulo " QUÉ COMPROBACIONES DEBE SUPERAR UN ROBOT COMERCIAL ANTES DE SER PUBLICADO EN EL MERCADO "   https://docs.mql4.com/constants/errorswarnings/errorcodes.

Es por eso que si preveía el error pero aun así lo seguía marcando. 

La parte del código que falto fue la de "Obtener la gradación mínima del volumen".

Runtime Errors - Codes of Errors and Warnings - Constants, Enumerations and Structures - MQL4 Reference
Runtime Errors - Codes of Errors and Warnings - Constants, Enumerations and Structures - MQL4 Reference
  • docs.mql4.com
The GetLastError() function return last error code, stored in _LastError predefined variable. This value can be reset using the ResetLastError() function. Error code constants defined at stderror.mqh file. To print text messages use ErrorDescription() function defined at stdlib.mqh file.
 

Los lotes de tu EA son fijos? o el usuario puede cambiarlos?


Me salía un error similar (no el mismo), donde el volumen de la operación era inválido  (0.05 lotes para el EUR/USD lo cuál no entendí). El número de lotes en mi programa era una variable de entrada que configura el usuario. Lo revisé en backtesting de nuevo y ningún problema.


Revisando documentación, utilicé:


   max=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   min=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);


Y simplemente preguntaba antes de abrir una posición si el número de lotes era mayor o menor que los máximos o mínimos permitidos por la divisa. Si no se cumplía la condición, el programa no intentaba abrir la posición.


Y eso solucionó el problema. Si bien, veo que es un error diferente, creo que no debes intentar enviar la orden si es que la condición de máximos y mínimos no se cumple. 


Saludos!!