Notas de lo que Aprendiendo de MQL4

Entradas clasificadas como ‘General’

Arrays en MQL4

Octubre 18, 2008 · Dejar un comentario

Los Arrays son un conjunto organizado de valores de un tipo de dato que tienen un nombre en común. Las matrices pueden ser una solo dimensión o multidimensionales.  La cantidad máxima de dimensiones de una matriz es de cuatro. Las matrices pueden ser de cualquier tipo de dato, pero solo pueden ser de un tipo de dato. Si el Array es de números, esta matriz no puede tener variables que no sean números.
La forma en que MQL4 maneja las Arrays es muy parecida a los demás lenguajes de programación, sin embargo MQL4 tiene unas particularidades.
Antes de poder utilizar un Array esta tiene que ser declarada. Las GlobalsVariables no pueden ser Arrays.
Una declaracion tipica de un array puede ser:

int miArray[10];

Con el int estamos indicando que todos los valores que contendrá esta array serán de tipo int o enteros. Ahora viene lo diferente que tiene MQL4.  En otros lenguajes cuando decimos [10]; estamos haciendo referencia al indice 10 en el array. Pero en MQL4 lo que decimos es que nuestra array va tener un espacio para 10 elementos.  Esto es cuando se inicializa el array. Ejemplos:

bool Mas_b [ 5 ] = { false , true , false , true , true };
string Mas_s[4] = {“a”,”b”, ,”d”};
int Mas_i[6] = { 0,1,2, ,4,5 };

Para explicar mas ampliamente los array voy a copiar la explicación que hace X-Trader de x-trader.net

/////////////////////////////////////////////////

Vectores (Arrays)
Pasamos a ver cómo se declaran vectores en MQL. El esquema para ello es el siguiente:

(Tipo de array) (Nombre del array) [Nº de elementos];

Por ejemplo, la sentencia:

double price[5];

nos creará un vector de 5 elementos de tipo Double.

¿Cómo podemos hacer referencia a cada uno de los componentes del array y darles un valor? Muy fácil: una vez hemos declarado el array “price” del ejemplo anterior, podemos dar un valor a su primer elemento de la siguiente forma:

price[0] = 1.2341;

Obsérvese que los índices de los arrays empiezan en 0, de tal forma que dicho valor se corresponde con el primer elemento del array. Del mismo price[1] = 1.2321; nos asignaría un valor al segundo elemento del array y así sucesivamente.

Por supuesto, podemos declarar un array asignándole valores iniciales:

double price[2] = {1.2234, 1.2421};

Aunque también es posible no especificar el número de elementos y dejar que Metatrader lo determine:

double price[] = {1.2234, 1.2421};

Asimismo, con los arrays también podemos realizar las mismas operaciones que hacíamos con las variables como se muestra en los siguientes ejemplos:

double price[2];
price[0] = 1.2234;  
price[1] = 1.2421;    
MessageBox(“El precio medios es ” + (price[0] + price[1]) / 2.0,”Precio medio”);

/////////////////////////////////////////////////

También voy a copiar algo muy interesante que encontré en init.tler.com.ar.

/////////////////////////////////////////////////

#define
La directiva de precompilador #define sirve para “definir” (valga la redundancia) constantes.

“Ohhh! And so?” Es cierto, si esa fuera la definición final seria aburrido inclusive el uso de esta directiva y ni me gasto en aprenderla… total, tengo variables que no modifico y listo…

Esto es particularmente util en el siguiente caso:

int length = 10;
string array[length]; // ESTO ES TOTALMENTE INVALIDO!
string array2[10]; //Valido pero poco practico.

Nosotros queremos definir un array. Es muy común esto. Luego lo recorreremos y tendremos que buscar de 0 a length -1. Si nosotros usamos el valor 10 en todo nuestro codigo para designar la longitud de nuestro array y luego necesitamos redimensionarlo (por un motivo que ahora no viene al caso), tendriamos que modificar todo nuestro codigo.

