English Русский 中文 Deutsch 日本語 Português
preview
MQL5 — Tú también puedes convertirte en un maestro de este lenguaje

MQL5 — Tú también puedes convertirte en un maestro de este lenguaje

MetaTrader 5Entrevista | 2 junio 2023, 09:41
832 0
Daniel Jose
Daniel Jose

Introducción

Vamos a hacer algo un poco diferente en este artículo. Está especialmente dirigido a aquellos que tienen poco o ningún conocimiento de MQL5 o de programación en general. Por ello, simularé una entrevista conmigo, donde explicaré cómo puedes aprender MQL5 desde cero, y despegar en tu carrera profesional.


Un poco de historia.

Desde que empecé a escribir artículos para la comunidad MQL5, he sido agraciado con comentarios inmensamente positivos. Muchas personas se acercan a mí, curiosos acerca de cómo aprendí a programar en MQL5, y sobre las posibilidades que he estado explorando en mis artículos. Me doy cuenta de que muchos de estos curiosos son entusiastas o personas que buscan una guía básica para dar sus primeros pasos en la programación. Así que este artículo está dedicado a todos ustedes, entusiastas y aspirantes a programadores MQL5.

Antes de profundizar, hay algo que necesito compartir. Lejos de querer desmotivarte, la intención es precisamente aumentar aún más tu motivación.

Puedes imaginar que tengo una amplia experiencia programando en MQL5. Sin embargo, en el momento de escribir este artículo, sólo he cumplido un año y medio utilizando el lenguaje MQL5. ¿Sorpresa? Tengo menos de dos años como programador de MQL5. Te preguntarás cómo es posible, con tan poco tiempo de práctica en MQL5, lograr las hazañas que muestro que son posibles en la plataforma MetaTrader 5.

La respuesta es simple. Los desarrolladores y mantenedores de MQL5 tuvieron el gran acierto de hacer el lenguaje similar en muchos aspectos a C/C++. Esto hace que sea considerablemente más fácil de aprender para los programadores con amplia experiencia en C / C ++, ya que no hay necesidad de volver a aprender conceptos, sintaxis y comandos.

¿Y por qué es esto importante? Porque soy programador profesional de C/C++ desde principios de la década de 2000, es decir, tengo más de 23 años de experiencia programando en C/C++. Si tuviera que aprender un nuevo lenguaje para ser realmente productivo en MetaTrader 5, es probable que acabara abandonando.

Algunas personas creen que para ser un buen programador hay que realizar ciertos cursos. Sin embargo, la verdad es que para aprender realmente a programar, no se puede tener miedo a cometer errores. Hay que evitar el apego excesivo a un código o a una idea. El progreso llega con la búsqueda constante de experimentación y probando nuevos enfoques.

Este pensamiento puede parecer poco convencional, ya que muchos tienen la costumbre de repetir las mismas acciones de la misma manera. Sin embargo, un programador excelente siempre busca formas diferentes de hacer lo mismo. Además, algo que muchos no comprenden es que un programador suele inspirarse en otros. Toman el código fuente desarrollado por programadores más experimentados, que está en funcionamiento, y empiezan a modificar el código poco a poco, experimentando y observando el resultado para entender así la construcción del programa.

Algunas personas piensan erróneamente que aprender MQL5 requiere un estudio aleatorio. Sin embargo, a todas las personas que me han preguntado cómo aprender de verdad, sin tener ningún conocimiento previo sobre el tema, siempre les he aconsejado empezar por lo básico. Es decir, aprender un poco sobre C, para entender la sintaxis y la lógica de programación, así como los comandos. Después de entender lo básico de C, empezar a estudiar C ++, al mismo tiempo que la práctica MQL5. El simple hecho de que tengas una base de programación en C hará que te resulte extremadamente fácil empezar con MQL5.

Algunos pueden creer que el lenguaje C está obsoleto, pero lo cierto es que C es un lenguaje extremadamente documentado y ampliamente utilizado. Por lo tanto, encontrarás infinidad de materiales para aprender a utilizarlo. Sin embargo, quiero hacer hincapié: no estoy diciendo que necesites profundizar en C. Al contrario, si aprendes algunos comandos básicos, la sintaxis y la forma de emitir comandos, eso ya será suficiente para iniciarte en MQL5.

