English Русский Deutsch 日本語 Português
preview
Introducción a MQL5 (Parte 1): Guía del trading algorítmico para principiantes

Introducción a MQL5 (Parte 1): Guía del trading algorítmico para principiantes

MetaTrader 5Probador | 24 mayo 2024, 10:33
397 0
Israel Pelumi Abioye
Israel Pelumi Abioye

Introducción

Si no tiene ninguna experiencia en programación, aprender MQL5 puede ser difícil, pero no imposible. En el mejor de los casos, el aprendizaje de MQL5, diseñado específicamente para el trading algorítmico, requiere conocimientos tanto de programación como de negociación en los mercados financieros. En esta serie de artículos, intentaremos llenar el vacío para las personas sin experiencia en programación que quieren empezar a aprender MQL5. El contenido se adaptará para revelar conceptos de programación y hacer accesible MQL5 a los principiantes.

Empezaremos por lo más básico, partiendo de conceptos básicos de programación como variables, tipos de datos, ciclos y operadores condicionales. Nos familiarizaremos con todos los materiales de la forma más accesible posible. Dicho esto, seguiremos un proceso paso a paso a lo largo de la serie, empezando por las cosas más sencillas y progresando gradualmente hacia las más complejas. Esperamos que este enfoque garantice así una experiencia de aprendizaje fluida.

Asimismo, la formación resulta más eficaz si va acompañada de ejemplos prácticos. Por ello, le ofreceremos ejemplos de la vida real y distintos escenarios para mostrar cómo MQL5 se utiliza en trading algorítmico. Y para que el proceso sea aún más efectivo, le motivaremos con un aprendizaje interactivo, así, animaremos a los lectores a practicar la escritura de código, experimentar con ejemplos y poner en práctica sus conocimientos. En esencia, esta serie de artículos debería permitir a personas sin ninguna experiencia en programación navegar con confianza por el paradigma MQL5 mientras descubren las ventajas del trading algorítmico.

En el presente artículo trataremos los siguientes temas:

  • Introducción a la programación
  • Tipos de programas en MQL5
  • MetaEditor IDE
  • Conceptos básicos de MQL5
Le adelantamos los elementos que estudiaremos en los próximos artículos:
  • Variable predefinida
  • Funciones generales
  • Operadores de flujo de control
  • Arrays y ciclos
  • Creación de asesores
  • Simulador de estrategias

1. Introducción a la programación

¿Alguna vez se ha preguntado cómo se crean sus juegos y aplicaciones favoritos? ¿O cómo se consigue que los personajes de un juego sigan nuestras órdenes? Todo esto es posible gracias a la programación. Es decir, detrás de todo esto existe un código escrito precisamente para hacer posible la comunicación entre humanos y ordenadores.

¿Qué es un lenguaje de programación? La palabra "programación" se refiere al proceso de establecer reglas o instrucciones que deben seguirse para lograr un objetivo específico. La palabra "lenguaje" se refiere a un sistema de comunicación que permite a las personas expresar ideas, emociones y pensamientos. Pero los ordenadores no entienden el lenguaje humano, entonces, ¿cómo comunicamos una serie de instrucciones para alcanzar nuestros objetivos? Aquí es donde los lenguajes de programación vienen al rescate: sirven de intermediario entre las personas y los ordenadores, permitiendo que las personas se comuniquen con el ordenador.

1.1. Tipos de lenguajes de programación

En el mundo existen diferentes lenguas humanas. Del mismo modo, existen diferentes lenguajes de programación, que pueden clasificarse en dos grandes grupos:

  • Lenguaje de programación de alto nivel: son más cercanos al lenguaje humano y fáciles de entender. Algunos ejemplos son MQL4, MQL5, Python y JavaScript.
  • Lenguaje de bajo nivel: son más parecidos al código de máquina y a la gente le resulta más difícil escribirlos y entenderlos. Por ejemplo, tenemos el lenguaje ensamblador, que se encuentra más cerca del hardware del ordenador.

Clasificación de los lenguajes según su finalidad

  • Lenguajes de programación de propósito general: diseñados para cumplir una amplia gama de funciones. Por ejemplo, Python, Java, C++, etc.
  • Lenguajes temáticos: lenguajes especializados en un campo de aplicación concreto. Estos incluyen MQL5, un lenguaje de programación para desarrollar estrategias comerciales.

