Programación de robots de Forex: Cómo crear su propio robot de trading

Este recurso integral le proporciona los conocimientos necesarios para crear su propio robot de Forex. Aprenda los conceptos básicos de la programación de asesores expertos (EA), explore técnicas de codificación y diseñe un asistente de trading personalizado adaptado a sus estrategias.


  • 20 mins read
  • | |
  • Last Updated:
programacion de robots de forex

En este artículo, examinaremos los conceptos básicos de la programación de un robot de trading de forex. Comenzaremos respondiendo a la pregunta “¿Qué tipos de códigos se pueden programar en el lenguaje de programación MQL4/MQL5?”

¿Qué tipos de código se pueden programar en el lenguaje de programación MQL4/MQL5?

Las ilustraciones que se analizarán aquí se basan en el lenguaje de programación MQL4/MQL5. En MQL4/MQL5 se pueden escribir tres tipos de código:

  • Asesores expertos (robots de forex)
  • Indicadores personalizados
  • Scripts

1. El asesor experto (EA)

Esto representa la automatización de un sistema de trading manual que se vincula al gráfico de un activo financiero seleccionado. En otras palabras, cualquier código escrito para un EA debe realizarse teniendo en cuenta el gráfico del activo.

Algunos de estos eventos se ejecutan una vez, mientras que otros se ejecutan varias veces hasta que se les indica que deben detenerse. Por lo tanto, un EA comenzará a funcionar si se activan los eventos que componen la secuencia de código de inicialización (init).

Estos eventos incluyen un nuevo nivel de precio/tick, un evento en los gráficos o eventos personalizados. Una vez que estos eventos se activan, el EA enviará una orden al servidor del bróker para abrir un trade o cerrarlo. Los archivos del EA se almacenan en la carpeta MQL4/Experts del cliente MT4.

2. El Script

Este es un código que se utiliza para ejecutar algunas funciones una sola vez, como el evento de inicio. Los archivos de script se almacenan en la carpeta MQL4/scripts del cliente MT4.

3. El Indicador Personalizado

Este es un indicador técnico personalizado que no figura entre los indicadores nativos de MT4. No se utilizan para realizar trades, sino para identificar eventos vinculados a gráficos que pueden llevar al inicio de una actividad de trades manuales o de EA. Los archivos de indicadores personalizados se almacenan en la carpeta MQL4/indicators del cliente MT4.

¿Cuáles son los componentes de un código MQL4/MQL5?

El código escrito para un robot de trading de forex, indicador o script en el entorno MQL4/MQL5 incluirá sintaxis, variables, expresiones y declaraciones condicionales. A continuación, se muestra un resumen de lo que son.

En el resto de este artículo, solo haremos referencia a MQL4, pero todo lo que digamos también se aplica a MQL5.

A. Sintaxis

La sintaxis de codificación es un conjunto de pautas o reglas que rigen la escritura y la estructura del código dentro de un lenguaje de programación específico. En el mundo de la programación MT4 y MT4, el código para MQL4 tendrá una sintaxis diferente a la de C++, el lenguaje de la plataforma MT5.

La sintaxis determinará la escritura y construcción de elementos del código, como declaraciones de variables, construcción de loops y declaraciones condicionales, y presentación de instrucciones.

Por ejemplo, MQL4 no tiene herencia múltiple ni un operador goto en su sintaxis, pero el lenguaje C++ sí los tiene, además de poseer aritmética de direcciones. También encontrará que elementos como la forma en que se presentan los bloques de código serán diferentes.

Por ejemplo, el lenguaje C++ utiliza llaves para indicar bloques de código, mientras que en el lenguaje de programación Python se utilizan sangrías con el mismo fin. Los loops y las sentencias condicionales también se construyen utilizando distintas palabras clave en distintos lenguajes.

La compilación y ejecución adecuadas del código de un robot de Forex dependen de que el programador escriba una sintaxis libre de errores y apropiada para el lenguaje de codificación que se utiliza para desarrollar el asesor experto, el script o el indicador.