En cambio, si definimos una constante para crear el array y usamos su valor para recorrerlo solo bastará modificar la definición de la constante en caso de ser necesario.

Por otro lado, podemos insistir con la idea de que podemos usar una variable a la cual le asignamos el tamaño y listo. Pues no.

Cuando el compilador lee algo como lo siguiente:

#define LENGTH 10
int vector[LENGTH];

for (int i = 0; i < LENGTH; i++) {…}

Lo que hace es reemplazar el valor de LENGTH en cada aparicion de LENGTH. Por lo que el codigo quedaria de la siguiente manera:

/*#define LENGTH 10 */

int vector[10];


for (int i = 0; i < 10; i++) {…}

Por supuesto esto nunca lo veremos, pero nos da un codigo fuente mucho mas legible, prolijo y además nuestro programa será mas optimo ya que tendremos menos acceso a variables, menor consumo de memoria y un script mucho mas rapido.

Cuando definimos constantes, podemos definir cualquier valor constante que querramos incluyendo strings, boleanos, etc.

Categorías: Arrays · General · Variables

Estructura del switch en MQL4

Octubre 18, 2008 · Dejar un comentario

La estructura del switch es la siguiente.

switch(numeroCualquiera)
{
     case 1:
          Alert(”El numero es 1″);
          break;
     case 2:
          Alert(“El numero es 2″);
          break;
     case 3:
          Alert(“El numero es 3″);
          break;
     default:
          Alert(“No hay numero”);
}

Categorías: General

break y continue MQL4

Octubre 18, 2008 · Dejar un comentario

Al igual que los otros lenguajes de programación, MQL4 también cuenta con las sentencias break y continue. break corta el bucle, y continue hace que se salte la iteracion actual del bucle.
   break;
   continue;

Categorías: General

Esctructura bucle for en MQL4

Octubre 18, 2008 · Dejar un comentario

