|
Página 3 de 3
Bucles Veamos ahora como crear una estructura de bucle (loop) en MQL. Recordemos que este tipo de estructura puede ser tipo For o While; ésta última la veremos en próximos artículos.
La estructura general de un bucle de tipo For en MQL es la siguiente:
for(Declaración de Contador; Condiciones para el bucle; Incremento del contador) { Código que se ejecutará en el bucle }
Veamos en detalle la estructura anterior: - Declaración del Contador: siempre utilizaremos una variable de tipo int para el contador, que normalmente siempre será inicializada en 0.
- Condiciones para el bucle: aquí indicaremos la condición o condiciones que, en caso de verificarse, permitirán que el bucle continúe ejecutándose; en caso contrario, el bucle finalizará.
- Incremento del contador: aquí indicaremos en qué cantidad se incrementará el contador cada vez que termine un bucle. Normalmente, salvo que sea un caso especial, añadiremos una unidad al contador lo que se consigue añadiendo dos signos positivos (++) detrás del nombre de la variable que actúe como contador.
Seguramente un ejemplo aclare todo esto: supongamos que queremos calcular la media de todos los máximos que hay en el gráfico; lo haríamos del siguiente modo:
//Declaramos una variable para almacenar los máximos y la media
double CumHigh = 0.0; double AveragePrice=0.0;
// Iniciamos el bucle: damos valor inicial 0 a la variable contador a, produciéndose el final del bucle se alcance el // número total de barras que haya en el gráfico (Bars) y sumando una unidad a en cada iteración. // En la variable CumHigh sumamos la barra de a periodos atras.
for(int a = 0; a < Bars; a++) { CumHigh += High[a]; }
// Calculamos la media dividiendo la suma total entre el nº de barras
AveragePrice = CumHigh/Bars;
Condiciones Veamos ahora cómo se construyen condiciones en MQL. Básicamente la estructura es similar a la de otros lenguajes, utilizando la palabra If, por lo que un ejemplo debería ser suficiente para entenderlo:
int a = 10; int b = 0; if(a > 10 ) { b = 1; } else { b = 2; } MessageBox("b=" + b,".");
En el ejemplo anterior, la condición viene entre paréntesis después de la palabra If. Dado que la condición es falsa (ya que a es igual a 10), al final del script, el valor de b será 2 ya que si no se verifica la condición pasamos al valor Else, que es el que nos determina qué sucederá si a es menor o igual a 10.
En MQL podemos utilizar diferentes operadores para realizar comparaciones: == (igual), != (distinto), > (mayor) , < (menor) , >= (mayor o igual) y <= (menor o igual).
Veamos un ejemplo en el que ahora se incluye un bucle dentro de una condición:
int a=0; double b=0.0; bool e; if(a==0) { for(int c=0;c<Bars;c++) { b+=High[c]; } if(b>500.0) { e=true; } else { e=false; } }
El código anterior suma los máximos del gráfico si a es igual a 0; posteriormente si la suma es superior a 500.0 devuelve el valor verdadero mediante la variable e, o falso en caso contrario.
Por supuesto, las condiciones se pueden superponer unas sobre otras como en el siguiente ejemplo:
int a=0; int result; if(a==0) { result=1; } else if(a==1) { result=2; } else if(a==2) { result=3; } else { result=4; }
Las condiciones se pueden complicar aún más introduciendo los valores lógicos && (AND) y || (OR). Por ejemplo:
int a=10; int b=20; if ( ((a>5) || (a<15)) && ( b==20)) MessageBox("Me ha salido bien!","Ejemplo del uso de AND y OR"); En el próximo artículo veremos cómo construir complejas expresiones así como algunas aplicaciones.
(Continuará...)
Un saludo, X-Trader
<< Inicio < Anterior 1 2 3 Siguiente > Final >> |