Para ayudar a los programadores en este sentido, algunos entornos de codificación resaltan el código de sintaxis y también proporcionan finalización predictiva para garantizar una representación eficiente y precisa de la sintaxis de codificación.

MQL4 (MetaQuotes Language 4) es un lenguaje de programación utilizado para desarrollar robots de trading e indicadores técnicos en la plataforma MetaTrader 4. La sintaxis de MQL4 es similar a la del lenguaje de programación C. A continuación, se muestran algunas características clave de la sintaxis de MQL4:

  • Comentarios: se proporciona soporte tanto para comentarios de una sola línea (que comienzan con //) como para comentarios de varias líneas (encerrados entre /* y */)
  • Tipos de datos: Se admiten varios tipos de datos, incluidos números enteros, dobles, booleanos, cadenas y matrices.
  • Variables: Las variables de MQL4 se pueden declarar con un tipo de datos específico utilizando la sintaxis tipo variableName;
  • Operadores: admite una variedad de operadores, incluidos operadores aritméticos, lógicos, de bits y de comparación.
  • Declaraciones condicionales: se proporciona soporte en MQL4 para declaraciones condicionales regulares como if, if-else y switch-case
  • Loops: admite los siguientes loops: for, while y do-while. También admite instrucciones break y continue.
  • Funciones: Es posible definir funciones utilizando la sintaxis returnType functionName(arguments) { statement }
  • Funciones predefinidas: MQL4 proporciona una gama de funciones integradas para trabajar con gráficos, indicadores y órdenes, entre otras cosas.
  • Programación orientada a objetos: MQL4 admite conceptos de programación orientada a objetos como clases, objetos y herencia.

Puede ver que el entorno de codificación MQL4 está diseñado para adaptarse a varias características de sintaxis, lo que le brinda al programador un buen entorno en el cual construir robots e indicadores de trading de Forex sólidos.

Comentarios

¿Qué son los comentarios? En MQL4, los programadores añaden notas a las líneas de código para explicar determinadas acciones, funciones o variables del código. Se denominan comentarios y no afectan a la funcionalidad del programa.

Los comentarios arrojan luz sobre el código, lo que facilita que el programador original y los futuros desarrolladores comprendan ciertos elementos del código y expliquen por qué se escribieron ciertas funciones en el código.

En el entorno de programación MQL4 se reconocen dos tipos de comentarios:

  • comentarios de una sola línea
  • Comentarios de varias líneas.

Los comentarios de una sola línea comienzan con dos barras diagonales (//) y continúan hasta el final de la línea de código. Por ejemplo:

Los comentarios de varias líneas comienzan con una barra diagonal y un asterisco (/*) y terminan con el asterisco y una barra diagonal en orden inverso (*/). Los comentarios se agregan entre estos dos símbolos. Por ejemplo

Los comentarios de una sola línea se pueden anidar dentro de los comentarios de varias líneas. Sin embargo, los comentarios de varias líneas no se pueden anidar.

Los comentarios se deben agregar de manera intermitente en todo el código para explicar qué hace o qué pretende lograr cada sección del código. Esto hará que el código sea más fácil de leer y comprender. Los comentarios también dividen el código en secciones, lo que facilita el aislamiento y el trabajo con cada sección.

Identificadores

En MQL4, un identificador es un nombre que se aplica a una constante, variable, función o cualquier otro elemento de programación. Como su nombre lo indica, un identificador hace referencia a cualquiera de estos elementos de programación en la totalidad del código. El uso de identificadores debe seguir algunas reglas, y aquí se encuentran las pautas de MQL4 para nombrar identificadores.

  • Los identificadores deben contener un máximo de 31 caracteres.
  • Ellos solo pueden contener dígitos del 0-9.
  • Deben comenzar con una letra o un guión bajo (_). Los identificadores no pueden comenzar con un dígito.
  • En los identificadores solo se permiten letras, dígitos y guiones bajos. Por extensión, no se permiten caracteres especiales como @, #, $, %, ^, , *.
  • Los identificadores distinguen entre mayúsculas y minúsculas, por lo que solo puede usar minúsculas cuando se requieren caracteres en minúscula y mayúsculas para caracteres en mayúscula.
  • Las palabras reservadas no se pueden utilizar en identificadores. Por lo tanto, las palabras que tienen otros propósitos asignados, como OnStart, Print, if, else, while, for, int, double, string, bool, etc., no se pueden utilizar como identificadores.
  • Los nombres utilizados como identificadores deben mantenerse lo más cortos posible, ya que los nombres largos dificultan la lectura o escritura del código.
  • Los identificadores deben seguir una convención de nomenclatura coherente en todo el código base. Por ejemplo, todas las variables podrían nombrarse con el sistema camelCase, donde la primera palabra está en minúscula y las palabras subsiguientes comienzan con una letra mayúscula (p. ej., myVariableName).

Estas reglas y pautas de identificadores son necesarias para generar código que sea legible y no entre en conflicto con palabras clave reservadas.

B. Variables

Una variable es una ubicación de almacenamiento con nombre que contiene un valor, como un número o una cadena. Las variables son unidades de almacenamiento de información que le permiten almacenar y trabajar con datos dentro de su código MQL. Esto ayuda a agregar flexibilidad a su código y le permite personalizarlo.

Primero, busque el código en la sección Variables. Aquí, puede decidir definir nuevos conjuntos de información para los distintos números enteros de las variables. Una vez que sepa qué información almacena una variable, puede combinar estas variables para obtener nuevos datos.

Las variables se definen utilizando varios tipos de datos (como int para números enteros o double para números de coma flotante), seguidos de un nombre para la variable. Para crear una variable, hay que definir los números enteros del código. Los números enteros son números naturales y, por definición, no tienen puntos decimales.

Por ejemplo, puede ver las variables x, y y z con los números enteros 10, 7 y 5. Puede decidir definir una nueva información para una variable a. Por lo tanto, puede decir que a = y + z. Como los valores de y y z ya se conocen, se deduce que a = 12.

Si define un número entero llamándolo “hi there“, deberá agregar la función “init”

Por ejemplo, para declarar una variable entera llamada “myVar“, utilizaría la siguiente sintaxis:

int myVar

También puedes asignar un valor a una variable en el momento de la declaración. Supongamos que queremos que el valor asignado sea 12. Usaremos la siguiente sintaxis para declarar este valor asignado para la variable entera myVar.

int myVar = 10;

Después de declarar una variable, se puede colocar en el código MQL para que realice diversas funciones o para que cumpla su función normal de almacenar información. Por lo tanto, si desea agregar el código de la definición de la nueva variable a, como una suma de los números enteros y + z, puede ingresarlo en este formato:

int var1 = 10;

int var2 = 7;

Int var3 = 5

int result = var2 + var3; // result = 12

En este caso, ha declarado tres variables enteras, conocidas como var1, var2 y var3 (o x, y y z). Se les han asignado los valores 10, 7 y 5, respectivamente. Solo le interesa sumar var2 y var3 para obtener un nuevo entero para una nueva variable a. Utiliza el signo + como operador y el resultado int es la nueva variable para a. El valor del resultado sería 12, que es el valor obtenido al sumar var2 y var3.

Para el propósito del trading básico, una función práctica para declarar o crear variables es almacenar valores que puedan cambiar con el tiempo, como el precio de un activo. Los precios de las divisas cambian con el tiempo, por lo que puede usar una variable para almacenar y actualizar esta información cada vez que haya un cambio de tick.

doble precio;

precio = SymbolInfoDouble(_Symbol, SYMBOL_BID); // obtener el precio de oferta actual

ol, SYMBOL_BID); // obtener el precio de oferta actual

En un mercado altamente dinámico como el mercado de forex, es necesario incorporar variables en el código de la estrategia de su robot de trading de forex para reflejar este dinamismo y adaptarse a los fundamentos cambiantes del mercado.

Tipos de datos

Las variables funcionan en el código MQL4 en el sentido de que deben declararse de acuerdo con un formato de datos o un tipo de datos. Cada tipo de datos solo puede permitir ciertos valores para una variable declarada. Ya hemos mencionado un tipo de datos que funciona con variables, que es el entero. Los enteros son números enteros, por lo que no pueden almacenar código que defina decimales o letras.

¿Cuáles son los tipos de datos en los que se pueden definir variables? Se identifican seis tipos de datos.

  1. Entero (int): el entero representa cualquier número que va desde -2 mil millones hasta +2 mil millones. Los tipos de datos int no pueden almacenar decimales.
  2. Doble: representa números que van desde -1.79 X 10308 a +1.79 X 10308. Puede almacenar datos con puntos decimales utilizando el tipo de datos doble.
  3. Booleano (Bool): Representa datos que definen verdadero o falso o lógica.
  4. Color: Aquí almacena el color.
  5. Cadena: una cadena es una línea de texto.
  6. DateTime: almacena datos y hora.

Así es como aparecen los diferentes tipos de datos que se utilizan para definir variables cuando se escriben en MQL4.

Quizás hayas notado el uso de algunas palabras como declaración, inicialización, etc. Estas son palabras que se utilizan para describir el inicio y el final de todos los códigos que componen las variables.

Toda variable tiene un principio, un fin y lo que viene en medio. Por ello, se definen cuatro fases del ciclo de vida de las variables:

  • Declaración/creación
  • Asignación de valor (inicialización)
  • Cambio de valor (si es necesario)
  • Destrucción

Entonces, ¿qué sucede durante cada etapa del ciclo de vida de la variable?

Declaración

Para utilizar una variable, primero debe crearla. Esta acción de creación de una variable se denomina declaración. Por lo tanto, verá que los términos “crear” o “declarar” se utilizan indistintamente. Sin embargo, el término más adecuado para la industria es la declaración. Declarar la variable le indica al código que cree la variable asignándole un tipo de datos.

Para declarar una variable,

  • Escribe el tipo de datos, seguido de un espacio.
  • escribe el nombre de la variable.
  • cierra la línea usando un punto y coma (;).

Vea cómo se declara la variable con el tipo de datos entero (int):

  • Aquí, el tipo de datos es int para entero.
  • El nombre de la variable es hi
  • La línea se cierra con punto y coma.

Inicialización

Esta es la siguiente fase del ciclo de vida de la variable y es en este punto en el que se le asigna un valor. Esta es la fase de inicialización.

Para inicializar una variable,

  • Escriba el nombre de la variable y el signo igual (=).
  • Escriba el valor que desea asignar a la variable.
  • cierra la línea usando un punto y coma (;).

En la captura publicada arriba, a la variable entera hi se le asignó un valor de 10. A la variable doble hithere se le asignó un valor de 100.

Declaración con inicialización

Dependiendo del programa y de tu estilo de codificación, puedes elegir inicializar una variable cuando la declaras. Es totalmente aceptable en MQL4, así que siéntete libre de usar este método. Para declarar e inicializar una variable al mismo tiempo, simplemente escribe el tipo de datos seguido de un espacio, el nombre de la variable, un signo igual (=), el valor y un punto y coma (;).

C. Expresiones

Las operaciones guardan similitudes con las operaciones aritméticas, como suma, resta, multiplicación y división. Se las conoce como símbolos de operación u operadores. Cuando se combinan con variables en la misma línea de código, forman expresiones.

Aquí se muestran los símbolos de operación comúnmente utilizados en el código MQL4.

a) Operadores aritméticos: más, menos, porcentaje, división, multiplicación (+ – % / *)