1.3. Términos importantes en programación

  • Entorno de desarrollo integrado IDE: aplicación de software que ofrece a los programadores amplias capacidades de desarrollo de software. Aquí es donde ocurre todo: la escritura del código, las pruebas, la depuración y el despliegue de nuestro programa. Algunos ejemplos de IDE son Visual Studio, Code::Blocks y MetaEditor 5. En estos artículos trabajaremos precisamente con el MetaEditor 5, el entorno de desarrollo incorporado para escribir programas MQL5.
  • Depurador: herramienta que ayuda a encontrar y corregir los errores en el código permitiendo a los desarrolladores recorrer el código, establecer puntos de interrupción y comprobar variables durante la ejecución.
  • Compilador/Interpretador: muchos IDE disponen de herramientas integradas para compilar y ejecutar código directamente en el entorno. Pueden ejecutar código, comprobar si existen errores y mostrar el resultado.
  • Tipos de datos: categorías de datos que pueden ser manipulados por un lenguaje de programación. Estos tipos son integer (entero), float (números de coma flotante), string (cadenas), bool (booleano). Dedicaremos una sección aparte a los tipos de datos, donde los abordaremos con detalle.
  • Sintaxis: conjunto de reglas que definen las combinaciones de caracteres y palabras en un lenguaje de programación. Cada lenguaje de programación tiene su propia sintaxis.
  • Algoritmo: conjunto de instrucciones bien definidas diseñadas para resolver un problema concreto o realizar una tarea.
  • Función: bloque de código que realiza una tarea determinada. Un bloque de código de este tipo puede reutilizarse, es decir, puede llamarse varias veces en un programa.
  • Biblioteca: colección de código previamente escrito, funciones y procedimientos que pueden utilizarse para realizar tareas específicas. Al usar bibliotecas, el programador no tiene que reinventar la rueda cada vez.
  • Instrucciones: construcciones de tipo if-else o switch-case que permiten a los programas tomar decisiones según determinadas condiciones. Si la condición deseada es verdadera, el ordenador deberá ejecutar el código especificado.
  • Ciclo: estructura que repite un bloque de código hasta que se cumpla una determinada condición. Los tipos de ciclos más comunes son for, while y do-while. Por ejemplo, un ciclo while continuará ejecutando un bloque de código hasta que se cumpla una determinada condición.
  • Variable: contenedor utilizado para almacenar datos. Las variables tienen nombre propio y pueden contener distintos valores que pueden cambiar durante la ejecución de un programa.

Nota: algunos de estos términos se volverán a tratar y se discutirán con más detalle a lo largo de este artículo.


 2. Programas MQL5

MQL5 (MetaQuotes Language 5) es un lenguaje especializado de programación orientada a objetos de alto nivel, similar a C++. En cuanto a su ámbito de aplicación, es un lenguaje orientado a temas concretos que se usa para resolver tareas relacionadas con el trading. MQL5 permite automatizar estrategias comerciales, desarrollar robots de trading y escribir indicadores técnicos.

Por consiguiente, podremos escribir varios tipos de programas en MQL5 para automatizar la negociación, el análisis de mercado y la optimización general del trading. Los principales tipos de programas que encontramos en MQL5 son:

  • Asesores (Expert Advisors, EA): son tipos de programas que se utilizan para automatizar estrategias comerciales. Están diseñados para ejecutar automáticamente transacciones basadas en reglas predeterminadas. Los asesores están vinculados al gráfico y esperan a que se produzca un evento específico. Puede tardar lo que tarde en ejecutarse una orden.
  • Scripts: tienen similitudes y diferencias con los asesores. Los scripts están diseñados para ejecutar el programa una sola vez, inmediatamente después de la activación. En este caso, si se cumplen determinadas condiciones, el programa se ejecutará.
  • Indicadores de usuario: a diferencia de los asesores, los indicadores de usuario no pueden realizar transacciones. Son programas analíticos que pueden indicar que se ha producido un determinado acontecimiento en el mercado, basándose en las reglas que incorporan.
  • Biblioteca: colección de código previamente escrito, funciones y procedimientos que pueden utilizarse para realizar tareas específicas. Al usar bibliotecas, el programador no tiene que reinventar la rueda cada vez.
  • Archivo de inclusión: archivo independiente que contiene el código o las declaraciones que deseamos reutilizar en diferentes partes de nuestro programa. La directiva #include se usa para incluir el contenido de otro archivo en el archivo principal del programa. Los archivos Include suelen usarse para organizar y modular el código, lo cual permite reutilizarlo y mantenerlo.

