Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte IX): Compatibilidad con MQL4 - Preparando los datos"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte IX): Compatibilidad con MQL4 - Preparando los datos:

En artículos anteriores, comenzamos a crear una gran biblioteca multiplataforma, cuyo cometido es simplificar la escritura de programas para las plataformas MetaTrader 5 y MetaTrader 4. En la novena parte, hemos creado una clase que monitoreará los eventos de modificación de las órdenes y posiciones de mercado. En el presente artículo, comenzaremos a desarrollar la biblioteca para hacerla totalmente compatible con MQL4.

Mejorando la biblioteca

En la carpeta raíz de la biblioteca DoEasy, creamos el nuevo archivo de inclusión ToMQL4.mqh, en el que describiremos las constantes y enumeraciones necesarias para MQL4. A continuación, lo incluimos en el archivo Defines.mqh para la compilación en MQL4, al principio del todo del listado Defines.mqh:

//+------------------------------------------------------------------+
//|                                                      Defines.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                             https://mql5.com/es/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com/es/users/artmedia70"
//+------------------------------------------------------------------+
//| Archivos de inclusión                                                 |
//+------------------------------------------------------------------+
#ifdef __MQL4__      
#include "ToMQL4.mqh"
#endif               
//+------------------------------------------------------------------+

Después de dicha inclusión, la biblioteca al completo verá todo lo que esté escrito en el archivo ToMQL4.mqh al realizar la compilación para MQL4.

Vamos a pasar al principio de la lista de errores en el diario del editor "Errores", pulsando la tecla NumPad "Home", o simplemente desplazándonos con el ratón al comienzo, haciendo doble clic sobre el error a la derecha del todo:

Autor: Artyom Trishkin

 

Buenas tardes. Me gusta su Asesor Experto de prueba. Quiero tratar de usarlo como un núcleo, que recibirá señales y filtros de varios indicadores, sus combinaciones, o controlado manualmente, a través de pulsaciones de botones.

Usted ya ha visto el primero de tales Asesores Expertos y me ayudó a darle vida en un hilo vecino de este foro.

¿Puedes mostrar en este EA de prueba tuyo cómo pulsar botones programáticamente?

¿Hay una función adecuada - puede compartirlo?

O sugerir la mejor manera de hacerlo, por favor.

 
Sergey Voytsekhovsky:

Buenas tardes. Me gusta su Asesor Experto de prueba. Quiero tratar de usarlo como un núcleo, que recibirá señales y filtros de varios indicadores, sus combinaciones, o controlado manualmente, a través de pulsaciones de botón.

Ya has visto el primero de tales Asesores Expertos y me ayudaste a darle vida en un hilo vecino de este foro.

¿Puedes mostrarme cómo pulsar los botones programáticamente en este EA de prueba tuyo?

¿Hay una función adecuada - puede compartirlo?

O sugerir la mejor manera de hacerlo, por favor.

El Asesor Experto presentado en los artículos es sólo un EA de prueba. No es adecuado para su uso para el comercio en las cuentas. Los botones creados en este Asesor Experto son también sólo un conjunto de objetos ordinarios para la prueba rápida de la nueva funcionalidad de la biblioteca añadida en cada artículo posterior. En el futuro, al crear el shell gráfico de la biblioteca, estos botones simples serán reemplazados por botones creados utilizando la funcionalidad gráfica de la biblioteca.

¿Y para qué se necesita "pulsar botones de software", si se trata de una llamada normal de funciones comerciales? ¿Por qué llamar a una función comercial pulsando un botón de software cuando se puede llamar a la función comercial desde el programa inmediatamente? Se trataría de una "pulsación de botón de software".

 
Artyom Trishkin:

El Asesor Experto presentado en los artículos es sólo un Asesor Experto de prueba. No es adecuado para su uso para el comercio en las cuentas. Los botones creados en este Asesor Experto son también sólo un conjunto de objetos ordinarios para la prueba rápida de la nueva funcionalidad de la biblioteca añadida en cada artículo posterior. En el futuro, al crear el shell gráfico de la biblioteca, estos botones simples serán reemplazados por botones creados utilizando la funcionalidad gráfica de la biblioteca.