Eso puede sonar un poco desalentador. ¿¡Aprender C para progresar en MQL5!? Tal vez, si te dedicas lo suficiente y encuentras a alguien dispuesto a enseñarte, puedas empezar directamente en MQL5. Pero basándome en mi experiencia inicial y en los testimonios de otras personas, puedo decir que la tarea no será tan sencilla. La mayoría de los materiales de calidad se concentran aquí, en la comunidad MQL5. En Internet en general, los contenidos están muy dispersos y a menudo son de baja calidad, lo que puede perjudicar más que ayudar. Sin embargo, cuando se trata de los lenguajes C y C++, hay una gran cantidad de material de excelente calidad y muy accesible. Por lo tanto, la elección de por dónde empezar depende de ti.


Mi primer código en MQL5

Es común que la gente asuma que porque ya tenía experiencia en programación con C/C++, cuando empecé a escribir código en MQL5, inmediatamente me zambullí en proyectos complejos y elaborados. Bueno, me encantaría decir que así es como empezó todo. Sin embargo, la realidad no fue exactamente así.

Cuando damos los primeros pasos para tomar nuestras propias decisiones y desarrollar nuestras propias soluciones, solemos empezar con algo que creemos que ya sabemos. En mi caso, cuando di mis primeros pasos con MQL5, sólo disponía de la documentación del lenguaje, la misma que obtienes al instalar el programa. Ni siquiera sabía que existía una comunidad dedicada a dar soporte a otros interesados.

Así que, armado con la documentación y los códigos fuente que vienen junto con el Meta Editor, empecé a experimentar. Mi primer código real, construido con todo lo que había entendido, se puede ver a continuación.

01. //+------------------------------------------------------------------+
02. #property copyright "Daniel Jose"
03. #property version   "1.00"
04. #property description "Modify special chart properties"
05. #property script_show_inputs
06. //+------------------------------------------------------------------+
07. enum eWhat  {
08.                eScaleDate  = CHART_SHOW_DATE_SCALE,   //Time scale
09.                eScalePrice = CHART_SHOW_PRICE_SCALE   //Price scale
10.             };
11. enum eOp    {
12.                eFalse,                                //Makes hidden
13.                eTrue                                  //Makes visible
14.             };
15. //+------------------------------------------------------------------+
16. input eWhat user00 = eScaleDate;                      //Graphic property
17. input eOp   user01 = eFalse;                          //What to do?
18. //+------------------------------------------------------------------+
19. void OnStart()
20. {
21.    ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER) user00, user01);
22. }
23. //+------------------------------------------------------------------+

Código fuente de mi primer programa MQL5

Sí, lo que estás viendo no es algo extraordinario o innovador. Es código cuyo propósito era confirmar que efectivamente estaba entendiendo correctamente la documentación y cómo se podían definir y manipular los elementos. El resultado de la ejecución de este mismo código puede verse en el siguiente vídeo.


Vídeo de demostración

Nótese que se trata de algo extremadamente básico. Sin embargo, ser capaz de construir este código de forma completamente autónoma, sin la ayuda de nadie salvo la documentación y los códigos fuente del Meta Editor, me demostró que era posible ir más allá. Todo lo que necesitaba hacer era adaptar los conocimientos que ya tenía de C y C++ a MQL5. A partir de ahí, las cosas realmente empezaron a progresar.

Puede que tú, al ver este sencillo código de arriba, no le des la importancia que tiene. Sin embargo, como es habitual, la primera tarea de todo principiante en un lenguaje de programación es crear un código conocido como "HELLO WORLD", cuya finalidad es mostrar un mensaje en la pantalla.

Yo, sin embargo, ya había superado la fase del código "HELLO WORLD". Por lo tanto, decidí intentar algo un poco más desafiante. Ahora bien, como no tenía mucha experiencia y comprensión de cómo funcionaba realmente MQL5, empecé por desarrollar un script que, para mí, sería más fácil, dado mi escaso conocimiento de cómo funcionaban realmente las cosas.

