您的当前位置: 首页 > 外汇学院 > 要闻动态

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

时间:2026-04-28 11:15:18

在金融图表中,一根K线图往往包含数千甚至上万根K线(即Bar,取决于设定的样本数量)。每根K线Bar都记录了开盘价、收盘价、最高价、最低价等数据,同时还涉及移动平均线、MACD、RSI等多种技术指标数值。

面对海量的数据,我们经常需要借助循环来实现数据的读取和赋值。下面,我们将简要介绍在MT4平台中常用的几种循环语句。对于从事兴业外汇交易的投资者而言,掌握这些循环语句,能帮助更高效地处理行情数据,制定交易策略。

一、while循环

while(判断条件)

{

语句1;

语句2;

。。。;

}

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

只要条件成立,程序就会持续执行大括号中的语句(称为循环体),直到小括号中的条件不再成立时结束循环。while循环也被称为“当循环”,意思是当满足某个条件时执行循环。

它与if语句的区别在于:if语句在条件为真时只运行一次;而while语句则是只要条件为真,循环体中的语句就会反复运行,直到条件变为假才会结束。因此,为了避免死循环,循环体内必须对判断条件进行修改,例如进行数值的累加操作。

例如:

extern int fast=12;

extern int slow=26;

double buffered[ ];

int i=0;

while(i<1000)

{

buffered= iMA(NULL,0,fast,0,MODE_EMA,PRICE_CLOSE,i)

-iMA(NULL,0slow,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);

}

对比之前的代码,我们可以发现:

原本位于“while(i<1000)”循环体上方的“int i=0;”语句,被移入了循环条件内部,并且放在了“i<1000”的前面;

原本在循环体中的“i++;”语句,也被移到了循环条件内部,放在了“i<1000”的后面。

for循环的执行顺序与while循环基本一致:

第一步,先执行小括号中的第1句:int i=0;

(此语句用于定义初始循环变量,在整个循环中仅执行一次,也可以是一个没有任何表达式的空操作符“;”)

第二步,判断小括号中的第2句是否成立:i<1000;

如果成立,则继续执行第三步;如果不成立,则循环结束;

第三步,按顺序执行大括号中循环体的语句;

第四步,执行小括号中的第3句:i++(此语句表示每循环一次,i的值自增1);

然后返回第二步继续判断并执行循环。

另外补充一点:与if语句类似,如果循环体(大括号)中只有一行语句,那么大括号可以省略,其他操作符也是如此。

Copyright © 2012-2026 兴业外汇 版权所有 网站地图