b) Operadores lógicos: ||

c) Operadores de asignación: Igual, más igual y multiplicación igual (= += *=)

Las expresiones con un punto y coma (;) que terminan la línea de código son un operador. Entonces, ¿qué expresiones son valiosas para un programador MQL4?

Los operadores aritméticos se utilizan para realizar cálculos matemáticos con valores numéricos. Así es como se ven los operadores aritméticos.

El operador ++ indica al código que incremente el valor de b en la línea 27 en 1, por lo que si b = 70, el código asignará un valor de 70 + 1 o 71 siempre que aparezca b++. De manera similar, el operador – – indica al código que reduzca el valor de b en la línea 28 en 1, por lo que el código asignará un valor de 69 cuando aparezca bb- -.

He aquí otro ejemplo de la expresión de un operador aritmético:

La ‘#include La directiva ‘ indica al código que habilite el uso de las funciones de la biblioteca Math para que no se produzcan errores al compilar el código. Las funciones de la biblioteca Math que se ven aquí son MathPow() y MathSqrt().

Entonces, ¿qué significa cada uno de los operadores aritméticos?

  • Adición (+): se utiliza para sumar los valores numéricos ubicados a la izquierda y derecha del operador.
  • Sustracción (-): se utiliza para restar el valor numérico del lado derecho del operador del valor numérico del lado izquierdo del operador.
  • Multiplicación (*): se utiliza para multiplicar los valores de los lados izquierdo y derecho del operador.
  • División (/): se utiliza para dividir el valor numérico a la izquierda del operador por el valor numérico al lado derecho del operador.
  • Módulo (%): devuelve el resto de la división del valor a la izquierda del operador por el valor a la derecha.

