MT4指标编程入门:循环语句详解

MT4指标编程入门:循环语句的用法

MT4指标编程入门(八):循环

一幅K线图可能包含成千上万条K线,每根K线都拥有开盘价、收盘价、最高价和最低价等数据,同时还有多种技术指标值,如移动平均线、MACD、RSI等。

面对如此庞大的数据量,我们需要借助循环结构来实现数据的提取与赋值。

while循环

while(条件)

{

语句1

语句2

...

}

规则:当小括号中的条件成立时,就执行大括号中的语句,执行完后再判断条件是否仍然成立,如果成立则继续执行大括号中的语句。

只要条件成立,程序就会不断运行大括号中的语句(即循环体),直到条件不再成立时结束循环。

它与if语句的区别在于:if语句仅在条件为真时执行一次;而while语句则只要条件为真,循环体就会反复执行,直到条件为假才停止。

示例:

externint快线=12;

externint慢线=26;

doublebuffer[];

inti=0;

while(i<1000)

{

buffer=iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);

i++;

}

这里,循环执行的条件是i<1000,循环体包含两条语句:一条是将两条均线的差值赋给数组buffer,另一条是“i++;”,每次运行后i的值增加1。随着循环的进行,i的值逐渐增大,循环1000次后,i从0变为1000,此时条件“i<1000”不再成立,循环结束。这样一来,数组buffer[]中便存储了1000个数值。

for循环

for循环与while循环在原理上相同,仅在书写格式上有所区别。

将上面的示例改写为for语句:

externint快线=12;

externint慢线=26;

doublebuffer[];

for(inti=0;i<1000;i++)

{

buffer=iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);

}

对比后可以发现:

“inti=0;”语句被移到循环条件“i<1000”之前;

“i++;”语句则从循环体移到循环条件之后;

执行顺序与while循环一致:

第一步:先执行小括号中的第一条语句“inti=0;”(此语句用于初始化变量,在整个循环中仅执行一次,也可以为空语句“;”)。

第二步:判断小括号中的第二条语句“i<1000;”是否成立;若不成立则结束循环,若成立则继续执行第三步。

第三步:依次执行大括号中的语句。

第四步:执行小括号中的第三条语句“i++”(即每次执行后i的值增加1)。

然后回到第二步继续循环。

补充说明:如果循环体中(即大括号内)仅包含一条语句,那么大括号可以省略不写。