
一幅K线图有几千上万条K线(Bar,依据设定的样本数),每根K线Bar又各有开收盘价、收盘价、最高低价等数值,而且仍有很多移动平均线、MACD、RSI等技术指标数值。
面对大批的报告,我们经常采取循环来达到报告的取值和赋值。下面我们简单来介绍一下MT4中首要用到的循环语句。
一、while循环
while(分析条件)
{
语句1;
语句2;
。;
}
规则:当小括号中的分析条件成立时,就实施大括号中的语句,实施完毕后再分析条件能否成立,假使条件成立就再继续实施大括号中的语句。
只要条件成立,程序就不停地实施大括号中的语句(循环体),直到小括号中的条件不再成立时终结循环,while循环又叫做“当循环”,意思为当XX条件时实施循环。
它与if语句的区别是:if语句是当条件为真时只运行一次;而while语句则是只要条件为真,循环体语句就持续地运行,直到条件为假时终结循环。所以为了避免产生死循环,循环体内应该对分析的条件执行修改,如执行数值的累加等。
例:
extern int fast=12;
extern int slow=26;
double buffered[ ];
int i=0;
while(i<1000)
{
uffered= iMA(NULL,0,fast,0,MODE_EMA,PR洲际交易所_CLOSE,i)
-iMA(NULL,0slow,0,MODE_EMA,PR洲际交易所_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++)
{
uffered= iMA(NULL,0,fast,0,MODE_EMA,PR洲际交易所_CLOSE,i)
-iMA(NULL,0,slow,0,MODE_EMA,PR洲际交易所_CLOSE,i);
}
与前面对比比,我们注意到:
“int i=0;”语句从“while(i<1000)”循环体上方移到循环条件里面、“i<1000”的前面;
“i++;”语句从循环体中移到了循环条件里面、“i<1000”的后面。
循环实施顺序与while循环是统一的:
第一步、先实施小括号中的第1句:int i=0;
(此语句用来定义初始循环变量,在循环中仅实施一次,可以为没有任何表达式的空操作符“;”)
第二步、再分析小括号中的第2句能否成立:i<1000;
假使成立,则循环继续运行,实施第三步;假使不成立,则循环终结;
第三步、按顺序实施大括号中循环体的语句;
第四步、实施小括号中的第1句:i++ (此语句即:每循环一次,i的值自增1)
然后回到第二步继续实施循环。
再补充一点:同if语句一样,假使循环体中(大括号中)只有一行语句,大括号可以省略,其余的操作符也是这样。