MT4编程入门教程:循环语句详解
一幅K线图包含成千上万条K线(Bar,根据设定的样本数),每根K线各有开盘价、收盘价、最高价、最低价等数值,同时还有移动平均线、MACD、RSI等技术指标数值。
面对大量数据,我们常通过循环来实现数据的取值和赋值。下面简单介绍MT4中主要的循环语句。
一、while循环
while(判断条件)
{
语句1;
语句2;
。。。;
}
规则:当小括号中的判断条件成立时,就执行大括号中的语句,执行完毕后再判断条件是否成立,如果条件成立就继续执行大括号中的语句。
只要条件成立,程序就不停地执行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环。while循环又称“当循环”,意为当某条件成立时执行循环。
它与if语句的区别是:if语句在条件为真时仅运行一次;而while语句在条件为真时循环体语句会不断运行,直到条件为假。因此,为避免死循环,循环体内应修改判断条件,如进行数值累加。
示例:
extern int fast=12;
extern int slow=26;
double buCXMTradingffered[ ];
int i=0;
while(i<1000)
{
buffered= iMA(NULL,0,fast,0,MODE_EMA,PRICE_CLOSE,i)
-iMA(NULL,0,slow,0,MODE_EMA,PRICE_CLOSE,i);
i++;
}
此例中,循环条件是i<1000,循环体中有两条语句:一条将两条均线的差值赋给数组buffer,另一条“i++;”。“++”是自增运算符,每运行一次,i的值增加1。循环持续运行,i逐渐增大,循环1000次后,i从0变为1000,此时“i<1000”不再成立,循环结束。这样,数组buffered[ ]中存储了1000个值。
二、for循环
for循环与while循环原理上一致,只是书写格式不同。一般for循环多用于已知循环次数的场景,而while循环适合未知循环次数(循环次数可能根据运行结果动态变化)。
例如,将上面的例子改为for循环:
extern int fast=12;
extern int slow=26;
double buffered[ ];
for(int i=0; i<1000; i++)
{
buffered= iMA(NULL,0,fast,0,MODE_EMA,PRICE_CLOSE,i)
-iMA(NULL,0,slow,0,MODE_EMA,PRICE_CLOSE,i);
}
对比前例,我们注意到:
“int i=0;”语句从“while(i<1000)”上方移到了循环条件里面,位于“i<1000”之前;
“i++;”语句从循环体中移到了循环条件里面,位于“i<1000”之后。
执行顺序与while循环相同:
第一步,执行小括号中的第一条语句:int i=0;(此语句定义初始循环变量,在循环中仅执行一次,可为空操作符“;”)
第二步,判断小括号中的第二条语句是否成立:i<1000;若成立,继续循环;若不成立,循环结束。
第三步,按顺序执行大括号中循环体的语句。
第四步,执行小括号中的第三条语句:i++(每次循环后i自增1),之后回到第二步继续。
补充:与if语句类似,若循环体中(大括号内)只有一行语句,大括号可省略,其他操作符同理。
