设为首页 收藏本站 切换语言

MQL4 语言入门之循环  

| 发表于 2021-11-15 12:46:37 | 显示全部楼层 |复制链接
循环
假设您决定要计算图表中所有条柱的最大价格的平均值。为此,您将各个元素轮流添加到一个变量,如下所示:
double AveragePrice = 0.0;   AveragePrice += High[0];AveragePrice += High[1]; AveragePrice += High[2]; AveragePrice += High[3]; AveragePrice += High[4];   // ... and so onAveragePrice /= Bars;
我只能告诉您一点:这种方法可行,但有些可笑。循环专门适用此类用途。注意,所有运算都是完全类似的,只有指数从 0 更改为变量 Bars-1 值。确定计数器并用其引用数组元素某种程度上来说就已经非常方便了。我们可以用循环来解决这个任务:
double AveragePrice = 0.0;   for(int a = 0; a < Bars; a++){         AveragePrice += High[a];}
我们看看各行:
double AveragePrice = 0.0; // everything is clear// this is a cycle.or(int a = 0; a < Bars; a++)
循环用关键字 for 开头。(还有其他类型的循环,例如while,但我们现在不讨论它们)。然后在引号中指明用分号隔开的计数器、循环计算条件、计数器增加运算。通常它以以下方式呈现:
for(declaration of a counter; the cycle operation conditions;   counter changes)  {    // the source code, that will be repeated is in braces,  }
让我们更近距离地了解循环声明的各个阶段。

计数声明int 类型用于此计数器。变量计数器的名称无关紧要。您应初始化主值,例如初始化为 0。

计数器计算条件:这很简单。在此处确定一个条件,如果它为 true,循环继续进行。否则,循环终止。例如在我们的示例中:
a < Bars
很明显,当变量计数器小于变量 Bars 时,循环将继续进行。假设变量 Bars=10,则在循环上每移动一次,变量增加 1,直至达到 10。之后,循环将停止。
计数器更改:如果我们不更改计数器(在我们的示例中是增加它),将发生什么情况?循环将永不停止,因为条件永不会满足。为了更好地理解循环的意义,我编写了一段可执行循环的代码,并提供了注释:
// the cycle:// double AveragePrice=0.0;//// for(int a=0;a>// {//   AveragePrice+=High[a];// }//// will be performed in this way://double AveragePrice=0.0;int a=0;AveragePrice+=High[a];a++;                    // now a=1, suppose Bars=3.                        // then the cycle goes on, because Bars > a AveragePrice+=High[a];a++;                   // a=2AveragePrice+=High[a];а++;                   // a=3// the conditions is not fulfilled any more, so the cycle // stops, because a=3 and Bars=3
现在您应该了解循环的工作方式了。但还应该再了解一些细节。
循环计算条件各有不同。如下例中所示:
a>10    // the cycle works while a>10a!=10   // the cycle works while a is not equal to 10a==20   // while a is not equal to 20a>=2    // while a is more or equal to 2a<=30   // while a is less or equal to 30
计数器可用不同的方式进行更改。例如,您不必每次都加 1。您可以这么做:
a--     // the counter will each time decrease by 1 a += 2  // the counter will each time increase by 2
此外,您可将计数器更改放到循环主体内。如下例中所示:
for(int a=0; a<Bars;) {   AveragePrice+=High[a];      a++; // the counter changes inside the cycle body  }>
也不必在循环中声明变量计数器。您可以换一种方式:
int a = 0; for(;a < Bars;) {   AveragePrice += High[a];    a++; // the counter changes inside the cycle body }
如果循环主体仅包含一个操作符,如下所示:
for(int a = 0; a < Bars; a++) {   AveragePrice += High[a]; }
然后也不必使用发括号:
for(int a = 0; a < Bars; a++)    AveragePrice += High[a];
这就是目前为止有关循环的所有内容了。还有其他的循环类型,我们会在下一课中讨论。现在您应该知道何时使用循环并记住语法。尝试编写几个循环,以通过 MessageBox() 函数显示计数器值。尝试编写一个非连续循环,看看启动后会发生什么。
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论24

ken138888
B
| 发表于 2021-11-15 17:33:34 | 显示全部楼层
谢谢
举报

点赞 评论 使用道具

latage
未及格
| 发表于 2021-11-15 19:45:12 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

fxbienhild
未及格
| 发表于 2021-11-16 17:38:48 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2021-11-16 19:12:25 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

秒秒007
DDD
| 发表于 2021-11-18 08:38:53 | 显示全部楼层
循环
举报

点赞 评论 使用道具

yifu0821
未及格
| 发表于 2021-11-18 10:42:06 来自手机 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

tianping
DDD
| 发表于 2021-11-19 14:04:41 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

新风向圈
DDD
| 发表于 2021-11-19 14:12:44 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

yimu77
DDD
| 发表于 2021-11-19 14:46:33 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

wenchao
C
| 发表于 2021-11-19 14:55:21 | 显示全部楼层
感谢分享,学习了
举报

点赞 评论 使用道具

秒秒007
DDD
| 发表于 2021-11-26 08:06:06 | 显示全部楼层
循环
举报

点赞 评论 使用道具

秒秒007
DDD
| 发表于 2021-12-4 08:32:16 | 显示全部楼层
学习了
举报

点赞 评论 使用道具

交易者
DDD
| 发表于 2022-1-9 10:10:05 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

anson1979
DD
| 发表于 2022-1-24 20:41:20 | 显示全部楼层
都是大神才看得懂
举报

点赞 评论 使用道具

紫竹青荷
CC
| 发表于 2022-5-21 00:53:23 | 显示全部楼层
感谢楼主分享
举报

点赞 评论 使用道具

kenlee1628
DD
| 发表于 2022-5-22 01:39:26 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

David888888
D
| 发表于 2022-5-22 09:03:21 来自手机 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

daerbushen
DD
| 发表于 2022-5-22 09:03:56 | 显示全部楼层
感谢分享,学习了
举报

点赞 评论 使用道具

6669
DDD
| 发表于 2022-5-22 10:00:07 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

12下一页
发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)