Así es como se ven en el entorno de codificación MQL4.

10 se puede dividir por 5 exactamente dos veces sin resto, por lo que 10 % 5 será 0 en la línea 23.

Los operadores de asignación se utilizan para dar un valor a una variable. A continuación, se muestra el significado de los distintos operadores de asignación (= += -= *=)

  • Asignación (=): asigna el valor del lado derecho del operador a la variable del lado izquierdo del operador.
  • Asignación de suma (+=): agrega el valor de la derecha del operador al valor de la variable de la izquierda, luego asigna el resultado de esta suma a la variable de la izquierda para darle un nuevo valor.
  • Asignación de resta (-=): resta el valor de la derecha del operador del valor de la variable de la izquierda, luego asigna el resultado de esta resta a la variable de la izquierda para darle un nuevo valor.
  • Asignación de multiplicación (*=): multiplica el valor de la derecha del operador por el valor de la variable del lado izquierdo, luego asigna el resultado de esta multiplicación a la variable del lado izquierdo para darle un nuevo valor.
  • Asignación de división (/=): divide el valor de la variable de la izquierda por el valor del lado derecho del operador, luego asigna el resultado a la variable de la izquierda.
  • Asignación de módulo (%=): calcula el módulo del valor de la variable de la izquierda y el valor de la derecha del operador, y asigna el resultado a la variable de la izquierda.