Sólo después de algún tiempo, me di cuenta de que MQL5 en realidad no es un lenguaje procedimental, sino un lenguaje basado en eventos. Este descubrimiento cambió significativamente mi enfoque de la programación y el análisis de código. Con el deseo de mejorar mis habilidades, empecé a estudiar y leer los artículos aquí en la comunidad MQL5. Me di cuenta de que mientras muchos podían hacer que su código funcionara, estaban explorando MQL5 de una manera relativamente básica, al menos en mi opinión. Así que empecé a desarrollar y experimentar con soluciones más sofisticadas que exploraran las capacidades de la plataforma MetaTrader 5 y el lenguaje MQL5 más profundamente.

En un momento dado, decidí empezar a compartir los resultados de mis experimentos. Así surgió el primero de los artículos. Es cierto que una cosa es construir un código y otra muy distinta explicar cómo se construyó y diseñó. Esto sabiendo que tanto los experimentados como los novatos leerán lo escrito.

Los artículos han sufrido cambios, tanto en la forma como en el contenido. Esto es para asegurar que incluso alguien con poca experiencia pueda entender la información. E incluso si no puedes absorber todo el conocimiento presente en el artículo de inmediato, con el tiempo y a medida que te desarrolles en la programación, serás capaz de asimilar adecuadamente lo que estoy tratando de transmitir en un artículo en particular.

El conocimiento debe compartirse. No veo ningún mérito en acumular sabiduría sin dejar algo valioso detrás. Algo que pueda cambiar la forma en que alguien ve el mundo, despertando a algo de lo que muchos no se dan cuenta por estar siempre con la cabeza agachada.

Muy bien, pero volvamos al código. Quiero mostrarte que incluso algo tan simple, que utiliza pocas líneas, puede contener mucha más información y conocimiento que un código con miles de líneas. Vale la pena decir que, originalmente, toda la información que no es parte de la sintaxis C / C ++ y, en consecuencia, de MQL5, no estaba en Inglés. Pero eso es sólo un pequeño detalle. Vamos a diseccionar este pequeño código y entender cómo funciona. Y, sobre todo, por qué funciona.


Diseccionando el código

Las líneas dos, tres y cuatro podrían eliminarse del código. De hecho, sólo sirven para que MetaTrader 5 informe al usuario del propósito del código. Si eres el usuario, podrías simplemente descartar estas líneas en tu código de aprendizaje.

La quinta línea es crucial, porque sin ella, MetaTrader 5 no reconocerá que la secuencia de comandos puede ser ajustada por el usuario a través de algún tipo de estructura de entrada, que en este caso son los 'inputs' vistos en las líneas 16 y 17. Sin embargo, llegaremos allí pronto.

Ahora, abordaremos algo que muchos pueden no entender, especialmente si solo han estudiado MQL5, o vienen de un lenguaje muy diferente a C / C++. Estamos hablando de las enumeraciones, presentes en las líneas 07 y 11.

Es muy probable que te sientas bastante confuso al ver estas construcciones. Incluso puede que imagines que son algo que está muy lejos de tu alcance. Sin embargo, precisamente porque MQL5 está diseñado para atraer a los programadores C / C ++ con cierta experiencia, se hace agradable de usar incluso para aquellos con un mínimo de C / C ++ de fondo. Pero vamos a entender, al menos superficialmente, lo que es una enumeración.

Una enumeración, en términos generales, puede entenderse como una secuencia de datos, a los que puedes o no asignar valores. Cuando no se asigna un valor, la enumeración siempre empezará por el primer valor posible, que en este caso es cero. Por lo tanto, la enumeración definida en la línea 11 sigue el mismo principio que un valor de 0 o 1. En C / C ++, así como en MQL5, por lo tanto, el valor cero se considera falso, y el valor uno como verdadero.

Así, en la línea 12, donde se define el valor eFalse, tenemos la indicación de cero, y en la línea 13, siendo el segundo valor de la enumeración, tendremos el valor uno. Si tuviéramos más elementos definidos, seguirían la secuencia, por lo que el siguiente dado sería el dos, el siguiente el tres, y así sucesivamente. Este es el caso más sencillo.

