Notas de lo que Aprendiendo de MQL4

Entradas clasificadas como ‘Variables’

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

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

Variables estaticas, externas y GlobalVariables en MQL4

Junio 14, 2008 · Dejar un comentario

Variables estáticas

Algo muy interesante que me entcontre son las variables estáticas. Tienen la ventaja que no pierden el valor cuando se vuelve a ejecutar la función. No sabia que las variables estáticas tuvieran esa funcionalidad, por lo menos no se si lo tenga flash. Seguramente si, y es que soy muy brutico.
int start()
{
static int Tick;
Tick++;
Comment("Received: tick No ",Tick);
return;
}
Variables externas

Estas variables toca colocarlas en el inicio del programa y fuera de toda función. Tienen la ventaja que se pueden modificar en tiempo de ejecución desde la ventana de opciones del programa.
extern double Level = 1.2500;
extern int n = 5;

GlobalVariables

Estas variables se pueden acceder desde cualquier programa. Ya sea Script Indicador o Asesor experto. Son muy útiles para comunicar a los diferentes programas que se crean.También se pueden crear desde cualquier programa y también eliminar. También se pueden crear desde el terminar MetaTrader con F3.
Estas variables solo pueden tener como valor un double (o numero con decimales)

Estas variables se declaran asi.
datetime GlobalVariableSet( string name, double value)
Esta función sirve para crearla o para colocarle un nuevo valor, y devuelven un valor de tipo datetime para saber en que momento se creo o modifico (creo).

Para acceder al valor de la variable se hace con la función GlobalVariableGet.
double GlobalVariableGet( string name)
Para eliminarla se hace con GlobalVariableDel. Si se eliminina devuelve true, si no, false
bool GlobalVariableDel( string name)

Categorías: Variables

Variables predeterminadas

Junio 14, 2008 · Dejar un comentario

Ask
Precio actual de venta.

Bid
Precio actual de compra.

Bars
Numero de barras en la gráfica

Point
Pip. Ejemplo 1.5413. El Point seria 0.0001.

Digits
Numero de decimales. Ejemplo 1.5413. El Digits seria 4.

Arrays de Velas (Arrays-Timeseries)


Open[*]
Contiene los precios de apertura de las velas.

High[*]
Contiene los precios maximos de las velas.

Low[*]
Contiene los precios minimos de las velas.

Close[*]
Contiene los precios de cierre de las velas.

Volume[*]
Contiene los volúmenes de las velas. ?????.

Time[*]
Contiene los tiempo en que se inicio la vela.

La funcion bool RefreshRates ()

Esta funcion sirve para refrescar o actualizar todas las variables predetermindas, si es que nuestro programa lo necesita. Si hay nuevos datos devuelve true y si no hay devuelve false.

Categorías: Variables

Tipos de Datos

Junio 13, 2008 · Dejar un comentario

int : números enteros

int Art = 10; // Example integer variable
int B_27 = -1; // Example integer variable
int Num = 21; // Example integer variable
int Max = 2147483647; // Example integer variable
int Min = -2147483648; // Example integer variable

double :numeros con fracciones

double Art = 10.123; // Example real variable
double B_27 = -1.0; // Example real variable
double Num = 0.5; // Example real variable
double MMM = -12.07; // Example real variable
double Price_1 = 1.2756; // Example real variable

bool : Boleanos falso o verdadero

bool aa = True; // Boolean variable аа has the value of true
bool B17 = TRUE; // Boolean variable B17 has the value of true
bool Hamma = 1; // Boolean variable Hamma has the value of true

bool Asd = False; // Boolean variable Asd has the value of false
bool Nol = FALSE; // Boolean variable Nol has the value of false
bool Prim = 0; // Boolean variable Prim has the value of false

string : cadena de texto

string Prefix = "MetaTrader 4"; // Example string variable
string Postfix = "_of_my_progr. OK"; // Example string variable
string Name_Mass = "History"; // Example string variable
string text ="Upper Line\nLower Line"; // the text contains line feed characters

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

color Paint_1 = C'128,128,128'; // The value of gray was assigned to the variable
color Colo = C'0x00,0x00,0xFF'; // The value of blue was assigned to the variable
color BMP_4 = C'0xFF,0x33,0x00' // The value of red was assigned to the variable

color K_12 = 0xFF3300; // The value of red was assigned to the variable
color N_3 = 0x008000; // The value of green was assigned to the variable
color Color = 16777215; // The value of white was assigned to the variable
color Alfa = 32768; // The value of green was assigned to the variable

color A = Red; // The value of red was assigned to the variable
color B = Yellow; // The value of yellow was assigned to the variable
color Colorit = Black; // The value of black was assigned to the variable
color B_21 = White; // The value of white was assigned to the variable

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]
// 00:00:00'

Categorías: Variables