A continuación se muestran algunos ejemplos de cómo se pueden utilizar los operadores de asignación en MQL4:

D. Operadores condicionales (if/else, switch)

Los operadores condicionales se utilizan para realizar funciones que dependen de que se cumplan los parámetros de otra función. Por lo tanto, un operador condicional nos permite realizar una acción si otra acción es verdadera.

En MT4, los operadores condicionales son las sentencias “if-else” y “switch”. Ambas se utilizan para regular cómo se ejecutan los códigos basados en condiciones.

Declaración if-else

La declaración “if-else” se utiliza normalmente si se deben comprobar varias condiciones en el código.

Si se compila y ejecuta este script, se imprimirá 10 porque la condición es verdadera. Si necesita ejecutar esta condición varias veces en el código, puede cambiar los corchetes por llaves.

En el entorno de los mercados, la declaración if-else se utiliza para determinar cómo el código calcula las variables de precio.

A continuación se muestra un ejemplo de cómo funciona la condición if-else. Aquí, la variable “precio” toma el valor del precio de venta del mercado por defecto. El componente “if” de la instrucción verifica si el precio es mayor que 1.0. Si es así, solo se ejecutará el código dentro de las primeras llaves. Si no es así (es decir, precio o = 1), el único código que se ejecutará será el que se encuentre dentro de las segundas llaves.