3. MetaEditor IDE

El MetaEditor es un entorno de desarrollo utilizado para crear programas en MQL5. Un IDE es esencialmente un editor donde podemos escribir, depurar, compilar y probar nuestros códigos. El MetaEditor 5 viene como un paquete estándar con la plataforma MetaTrader 5 y se instalará en su ordenador al instalar la plataforma.

  • Para abrir el MetaEditor, clique en el botón IDE en MetaTrader 5.

    Figura 1. Abrimos el MetaEditor desde el terminal MetaTrader 5

  • La sección "Navegador" (Ctrl+D) muestra todos los tipos de programas MQL5. Los distintos tipos de programas se agrupan en las carpetas correspondientes.

    Figura 2. Sección del navegador

  • MetaEditor ofrece un Wizard (asistente) MQL integrado para que podamos crear cómodamente nuestros propios programas. Para crear nuestro propio programa, pulsaremos el botón "Crear" en el editor (o Ctrl+N en el teclado); esto abrirá el Wizard MQL5. En el asistente, seleccionaremos el tipo de programa deseado y clicaremos en "Siguiente >".

    Figura 3. Selección del tipo de programa a crear

  • Se abrirá una página para indicar los ajustes básicos de nuestro programa. Rellenaremos los campos y pulsaremos el botón "Hecho" en la sección Wizard MQL.

    Figura 4. introducimos la información necesaria

  • ¡Felicidades! Ya ha superado el primer paso y está listo para empezar a escribir su propio código en el editor.

    Figura 5. MetaEditor 5


  • En el editor verá directamente los datos que ha introducido en el paso anterior.

    Figura 6. Detalles

  • OnStart() es una función que se llama en los programas de script. Esta garantiza que los códigos entre llaves {} se ejecuten una vez e inmediatamente después de activar el script.

    Figura 7. OnStart()

  • Vamos a escribir nuestro primer código. Ahora crearemos un script que mostrará la inscripción "Hola MQL5" cuando se active.

    void OnStart()
      {
    
       Alert("Hello MQL5");
    
      }
    
    


Nota: más adelante en el artículo, entraremos en más detalles sobre lo que sucede en este código.


  • El compilador comprobará que el código sea correcto. También podría sugerirle qué corregir o mejorar en el código. Así, tras escribir el código, clicaremos en el botón Compile del compilador. A continuación, comprobaremos los mensajes del compilador: no debería haber errores ni advertencias en ellos.

    Figura 8. Compilador


Si hay errores en el código, este no se ejecutará hasta que introduzcamos las correcciones necesarias. En cuanto a las advertencias, el código puede trabajar con ellas, pero es mejor arreglarlas para evitar posibles problemas en el futuro.

  • Pulse el botón verde de reproducción para poner a prueba el programa.

    Figura 9. Prueba del código


  • El programa compilado se iniciará directamente en la plataforma MetaTrader 5.

    Figura 10. Iniciamos el programa en MetaTrader 5 Iniciamos el programa en MetaTrader 5


Así que estos han sido nuestros pequeños pero tan importantes primeros pasos en la comprensión de los fundamentos de la programación y el entorno MetaEditor. Hemos sentado las bases para entender MQL5 y nos hemos familiarizado con MetaEditor: el entorno de escritura de código. MetaEditor no es solo una herramienta, sino también una oportunidad de transformar nuestras ideas en estrategias procesables. Ahora vamos a profundizar un poco más en los detalles de la programación en MQL5. El viaje hacia el trading algorítmico no ha hecho más que comenzar.

4. Conceptos básicos de MQL5

Antes de comenzar a desarrollar programas en MQL5, deberemos entender algunos puntos básicos que componen un programa. Analizaremos los conceptos básicos: los tipos de datos, las funciones, las variables, los comentarios y la sintaxis MQL5.

4.1. Sintaxis

La sintaxis es un conjunto de reglas que definen cómo deben estructurarse los programas escritos en un lenguaje concreto. Sería como la gramática de un idioma. Las lenguas humanas tienen reglas para formar frases, mientras que los lenguajes de programación tienen reglas para crear código válido y comprensible.