Sin embargo, quiero llamar tu atención sobre algo más. Observa que al final de la línea 12, tenemos algo que en C / C++ sería un comentario, al igual que tenemos este mismo tipo de anotación en otras líneas. Pero centrémonos en la línea 12, aunque lo dicho para ella también es aplicable a todas las demás.

Si miras el script cuando lo lanzas en el gráfico, verás la imagen 01. En ella, estoy resaltando algo que corresponde exactamente al comentario de la línea 12.

Image 01

Imagen 01 - Ventana de interacción con el usuario


Este tipo de características facilitan mucho la codificación en MQL5. En otros lenguajes tendríamos que hacer varias cosas para conseguir lo que aquí se hace en MQL5 de una forma tan sencilla y práctica. Así que date cuenta de que a menudo comentar algo en el código no es una pérdida de tiempo. Hacerlo, además de hacer el código más claro, permite configurar un mensaje que se mostrará al usuario.

Demos un paso atrás y volvamos a la línea 07, donde tenemos otra enumeración. Sin embargo, esta enumeración difiere de la que acabo de explicar. No es completamente diferente, la distinción radica en que ahora estamos asignando valores a cada uno de los elementos. Es decir, el compilador hará uso de los valores que le indiquemos, que en este caso son constantes definidas en MQL5. Te preguntarás: ¿por qué no utilizar directamente constantes en lugar de asignarlas a una enumeración? La razón es simplemente la facilidad de implementación. Si usáramos las constantes directamente, tendríamos que crear algo distinto, como un array o una estructura, lo que supondría mucho más trabajo. Sin embargo, utilizando el enfoque que estoy mostrando, puedo insertar cualquier valor, en cualquier posición o secuencia. Y si alguna constante de interés aparece en la secuencia que estoy declarando, en realidad no necesitaré asignar o declarar esa constante; todo lo que tendré que hacer es añadir más contenido a la enumeración, y el propio lenguaje se asegurará de que los valores correctos se utilicen y asignen adecuadamente.

Nótese cómo una base sólida, bien fundamentada en un lenguaje como C / C ++ nos ayuda a la hora de codificar en MQL5. Lo que estoy mostrando aquí no se ve a menudo en el código MQL5. De hecho, lo que noto es que muchos recurren a construcciones mucho más complejas y laboriosas para lograr lo mismo que estoy haciendo aquí. Y fíjate que al final, sólo he necesitado escribir una única línea de código, concretamente la línea 21.

Ahora, presta atención a esto: en la misma línea 21, que de hecho es la única que se ejecutará, necesitamos hacer una conversión de tipo explícitamente. Esto es necesario para que el compilador lo entienda y, por tanto, genere correctamente el código final. Pero, ¿por qué es importante esta conversión explícita? La razón la tiene el compilador. Para el procesador, importa poco, porque sólo estamos utilizando números y eso es lo que el procesador ve realmente. Para el procesador, los tipos no importan, sólo mira los números. Sin embargo, el segundo argumento de la línea 21, aunque es un valor numérico, no es exactamente lo que espera la función ChartSetInteger. Esta función espera un tipo específico, no un valor numérico. Incluso si el valor representa el tipo esperado, es decir, el valor es exactamente la constante que estamos utilizando, el compilador verá esto como un error. Por tanto, para solucionarlo, forzamos explícitamente la conversión del valor numérico a un tipo esperado mediante la función ChartSetInteger. De esta forma, el compilador entenderá que somos conscientes de los valores que estamos pasando a la función.


Reflexiones sobre Python

Antes de concluir nuestro diálogo, querido lector y aspirante a programador, quiero compartir algunas reflexiones finales, fruto de mi experiencia y conocimientos adquiridos a lo largo de varios años trabajando con diferentes lenguajes de programación. El objetivo es prevenir cualquier frustración futura que puedas tener al intentar realizar ciertas acciones en MetaTrader 5.