//+--------------------------------------------------------+
//| Script program start function                          |
//+--------------------------------------------------------+
void OnStart(){
    double price = Bid;
    if (price > 1.0) {
        // Execute this code if price is greater than 1.0
        Alert("Price is above 1.0");
    }else if (price < 0.5) {
        // Execute this code if price is less than 0.5
        Alert("Price is below 0.5");
    }else {
        // Execute this code if price is between 0.5 and 1.0
        Alert("Price is between 0.5 and 1.0");
    }
}

También puede crear otra declaración “if-else” dentro de una declaración if-else existente, es decir, dentro de las llaves de los bloques “if” o “else” existentes. Esto se denomina declaración if-else anidada. A continuación se muestra un ejemplo:

La declaración if-else anidada le pide al código que verifique si el precio es 0,8 o se encuentra entre 0,8 y el objetivo. Si el precio se encuentra por debajo de 0,8, se ejecuta el código dentro de la declaración if anidada. Si no es así, se ejecutará la declaración else del código anidado.

Los operadores condicionales se pueden implementar en situaciones de trading para manejar órdenes de entrada y salida pendientes. Estas son las órdenes Buy Limit/Sell Limit, las órdenes Buy Stop/Sell Stop y las órdenes Take Profit/Stop Loss. Si te fijas, estas son órdenes que solo se pueden ejecutar si se cumplen ciertos parámetros de precio (una condición). Si las condiciones no se cumplen, no se ejecutan. Así es como se escribiría el código para las condiciones de entrada de trades en el entorno MQL4.

Buy Stop

Para colocar una orden buy-stop en un nivel de precio específico, se puede utilizar el siguiente código: El código le pide al robot de forex trading que haga lo siguiente:

– ejecutar una orden BUY STOP a una distancia de stop de 10 pips del precio actual, con una distancia límite de 20 pips.

– utilice un lote estándar (1,0 lotes) como tamaño de trade.

– aplicar una línea verde al precio de entrada de la orden en el gráfico para una fácil visualización.

– asignar un número identificador único a este trade.

//+------------------------------------------------------------------+
//| Expert tick function                                           |
//+------------------------------------------------------------------+
void OnTick()
{
    //---
    double StopDistance = 10.0;     // Stop distance in pips
    double LimitDistance = 20.0;    // Limit distance in pips
    double Lots = 1.0;              // Lot size
    int Slippage = 3;               // Maximum price deviation
    int MagicNumber = 12345;        // Unique identifier
    color Green = Lime;             // Order line color

    // Get the current ask price
    double price = Ask;

    // Calculate the stop and limit prices
    double stopPrice = NormalizeDouble(price + StopDistance * Point, Digits);
    double limitPrice = NormalizeDouble(price + LimitDistance * Point, Digits);

    // Place the buy stop order
    int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, stopPrice, Slippage, limitPrice, 0, "", MagicNumber, 0, Green);

    if(ticket > 0)
    {
        Print("Buy stop order placed successfully with ticket #", ticket);
    }
    else
    {
        Print("Error placing buy stop order. Error code:", GetLastError());
    }
}

El código define las siguientes variables:

  • StopDistance
  • LimitDistance
  • Lotes
  • Deslizamiento
  • MagicNumber
  • Verde

Una vez que se coloca la orden, el código comprobará que la ejecución se haya realizado correctamente utilizando el valor de retorno (ticket) de la función OrderSend(). Si la orden Buy Stop se ejecuta correctamente, el código imprimirá un mensaje en la pestaña Registro de MT4. De lo contrario, el código imprimirá un mensaje de error con el código de error.