Aspectos clave de la sintaxis:

4.1.1. Cierre de operadores

Los operadores en MQL5 suelen terminar con punto y coma (";"). Este signo indica al compilador que una instrucción ha terminado y comienza la siguiente.

Ejemplo

void OnStart()
  {

   Alert("Hello MQL5");  // the semicolon means the end of the code line

  }

4.1.2. Comentario

Los comentarios en MQL5, como en otros lenguajes de programación, añaden explicaciones y documentan nuestro código. Normalmente a las líneas de código se les añade un comentario para que, si consultamos la línea en algún momento en el futuro, nos resulte más fácil comprender el propósito de ese código. A continuación le mostramos ejemplos de cómo se utilizan los comentarios en diferentes escenarios:

Comentarios de una línea. Los comentarios de una línea van precedidos del carácter "//". Se usan para explicaciones breves.

Ejemplos:

void OnStart()
  {

   Print("Hello MQL5");   // This line of code will print “Hello MQL5” when run

  }

Nota: el compilador ignora por completo todo lo escrito después de //

Comentarios multilínea

Los comentarios multilínea empiezan por /* y terminan por */ . Resultan adecuados para explicaciones más extensas. Estos comentarios pueden ser de utilidad para registrar planes o instrucciones paso a paso a la hora de desarrollar un programa.

Ejemplo

void OnStart()
  {

   /* In many programming languages, including MQL5,
    a semicolon “;” is used to indicate the end of a statement.
   It is a crucial element for the compiler to understand the structure of the program.
   */
   
  }

El compilador ignorará completamente todo lo que haya entre /* y */.

Los comentarios ayudan a que el código sea legible y comprensible. Nos ayudan a entenderlo, no solo a nosotros, sino a cualquiera que pueda estar leyendo nuestro código o trabajando con él. Usaremos generosamente los comentarios para facilitar la comprensión de nuestros programas.


4.1.3. Identificadores

En programación, un identificador es un nombre asignado a una variable, función o cualquier otro elemento de código definido por el usuario. Los identificadores garantizan la legibilidad y comprensión del código. Qué debemos saber sobre los identificadores en MQL5:

Normas de denominación

Los identificadores deberán ajustarse a determinadas convenciones de nomenclatura. Deberán empezar por una letra (A-Z o a-z) y podrán ir seguidas de letras, números (0-9) o guiones bajos (_).

Registro

En MQL5, a la hora de poner nombres, se tienen en cuenta las mayúsculas y minúsculas, es decir, las mayúsculas y minúsculas son diferentes. Por lo tanto, miVariable y MiVariable se considerarán identificadores diferentes.

Ejemplo

int myage = 25; 
int MyAge = 25;  // myage is a different identifier from MyAge.


Nombres significativos

Seleccionaremos nombres significativos y descriptivos para los identificadores. Esto mejorará la legibilidad del código y ayudará a otros (o a nosotros en el futuro) a entender el propósito de las variables o funciones.

Palabras reservadas

No utilizaremos palabras reservadas como identificadores. Las palabras reservadas son palabras que tienen un significado especial en un lenguaje de programación y no pueden usarse para otros fines. Por ejemplo, son Alert, Print y Comment. Obtener más información sobre las palabras reservadas en la documentación.

Ejemplo

    int Age = 25;      
    Print(Age);   
    /*
    Int is the data type is an integer because 25 is a whole number.
    Age is the identifier
    Print is a reserved word in MQL5 and it serves a special function. This means it can't be used as an identifier
    */


4.2. Tipos de datos básicos

Los tipos de datos en programación funcionan como contenedores con información de distinto tipo. Imagine que tiene cajas para guardar cosas. Algunas pueden almacenar números, otras palabras y otras cosas más complejas. Por ejemplo:

Integer (int)

Este tipo puede considerarse como una caja que solo guarda números enteros. Este tipo puede guardar números como 1, 5 o 10, pero no números decimales.

Ejemplo

int myInteger = 10;

Doble

Este tipo representa números con punto decimal.

Ejemplo

double myDouble = 3.14;

Character

En MQL5, un símbolo es un tipo de dato usado para representar un único carácter, como una letra, un número o un símbolo. Se denota con la palabra clave char.