Aunque nuestro tema principal es MQL5, hay una pregunta frecuente que muchos se hacen: ¿merece la pena estudiar Python? Especialmente para aquellos que inician sus estudios en programación para el mercado financiero, surge la duda de si profundizar o no sus conocimientos en Python para trabajar con MetaTrader 5. Esta pregunta es válida, ya que aprender Python es considerablemente más sencillo y rápido que pasar por los rigores de estudiar el lenguaje C, luego C++, para finalmente tener una base sólida y consolidada para trabajar profesionalmente con MQL5. Sin embargo, hay que tener en cuenta un matiz, no vaya a ser que uno imagine haber perdido el tiempo estudiando o no haber estudiado Python.

El lenguaje de programación, aunque algunos prefieran relegarlo a un lenguaje de scripting, conocido como Python, no se compara con lo que se puede hacer en MQL5 -quizás por eso algunos no lo consideran un lenguaje de programación, pero no entraremos aquí en ese debate-. Si tu objetivo es aprender y generar código con el fin de probar, verificar y analizar algo puramente matemático, el camino más corto y sencillo es aprender Python. Esto se debe a que puede ejecutar backtests y cosas similares en Python, interactuando directamente con MetaTrader 5, de manera más eficiente que tratar de lograr lo mismo utilizando MQL5.

Puede sonar extraño para algunos, pero con un poco de estudio y mucha dedicación, se puede crear fácilmente un script en Python capaz de hacer lo mismo que un programador con mucha más experiencia y tiempo de programación haría usando MQL5. Muchas veces, ese programador tendría que crear los indicadores, el Expert Advisor, además de configurar el simulador de estrategias para verificar la rentabilidad de un determinado sistema operativo, el llamado SETUP. Por no hablar del riesgo de comprometerlo todo por no configurar bien las cosas.

Algunos pueden pensar que utilizando MetaTrader 5 seguirá teniendo acceso a los gráficos y a una bonita presentación de los resultados, lo que facilitará su análisis. Sin embargo, considera la cantidad de conocimientos que necesitarás para programar todas las funciones necesarias para realizar un simple backtest directamente en MetaTrader 5.

Con el uso de Python, se puede emplear un paquete para acceder a los datos de MetaTrader 5. Combinando toda la funcionalidad de Python, es posible elaborar más fácilmente el mismo tipo de estudio que realizaría un programador de MQL5. Una vez finalizado el estudio, una alternativa es exportar los datos a Excel u otro programa, donde se puede realizar toda la presentación gráfica que se realizaría en MetaTrader 5, facilitando el análisis de los resultados obtenidos.

Aquí conviene aclarar otra cuestión: ¿por qué utilizar Python en lugar de Excel directamente, ya que los resultados se mostrarían en un gráfico en Excel? La razón es sencilla: VBA (Visual Basic for Application) no nos permite acceder directamente a los mismos datos que tendríamos a través de Python, teniendo en cuenta el uso de datos de MetaTrader 5. Para hacerlo en Excel, sería necesario crear una DLL que favoreciera dicho acceso, o exportar numerosos ficheros en formato CSV para obtener los mismos datos.

Una vez que los datos están en Excel, habría el mismo trabajo, o incluso más, para realizar todos los cálculos que se harían en Python. La desventaja es que si decides cambiar la base de datos, tendrías que rehacer todo el trabajo en Excel. Sin embargo, cuando se utiliza Python, todo lo que necesitarás hacer es instruir a Python para cambiar la base de datos, y proporcionará esto directamente en MetaTrader 5, sin ningún esfuerzo adicional de tu parte.

Así que mi sugerencia es tratar de aprender todo lo que puedas, ya que cada herramienta tiene sus ventajas y desventajas. Aunque Python es muy útil, no te permitirá crear un indicador que se muestre en un gráfico, o un Expert Advisor para ayudar al tráding. Esto sólo se puede hacer a través de MQL5. Por lo tanto, no hay una herramienta mejor o peor. Ambas son complementarias y sirven para fines diferentes. Pero en cualquier caso, estudia ambas, porque nunca se sabe cuándo necesitarás usar una u otra.