Sell Limit

Para colocar una orden de sell limit a un nivel de precio específico, se puede utilizar el siguiente código:

// Definir parámetros de la ordendouble lotSize = 0.1; // Tamaño del lotedouble limitPrice = 1.2000; // Precio límitedouble stopLoss = 1.2100; // Stop lossdouble takeProfit = 1.1900; // Take profitint slippage = 3; // Desviación máxima en pips respecto del precio solicitado
// Colocar orden de venta límitebool sellLimitOrderPlaced = false;int ticket = 0;while (!sellLimitOrderPlaced) { ticket = OrderSend(Symbol(), OP_SELLLIMIT, lotSize, limitPrice, slippage, stopLoss, takeProfit, “Sell Limit”, MagicNumber, 0, Red); if (ticket > 0) { sellLimitOrderPlaced = true; } else { Print(“La orden de venta limitada falló con el código de error “, GetLastError()); Sleep(5000); // Espere 5 segundos antes de volver a intentarlo }}
// Verificar si la orden aún está abierta mientras (OrderSelect(ticket, SELECT_BY_TICKET)) { if (OrderCloseTime() > 0) { // La orden ha sido cerrada break; } // Espera 1 segundo antes de verificar nuevamente Sleep(1000);}

Stop Loss

Así es como se le pediría al robot de trading de Forex que establezca un stop loss para un trade. Establecer el stop loss puede ser complicado. Algunos programadores querrían que el código establezca el stop loss solo cuando la orden esté activa. En este caso, el código sería para modificar el stop loss.

En este código, se le ha pedido al EA que cree una orden pendiente y luego modifique el stop loss cuando se haya ejecutado la orden.

// Definir parámetros de ordendouble lotSize = 0.1; // Tamaño de lotedouble limitPrice = 1.2000; // Precio límitedouble stopLoss = 1.2100; // Stop lossdouble takeProfit = 1.1900; // Take profit
// Realizar la orden pendienteint ticket = OrderSend(Symbol(), OP_SELLLIMIT, lotSize, limitPrice, 0, stopLoss, takeProfit, “Sell Limit”, MagicNumber, 0, Red);if (ticket <= 0) { Print(“No se pudo realizar la orden pendiente con el código de error “, GetLastError());} else { Print(“Se realizó la orden pendiente con el número de ticket “, ticket);}
// Modificar el stop loss para la orden pendiente if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) { double newStopLoss = 1.2050; // Nuevo valor de stop loss if (!OrderModify(ticket, OrderOpenPrice(), newStopLoss, OrderTakeProfit(), 0, Green)) { Print(“No se pudo establecer el stop loss para la orden pendiente con el código de error “, GetLastError()); } else { Print(“Se estableció el stop loss para la orden pendiente con el número de ticket “, ticket); }} else { Print(“No se pudo seleccionar la orden pendiente con el número de ticket “, ticket, ” con el código de error “, GetLastError());}

Las variables en el código se ven claramente:

  • El tamaño del lote es 1 mini lote (0.1 lotes)
  • El precio límite es 1.2000
  • El stop loss es 1.2100
  • El take profit es 1.1900

El código también ha solicitado imprimir los códigos de error en el diario si no se puede modificar el stop loss. La orden pendiente se coloca utilizando la función OrderSend, utilizando las variables anteriores como parámetros deseados.

Si la orden se ejecuta, el código solicita al robot de forex trading que utilice la función OrderSelect (que contiene el número de ticket para su identificación). La función MODE_TRADES solicita al robot que seleccione las órdenes abiertas y pendientes para esta acción.

También puede utilizar la función OrderModify para cambiar los parámetros de la orden y la función newStopLoss para cambiar el stop loss.

Tenga en cuenta que debe conocer las reglas sobre cuántas veces puede cambiar estos parámetros con su broker cuando configura las variables.