Ejemplo

 // Declaring a character variable 
      char myChar = 'A';

 // Printing the character to the console 
      Print(myChar);

Tipo string

String — cadena o línea, es una secuencia de caracteres, normalmente utilizada para el texto.

Ejemplo

string myString = "Hello, MQL5!";

Alert(myString);

Tipo Bool (lógico)

Los tipos lógicos representan valores verdaderos o falsos.

Ejemplo

bool iam25 = true;

Arrays

Los arrays en MQL5 permiten almacenar varios valores del mismo tipo de datos bajo un nombre de variable, y supone una forma muy cómoda de trabajar con colecciones de datos. Principales aspectos del trabajo con arrays en MQL5:

1. Declaración de un array: se declara especificando su tipo de datos y su nombre, seguido de corchetes "[]" para denotar el array.

Ejemplo

Integer array declaration

int numbers[5];


2. Inicialización: podemos inicializar un array en el momento de la declaración ofreciendo una lista de valores encerrados entre llaves '{}'.

Ejemplo

// Initializing an integer array

   int numbers[] = {1, 2, 3, 4, 5};




3. Accedemos a los elementos de un array según su índice, empezando por 0. Por ejemplo, en el array numbers, el primer elemento será numbers[0]. Un array en MQL5 se puede usar, por ejemplo, para obtener los precios de cierre y apertura.

Ejemplo

// Accessing elements of an array

   int firstNumber = numbers[0];  // Accesses the first element


Aquí presentamos solo algunos de los tipos de datos posibles. Solo abarcaremos lo básico para presentarle los conceptos subyacentes con ejemplos claros, sin entrar todavía en los detalles más sutiles y complejos.


Conclusión

Bien, en este artículo hemos dado los primeros pasos en la comprensión de los fundamentos de la programación MQL5. Hemos comenzado con una introducción general a la programación, pasando a los tipos de programas MQL5 y familiarizándonos con el IDE MetaEditor, en el que seguiremos creando algoritmos comerciales. Todos estos conocimientos básicos deben servir como base para seguir estudiando y crear programas más complejos. No olvide que esto es solo el principio y que, a medida que avancemos, se irán revelando las posibilidades de la programación en MQL5. ¡Siga los artículos y aprenda a crear estrategias comerciales fiables y eficaces en MQL5!



Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/13738

Redes neuronales: así de sencillo (Parte 66): Problemática de la exploración en el entrenamiento offline Redes neuronales: así de sencillo (Parte 66): Problemática de la exploración en el entrenamiento offline
El entrenamiento offline del modelo se realiza sobre los datos de una muestra de entrenamiento previamente preparada. Esto nos ofrecerá una serie de ventajas, pero la información sobre el entorno estará muy comprimida con respecto al tamaño de la muestra de entrenamiento, lo que, a su vez, limitará el alcance del estudio. En este artículo, querríamos familiarizarnos con un método que permite llenar la muestra de entrenamiento con los datos más diversos posibles.
Python, ONNX y MetaTrader 5: Creamos un modelo RandomForest con preprocesamiento de datos RobustScaler y PolynomialFeatures Python, ONNX y MetaTrader 5: Creamos un modelo RandomForest con preprocesamiento de datos RobustScaler y PolynomialFeatures
En este artículo, crearemos un modelo de bosque aleatorio en Python, entrenaremos el modelo y lo guardaremos como un pipeline ONNX con preprocesamiento de datos. Además, usaremos el modelo en el terminal MetaTrader 5.
Algoritmos de optimización de la población: Método de Nelder-Mead Algoritmos de optimización de la población: Método de Nelder-Mead
En el artículo de hoy, le presentamos un estudio completo del método de Nelder-Mead, en el que se explica cómo el símplex (el espacio de parámetros de la función) se modifica y reordena en cada iteración para alcanzar la solución óptima; asimismo, describiremos una forma de mejorar este método.
Aprendiendo MQL5 de principiante a profesional (Parte I): Comenzamos a programar Aprendiendo MQL5 de principiante a profesional (Parte I): Comenzamos a programar
Este artículo supone la introducción a toda una serie de artículos sobre programación. Partimos del supuesto de que el lector no se ha enfrentado nunca a la programación. Así que empezaremos por lo básico. Nivel de conocimientos de programación: principiante absoluto.