¿Y para qué se necesita "pulsar un botón de software", si se trata de una llamada normal de funciones comerciales? ¿Por qué llamar a una función comercial pulsando un botón de software cuando se puede llamar a la función comercial desde el programa inmediatamente? Se trataría de una "pulsación de botón de software".

La cuestión es que todo está ya vinculado, las funciones comerciales, las clases, los datos. No hay que preocuparse por este aspecto, basta con pulsar el botón. Y me falta catastróficamente experiencia y tiempo para conseguirlo.

Utilizando un núcleo de este tipo, puede dedicar más tiempo a los algoritmos de toma de decisiones comerciales en lugar de a la mecánica de ejecución. Por supuesto, la ejecución de las decisiones también es importante, pero se puede posponer un poco.

Así es como lo he entendido yo.

 
Sergey Voytsekhovsky:

La cuestión es que ya tienes todo enlazado allí, funciones comerciales, clases, datos. No tienes que preocuparte por este lado del asunto, sólo tienes que pulsar un botón. Y estoy cathostrophically corto de experiencia y tiempo para conseguirlo.

Utilizando un núcleo de este tipo, puede dedicar más tiempo a los algoritmos de toma de decisiones comerciales en lugar de a la mecánica de ejecución. Por supuesto, la ejecución de las decisiones también es importante, pero se puede posponer un poco.

Así es como lo he hecho yo.

Poco a poco, se añadirá tanta funcionalidad a la biblioteca que será muy fácil trabajar con algoritmos de la forma que se desee. Y este es exactamente el propósito para el que fue concebida.

Ahora, aunque no existe tal funcionalidad, puedes ver cómo funciona el Asesor Experto de prueba con la clase de trading CTrade incluida en la librería estándar en MQL5, y escribir construcciones similares para llamar a las funciones de trading necesarias. También hay una llamada de funciones de comercio de prueba para MQL4 allí (en el EA de prueba).

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Artyom Trishkin:

Poco a poco, se irán añadiendo tantas funciones a la biblioteca que será muy fácil trabajar con algoritmos, como tú quieras. Y esto es exactamente para lo que fue diseñada.

Ahora, mientras que no hay tal funcionalidad allí, se puede ver cómo funciona el Asesor Experto de prueba con la clase de comercio CTrade incluida en la biblioteca estándar en MQL5, y escribir construcciones similares para llamar a las funciones de comercio necesarias. Allí (en el EA de prueba) hay una llamada de funciones de comercio de prueba para MQL4.

Gracias, lo estudiaré.

 
Sergey Voytsekhovsky:

Buenas tardes. Me gusta su Asesor Experto de prueba. Quiero tratar de usarlo como un núcleo, que recibirá señales y filtros de varios indicadores, sus combinaciones, o controlado manualmente, a través de pulsaciones de botón.

Ya has visto el primero de tales Asesores Expertos y me ayudaste a darle vida en un hilo vecino de este foro.

¿Puedes mostrarme cómo pulsar los botones programáticamente en este EA de prueba tuyo?

¿Hay una función adecuada - puede compartirlo?

O sugerir la mejor manera de hacerlo, por favor.

Buenas tardes.

Sergey, te apoyaré porque veo que estás en una situación similar.

Sí, los artículos están muy bien, pero contienen muy poca información sobre cómo utilizar el código escrito. Las bibliotecas, en general, son valiosas para ocultar la implementación y proporcionar una interfaz clara para las tareas prácticas. La ayuda de la función https://docs.mql4.com/strings/stringsubstr no contiene ni una sola palabra sobre su funcionamiento interno. Una descripción de los parámetros entrantes, el resultado de su procesamiento y ejemplo(s). Esto es lo que me gustaría ver.