Take Profit

También puede decidir configurar una orden de Take Profit utilizando un código diferente si no la configura junto con la orden de stop loss como se muestra arriba. Puede utilizar el siguiente código:

void OnTick() {// Establecer el nivel de take profit double takeProfit = 1.5; // Nivel de take profit como un múltiplo del precio de apertura de la operacióndouble stopLoss = 1.0; // Nivel de stop loss como un múltiplo del precio de apertura del trade
// Realizar una operación con niveles de take profit y stop lossint ticket = OrderSend(Symbol(), OP_BUY, 1.0, Ask, 3, Bid – stopLoss * Point, Bid + takeProfit * Point, “My Order”, MagicNumber, 0, Blue); }

Este código ha optado por utilizar una configuración de riesgo-recompensa de 1:1.5 para establecer los precios objetivo de stop loss y take profit. Por lo tanto, el precio objetivo aquí es 1.5 veces el precio de entrada. Nuevamente, la función OrderSend coloca el trade y se definen las variables stopLoss y takeProfit.

Switch

Mientras que la instrucción “switch” se utiliza cuando hay varios valores posibles para comparar una variable. A continuación, se muestra un ejemplo de cómo utilizar las instrucciones “if-else” y “switch” en MT4:

precio doble = Bid;int tradeType = 2; // 0 = comprar, 1 = vender, 2 = no hacer nada
// declaración if-else si (precio > 1.0) { tradeType = 0;}de lo contrario si (precio < 0.5) { tradeType = 1;}
// sentencias switch (tradeType) { case 0: // Ejecuta este código si tradeType es 0 (comprar) OrderSend(Symbol(), OP_BUY, 0.1, price, 0, 0, 0, “Orden de compra”, 0, 0, Green); break; case 1: // Ejecuta este código si tradeType es 1 (vender) OrderSend(Symbol(), OP_SELL, 0.1, price, 0, 0, 0, “Orden de venta”, 0, 0, Red); break; default: // Ejecuta este código si tradeType no es 0 o 1 (no hacer nada) break;}

La declaración if/else requiere que el código verifique y ejecute desde el punto de vista del precio.

  • Si el precio > 1.0, la variable tradeType = 0 -> COMPRAR.
  • Si la variable precio 0.5, la variable tradeType = 1 -> VENDER.
  • Si el precio es el precio de oferta actual (configuración predeterminada), tradeType = 2 -> SIN ACCIÓN.

Al utilizar la sentencia switch, las cosas son un poco diferentes. El código se centrará en la variable tradeType.

  • Si tradeType = 0, -> COMPRAR al nivel de precio establecido en el código.
  • Si tradeType = 1, -> VENDER al precio
  • Si tradeType = 2, -> NO HAY ACCIÓN

Siga estas guías para aprender a instalar su robot de Forex en sus terminales de trading:
Cómo instalar un robot de trading de Forex en MT4
Cómo instalar un robot de trading de Forex en MT5

Conclusión

En conclusión, este módulo ha analizado los diferentes tipos de recursos que componen el código típico de un robot de Forex. Se le han mostrado los tipos de código que se pueden realizar en MQL4 (robot de operaciones de Forex, indicadores y scripts) y los diversos formatos de código que forman los componentes del código de un robot de Forex. También hemos analizado las diversas formas de código necesarias para un robot, indicador y script de Forex dentro del entorno MQL4. Ahora debe tener alguna idea sobre los comentarios e identificadores, que son componentes de la sintaxis de codificación.

El contenido principal de este módulo requiere mucho trabajo y práctica para perfeccionarlo. Esperamos que la información aquí presentada le haya ayudado a comprender lo que implica la codificación de un robot de Forex. ¿Quiere saber más? Eche un vistazo a estos cursos completos sobre trading algorítmico

¿Está molesto por la lentitud en la ejecución de transacciones, los cortes de energía y el tiempo de inactividad?

Planes VPS de Forex desde