bucle for. Es lo mismo que en los demás lenguajes. 
for(i=Nom_1; i<=Nom_2; i++)   
{                                 
      Sum=Sum + i;                      
      Alert("i=",i,"  Sum=",Sum);     

Categorías: General

Estructura de una funcion

Octubre 17, 2008 · Dejar un comentario

Categorías: Funciones · General

Funciones especiales, estándar y definidas por el usuario

Octubre 17, 2008 · Dejar un comentario

En MQL4 hay 3 tipos de funciones.

Especiales

Son las
3 funciones principales de MQL4, que ya hemos explicado. init(); start(); y deinit

Estándar

Son
funciones incorporadas en MQL4 como Alert(); para mostrar un alerta,
MathSqrt(); para calcular la hipotenusa y así muchas mas.

Definidas por el usuario

Son las
funciones normales que programamos nosotros.

Categorías: Funciones · General

Operadores en MQL4

Octubre 9, 2008 · Dejar un comentario

Operaciones de la asignación

Los símbolos siguientes pertenecen a los símbolos de las operaciones de asignación:

Símbolo

Operación Ejemplo Análogo
= Asignación del valor x a la y variable у = x
+= Aumento de la y variable por x у += x y = y + x
- = Reducción de la y variable por x y – = x y = y – x
*= Multiplicación de la y variable por x *= x de y y = y * x
/= División de la y variable por x y/= x y = y/x
%= Residuo de división de la y variable por x y %= x y = % de y x

Operaciones de comparación

Los siguientes símbolos sirven para hacer condicionales en los if

Símbolo Operación Ejemplo
== Verdad, si x es igual a y x == y
¡! = Verdad, si x no es igual a y ¡x! = y
< Verdad, si x es menos que y x < y
> Verdad, si x es más que y x > y
<= Verdad, si x es igual o menos que a y x <= y
>= Verdad, si x es igual o más que a y x >= y

Operaciones (lógicas) boleanas

Los símbolos siguientes pertenecen a los símbolos de las operaciones boleanas:

Símbolo Operación Ejemplo Explicaciones
¡! NO (negación lógica) ¡! х VERDAD (1), si el valor del operando es FALSO (0); FALSO (0), si el valor del operando no es FALSO (0).
|| O (separación lógica) x < 5 || x > 7 VERDAD (1), si algún valor de los valores es verdad
&& Y (conjunción lógica) x && del == 3 y < 5 VERDAD (1), si todos los valores son verdades

Categorías: General

Orden de las operaciones matematicas en MQL4

Octubre 9, 2008 · Dejar un comentario

Las operaciones se realizan de izquierda a derecha. Ejemplos
Y = 2.0*( 3*X/Z - N) + D;
La expresión anterior tiene dos partes
2.0* (3*X/Z - N) y D
A su vez
2.0* (3*X/Z - N)
tiene dos partes,
2 y (3*X/Z - N)
La expresión entre paréntesis,
3*X / Z - N
consiste en dos operaciones,
3*X/Z
que consiste en tres factores, a saber:
3, X y Z.
Para calcular la expresión, primero calculamos el valor de la expresión
3*X/Z
Esta expresión contiene dos operaciones (multiplicación y división),  así que calcularemos esta expresión de izquierda a derecha. Primero, calcularemos el valor de la expresión
3*X
Entonces calcularemos el valor de la expresión
3*X/Z
Después de eso, el programa calculará el valor de la expresión
3*X/Z - N
y luego de la expresión
2.0* (3*X/Z - N)
y por último la expresión entera
2.0* (3*X/Z - N) + D.

Veamos otro ejemplo para aclarar mejor la cómo funciona el orden de las operaciones.  

Ejemplo:
Calculemos la expresión
А/В*С y А*С/В
para los números enteros А, В, y С.

El resultado del cálculo se espera que intuitivamente sea el mismo en ambos casos. Sin embargo, esta afirmación es cierta sólo para números reales. Pero si hacemos estas mismas operaciones con números enteros o int, debemos considerar un resultado intermedio. En tal caso, el orden de las operaciones es de vital importancia.
int A = 3; // Tipo de dato entero o int
int B = 5; // Tipo de dato entero o int
int C = 6; // Tipo de dato entero o int
int Res_1 = A/B*C; // Resultado 0
int Res_2 = A*C/B; // Resultado
Primero  vamos a calcular A/B*C.
1.  Primero se calcula (de izquierda a derecha) la expresión A/B.  Si A = 3 y B = 5 entonses A/B quedaría 3/5 = 0.
2. Luego calculamos la expresión 0*С (cero multiplicado por С). El resultado es el número entero 0 (cero).
Ahora sigamos y calculemos la expresión A*C/B.
1. Primero calculamos A*C. El valor de esta expresión es el número entero 18 (3*6=18).
2. Luego calculamos la expresión 18/B. La respuesta es obvia: después de que se haya desechado la parte fraccionaria, (18/5) = 3 (tres).

Categorías: General

Tipos de Datos en MQL4

Octubre 9, 2008 · Dejar un comentario

En la vida normal pensamos que solo las cosas comunes se pueden sumar o restar.  Por ejemplo, uno puede sumar a unas manzanas más manzanas,  pero uno no puede sumarle a unas manzanas por ejemplo metros cuadrados o grados centígrados.
Pasa igual con las variables y las constantes. El valor de las variables y las constantes tienen que tener un tipo de dato. Por ejemplo la edad de Pedro es un numero, 12. El nombre de Pedro es una cadena de texto, “Pedro”. El color de los ojos de Pedro es un color, Café.
En MQL4 hay 6 tipos de datos:

  • int: Son números enteros como 1, 4, 1600. Ocupan menos memoria que los números reales o doublé.
  • double:  Son números reales como  1,32 o 4,54. Sirve para representar fracciones.
  • bool: Booleanos o verdadero y falso. Sirven para representar algo muy parecido a un encendedor de luz. Solo puede tener dos valores, prendido o apagado. Asi mismo los bool solo pueden tener el valor true o false.
  • string : Sirven para representar los textos. Y siempre tienen que estar entre comillas.
  • color: Sirven para representar con un numero un color.
  • datetime: Sirven para representar fechas.

Ejemplos de tipos de datos:

int: números enteros

int Art = 10;
int B_27 = -1;
int Num = 21;
int Max = 2147483647;
int Min = -2147483648;

double: números con fracciones

double Art = 10.123;
double B_27 = -1.0;
double Num = 0.5;
double MMM = -12.07;
double Price_1 = 1.2756;

bool : Boleanos falso o verdadero

bool operando = True;
bool dia = TRUE;
bool noche = 1;
 
bool Asd = False;
bool Nol = FALSE;
bool Prim = 0;

string : cadena de texto

string nombre= "MetaTrader 4";
string mensaje = "_of_my_progr. OK";
string titulo = "Entrar Largo";
string texto ="Upper Line\nLower Line";

color : para mostrar colores. Hay tres tipos de formas de representar colores

color Paint_1 = C'128,128,128';       // Gris
color Colo    = C'0x00,0x00,0xFF';    // Azul
color BMP_4   = C'0xFF,0x33,0x00'     // Rojo
 
color K_12  = 0xFF3300;               // Rojo
color N_3   = 0x008000;               // Verde
color Color = 16777215;               // Blanco
color Alfa  = 32768;                  // Verde
 
color A       = Red;                  // Rojo
color B       = Yellow;               // Amarillo
color Colorit = Black;                // Negro
color B_21    = White;                // Blanco

datetime : tipo de dato para mostrar fecha

datetime Alfa = D'2004.01.01 00:00'; // New Year
datetime Tim = D'01.01.2004'; // New Year
datetime Tims = D'2005.05.12 16:30:45'; // May 12, 2005 4:30:45 p.m.
datetime N_3 = D'12.05.2005 16:30:45'; // May 12, 2005 4:30:45 p.m.
datetime Compile = D''; // equivalent of D'[compilation date]

Categorías: General · Variables

Variables y Constantes en MQL4

Octubre 9, 2008 · Dejar un comentario

Constantes
Las constantes son datos que no cambian. Por ejemplo los números. 3 o 7 son constantes en si mismas por que el valor de 3 y 7 no pueden cambiar. Siempre 3 valdrá 3 y 7 valdrá 7.  Las cadenas de texto también son constantes. Un nombre como “Pedro” no puede cambiar sin dejar de ser “Pedro”.
La característica más importante de las constantes es que su valor no cambia. El valor de una constante no puede ser cambiado por el programa ni por el usuario.

Variables
Las variables son lo contrario a las constantes. Su dato puede cambiar. Por ejemplo la edad de “Pedro” variara cada año. Esto quiere decir que la edad de “Pedro” es una variable. Y al igual que en el ejemplo anterior, las variables tienen que tener un identificador. En el caso anterior seria “edad”. Esta es la forma a la que podemos acceder a el valor de la variable.
Esto quiere decir que las variables están compuestas de dos partes. El valor de la variable y el nombre de la variable.  “Edad de Pedro” = nombre de la variable. “12 años”  = a valor de la variable.

Nombres de variables y constantes

Los nombres de las variables en MQL4 distinguen entre minúsculas y mayúsculas. No es lo mismo MiNumero que minumero o que miNumero.
Los nombres de las variables solo pueden tener letras o números y el símbolo _ No pueden tener símbolos extraños como  ¿ & $ # o demás símbolos que no sea _
También los  nombres de las variables solo pueden empezar con una letra. No pueden empezar con números o _
La propiedad más importante de una variable es el poder tener un nombre y que este se puede cambiar en el trascurso del programa.

Categorías: General · Variables