Conclusión

A pesar de toda la sencillez de la que se ha hablado aquí, es fundamental recordar lo siguiente: acabas de empezar. Evita complicar las cosas al principio. Intenta crear algo que funcione. Aunque parezca completamente inútil a primera vista, empieza con algo sencillo.

Empieza a experimentar las funciones poco a poco. Estudia el lenguaje C/C++, para ampliar tus capacidades para diseñar y desarrollar soluciones en MQL5. Practica siempre, e intenta enfocar las cosas de forma diferente a lo común, porque por muy complejo que parezca, siempre hay una forma de mejorar.

Aprende a simplificar tus propios códigos, ten paciencia y perseverancia. No te rindas sólo porque hayas encontrado un reto un poco más allá de tus conocimientos actuales. En ese momento, estudia más, intenta crear una solución basada en lo que ya sabes. Cuando consigas resolver el problema, busca una solución aún mejor. Al final, tu recompensa será un conocimiento vasto y profundo, una riqueza que nadie podrá arrebatarte. Puedes tomarla prestada, pero nunca robarla.

Sé siempre humilde e intenta compartir tu aprendizaje con los demás. De este modo, no sólo aprenderás cosas nuevas, sino que también mostrarás nuevas posibilidades a quienes se han centrado en otras soluciones. En resumen, eso es todo.


Traducción del portugués realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/pt/articles/12071

Algoritmos de optimización de la población: Algoritmo de búsqueda gravitacional (GSA) Algoritmos de optimización de la población: Algoritmo de búsqueda gravitacional (GSA)
El GSA es un algoritmo de optimización basado en la población e inspirado en la naturaleza no viviente. La simulación de alta fidelidad de la interacción entre los cuerpos físicos, gracias a la ley de la gravedad de Newton presente en el algoritmo, permite observar la mágica danza de los sistemas planetarios y los cúmulos galácticos, capaz de hipnotizar en la animación. Hoy vamos a analizar uno de los algoritmos de optimización más interesantes y originales. Adjuntamos un simulador de movimiento de objetos espaciales.
Alan Andrews y sus métodos de análisis de series temporales Alan Andrews y sus métodos de análisis de series temporales
Alan Andrews es uno de los "educadores" más célebres del mundo moderno en el campo del trading. Su "tridente" está incluido en casi todos los programas modernos de análisis de cotizaciones, pero la mayoría de los tráders no utilizan ni una quinta parte de las posibilidades que ofrece esta herramienta. Y el curso original de Andrews incluye una descripción no solo del tridente (aunque sigue siendo lo esencial), sino también de algunas otras líneas útiles. Este artículo ofrece al lector una idea de las maravillosas técnicas de análisis de gráficos que Andrews enseñó en su curso original. Le advertimos que hay muchas fotos.
Integración de modelos ML con el simulador de estrategias (Parte 3): Gestión de archivos CSV(II) Integración de modelos ML con el simulador de estrategias (Parte 3): Gestión de archivos CSV(II)
Este texto es una guía completa sobre la creación de una clase en MQL5 para la gestión eficaz de archivos CSV. En él comprenderás cómo se lleva a cabo la implementación de métodos de apertura, escritura, lectura y conversión de datos y cómo se pueden emplear para guardar y acceder a la información. Además, trataremos las restricciones y los aspectos cruciales a la hora de utilizar una clase de este tipo. Este es un material valioso para aquellos que deseen aprender a manipular archivos CSV en MQL5.
Medimos la informatividad de los indicadores Medimos la informatividad de los indicadores
El aprendizaje automático se ha convertido en una técnica popular de desarrollo de estrategias. Por lo general, en el trading se presta más atención a la maximización de la rentabilidad y la precisión de los pronósticos. Al mismo tiempo, el procesamiento de los datos utilizados para la construcción de los modelos predictivos permanece en la periferia. En este artículo, analizaremos el uso del concepto de entropía para evaluar la idoneidad de los indicadores en la construcción de modelos predictivos, como se describe en el libro «Testing and Tuning Market Trading Systems» de Timothy Masters.