Tipo complejo

El tipo complex integrado es una estructura con dos campos de tipo double:

struct complex 

   double      real;   // real part 
   double      imag;   // imaginary part 
};

Esta estructura se describe en la sección de conversión de tipos porque «convierte» dos números double en una nueva entidad, de forma similar a como las estructuras se convierten en arrays de bytes y viceversa. Además, sería bastante difícil presentar este tipo sin describir antes las estructuras.

La estructura complex no tiene constructor, por lo que los números complejos deben crearse utilizando una lista de inicialización.

complex c = {reim};

Para los números complejos, actualmente sólo se dispone de operaciones aritméticas y de comparación sencillas: =, +, -, *, /, +=, -=, *=, /=, ==, !=. Más adelante se añadirá ayuda para las funciones matemáticas.

¡Atención! Las variables complejas no se pueden declarar como entradas (utilizando la palabra clave input) para un programa MQL.

El sufijo 'i' se utiliza para describir constantes complejas (partes imaginarias), por ejemplo:

const complex x = 1 - 2i;
const complex y = 0.5i;

En el siguiente ejemplo (script Complex.mq5) se crea un número complejo y se eleva al cuadrado.

input double r = 1;
input double i = 2;
   
complex c = {ri};
   
complex mirror(const complex z)
{
   complex result = {z.imagz.real}; // swap real and imaginary parts
   return result;
}
   
complex square(const complex z

   return (z * z);
}   
   
void OnStart()
{
   Print(c);
   Print(square(c));
   Print(square(mirror(c)));
}

Con los parámetros predeterminados, el script mostrará lo siguiente:

c=(1,2) / ok
square(c)=(-3,4) / ok
square(mirror(c))=(3,4) / ok

Aquí, los pares de números entre paréntesis son la representación de cadena del número complejo.

El tipo complex se puede pasar por valor como parámetro de funciones MQL (a diferencia de las estructuras ordinarias, que se pasan sólo por referencia). Para las funciones importadas de DLL, el tipo complex sólo debe pasarse por referencia.