XTB Microsite
Inicio
Artículos
Descargas
Cotizaciones
Foro
Agenda
Noticias
Links
Boletín
BTS TraderTrader Watch
MQL4 para Novatos I Imprimir E-Mail
por X-Trader   
01/02/2008


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
 
 


 
Añadir a
del.icio.us
digg
Fresqui
menéame
n€góciame
reddit
Technorati