Sí, Artem, sin duda eres un programador con talento, pero los ingenieros de aplicaciones necesitan desarrollar otro algoritmo lo más rápido posible y no pasar horas sobre cientos de líneas de código ajeno en busca de iluminación. La serie de artículos hasta ahora es más teórica.

Este no es mi primer post sobre este tema ). De ninguna manera quiero menospreciar los méritos de la serie. Al contrario - espero, Artem, que tengas en cuenta las peticiones de los miembros del foro y que las librerías escritas se utilicen en los EAs con la misma ilusión que se citan las buenas películas.

StringSubstr - String Functions - MQL4 Reference
StringSubstr - String Functions - MQL4 Reference
  • docs.mql4.com
StringSubstr - String Functions - MQL4 Reference
 
Nikolai Karetnikov:

¡Buenas tardes!

Sergey, te apoyo, porque veo que estás en una situación similar.

Sí, los artículos están muy bien, pero contienen muy poca información sobre cómo utilizar el código escrito. Las bibliotecas, en general, son valiosas para ocultar la implementación y proporcionar una interfaz clara para las tareas prácticas. La ayuda de la función https://docs.mql4.com/strings/stringsubstr no contiene ni una sola palabra sobre su funcionamiento interno. Una descripción de los parámetros entrantes, el resultado de su procesamiento y ejemplo(s). Esto es lo que me gustaría ver.

Sí, Artem, sin duda eres un programador con talento, pero los ingenieros de aplicaciones necesitan resolver tareas prácticas en lugar de pasar horas sobre cientos de líneas de código ajeno en busca de iluminación. La serie de artículos hasta ahora es más teórica.

Este no es mi primer post sobre este tema ). De ninguna manera quiero menospreciar los méritos de la serie. Al contrario - espero, Artem, que tengas en cuenta las peticiones de los miembros del foro y que las librerías escritas se utilicen en los EAs con la misma ilusión que se citan las buenas películas.

El objetivo es guiar al lector desde el principio de la creación de la biblioteca hasta su finalización.
Como ves, los artículos son más bien de naturaleza educativa, al tiempo que tienen un propósito práctico útil, y más de uno. El diseño de los códigos es fácil de entender, sin utilizar giros y características no documentadas por el bien de giros y "coolness". Pero hay un plus innegable - cuantas versiones beta del terminal han sido liberadas, y cuanta gente ya ha dicho que sus códigos dejaron de funcionar, y la librería - vive de build en build sin arreglos forzados porque algo de repente dejó de funcionar....

La biblioteca tiene actualmente un punto de entrada - la clase CEngine (habrá un segundo punto de entrada, pero mucho más tarde), y el objeto de esta clase en el EA da acceso completo a todas las características.

Y además - no es difícil crear un objeto de este tipo, por ejemplo: CEngine lib; y en el tipo de código lib y poner un punto (así: lib.) - después de que el punto el editor le mostrará una ventana con una lista de todos los disponibles para los métodos de uso de la biblioteca. La mayoría de ellos tienen nombres significativos - con un poco de práctica podrás usarlos. Todos los métodos están descritos en artículos. En cada artículo hay un ejemplo de un programa de prueba que muestra, sin embargo, una pequeña parte de las posibilidades.

Estoy de acuerdo - buscar los métodos mostrados y su aplicación en numerosos artículos sin material de referencia es una tarea difícil.... Pero el ciclo de artículos es un ciclo para que el lector lo recorra junto conmigo, y entonces algo se almacenará en su cabeza :) Y el propósito, les recuerdo, es educativo.

Habrá material de referencia. Pero al final - cuando se creará la biblioteca. Y ejemplos, por supuesto, también.

Mientras tanto, puedes hacer preguntas prácticas. Muestra una parte de tu código y te daré una pista. Estoy aquí y no voy a ninguna parte - no está en mis normas abandonar lo que he empezado.

 
Artyom Trishkin:

El objetivo es llevar al lector desde el inicio de la biblioteca hasta su finalización.
Como ves, los artículos son más bien de naturaleza educativa, al tiempo que tienen un propósito práctico útil, y más de uno. El diseño de los códigos es fácil de entender, sin utilizar giros y características no documentadas por el bien de giros y "coolness". Pero hay un plus innegable - cuantas versiones beta del terminal han sido liberadas, y cuanta gente ya ha dicho que sus códigos dejaron de funcionar, y la librería - vive de build en build sin correcciones forzadas porque algo de repente dejó de funcionar....

La biblioteca tiene actualmente un punto de entrada - la clase CEngine (habrá un segundo punto de entrada, pero mucho más tarde), y el objeto de esta clase en el EA da acceso completo a todas las características.

Y además - no es difícil crear un objeto de este tipo, por ejemplo: CEngine lib; y en el tipo de código lib y poner un punto (así: lib.) - después de que el punto el editor le mostrará una ventana con una lista de todos los disponibles para los métodos de uso de la biblioteca. La mayoría de ellos tienen nombres significativos - con un poco de práctica podrás utilizarlos. Todos los métodos están descritos en artículos. Cada artículo contiene un ejemplo de un programa de prueba, que muestra sólo una pequeña parte de las posibilidades.

Estoy de acuerdo - buscar los métodos mostrados y su aplicación en numerosos artículos sin material de referencia es una tarea difícil.... Pero el ciclo de artículos es un ciclo para que el lector lo recorra junto conmigo, y entonces algo se almacenará en su cabeza :) Y el propósito, les recuerdo, es educativo.

Habrá material de referencia. Pero al final - cuando se creará la biblioteca. Y ejemplos, por supuesto, también.

Mientras tanto, puedes hacer preguntas prácticas. Muestra una parte de tu código y te daré una pista. Estoy aquí y no voy a ninguna parte - no está en mis reglas abandonar lo que he empezado.

Entiendo que tus intenciones son las mejores y probablemente tienes mucho tiempo libre ).

Acabo de ver sus artículos de la serie "MakingSimple" [ Biblioteca para la creación fácil y rápida de programas para MetaTrader] y pensé que después de 10-15 minutos de lectura sería capaz de utilizar código útil. Yo esperaba ver un artículo clásico comohttps://www.mql5.com/es/articles/272, donde la lógica está oculta y la interfaz está abierta, donde las preguntas son contestadas: "por qué es necesario", "cómo trabajar con ello" y ejemplos. Resulta que el objetivo es la formación, no el RAD (desarrollo rápido).

Bueno, ¡estamos deseando verte escribir uno de estos! ))

Трассировка, отладка и структурный анализ кода
Трассировка, отладка и структурный анализ кода
  • www.mql5.com
В данной статье речь пойдет про один из способов создания стека вызовов на этапе выполнения. Возможности, которые описаны в статье следующие: Составление структуры используемых классов, функций, файлов. Создание стека вызова, с сохранением всех прошлых стеков. Их последовательности вызовов. Просматривать состояние Watch-параметров на этапе...
 
Nikolai Karetnikov:

Soy consciente de que tus intenciones son las mejores y de que probablemente dispongas de mucho tiempo libre )

Acabo de ver sus artículos de la serie "MakingSimple"[ Biblioteca para la creación fácil y rápida de programas para MetaTrader], pensé que después de 10-15 minutos de lectura sería capaz de utilizar código útil. Esperaba ver un artículo clásico comohttps://www.mql5.com/es/articles/272, donde la lógica está oculta y la interfaz está abierta, donde se responde a las preguntas: "por qué es necesario", "cómo trabajar con ello" y ejemplos. Resultó que el objetivo era la formación, no el RAD (desarrollo rápido).

Bueno, ¡estamos deseando verte escribir uno de estos! ))

El objetivo esformación + desarrollo rápido. Sobre el desarrollo rápido sólo vale la pena hacer preguntas de aplicación práctica si eres demasiado perezoso para leer y todavía no hay material de referencia con ejemplos.

El título se traduce más bien como "Hazlo fácil". (Inglés..., permite traducir como se quiera, si no hay contexto).