MQL4语言课程1-12课.doc_第1页
MQL4语言课程1-12课.doc_第2页
MQL4语言课程1-12课.doc_第3页
MQL4语言课程1-12课.doc_第4页
MQL4语言课程1-12课.doc_第5页
免费预览已结束,剩余40页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MQL4 课程By coders guru欢迎来到MQL4语言课程。在这个系列里,我将试着通过直接而迅速的例子给你一个全面的教程来剥去MQL4语言的神秘和复杂。在这个系列课程里,我还将告诉你如何使用MQL4语言编写你自己的智能交易系统,技术指标和脚本。如果你是一个c语言的程序员,那么在我的课程开始之前,你甚至已经知道了许多关于MQL4语言的规则。如果你以前没有书写过任何程序语言,那也没问题。我同样将指导你全面的理解程序编制的概念。那么,让我们从起点开始吧。MQL4?What? Why And Where?MQL4代表MetaQuotes Language 4.MetaQuotes是组建MetaTrader交易平台的公司。并且为了是它比其他的交易平台更强大,公司通过一种允许用户(你)编写自己的交易策略的内置程序语言来扩展它。这种语言允许你创建下面的任何一种:智能交易 是一种连接到特定图表的自动交易系统。它能够根据设置的节点自动启动 ,当它开始运行后,它不会同时去处理另一个新的指令(也就是说必须等到当前程序完成)。 这种交易系统能够在提醒用户可以交易的同时,将交易定单自动送到交易服务器。与大多数交易系统一样, 它也能够用历史数据测试交易策略,并在图表上显示出来。 智能交易存储在 terminal_directoryexperts。自定义指标 可用来编写新的技术指标,和内置的指标一样,它不能用来进行自动交易, 只能作为分析数据的工具。自定义指标储存在 terminal_directoryexpertsindicators。脚本 是执行单一功能的一段程序,和 智能交易不同,脚本不能单独执行,只能被调用。脚本存储在 terminal_dictionaryexpertsscripts。这就是“什么”是MQL4?“为什么”使用MQL4?现在,“在哪儿”我可以书写MQL4?书写你自己的MQL4代码就像世界上的其他任何事情,你可以选择两种方法种的一种,困难的和简单的。1- 困难的:困难的方式是使用你喜欢的文字编辑工具和命令提示符来编辑你的程序。记事本是个不错的选择,但不要忘了两件事情:1- 保存你创建的文件为无格式的文本。(plain text format)2- 保存文件为.mp4(这样方便用MetaEditor重新编辑它),但是你也可以保存它为任何你喜欢的扩展名。保存完你的程序后,还有一个额外的步骤来让你的代码可以众所周知的出现。那就是编译步骤。编译的意思是转换你已经写好的人类易读的语言为电脑能理解的机器语言。MetaTrader 已经装置了一个它自己的编译器:MetaLang.exe。(这个程序将转换你的脚本为机器语言)MetaLang.exe是一个带两个参数的命令行程序,它输出.ex4文件。(.ex4为Metatrader可识别的文件)第一个参数是“options”,它只有一个可选项 q 退出。第二个参数是你的.mql文件的完整路径。语法格式为:Metalang options. filename例:1- 找到你的metalang.exe的路径,它和MetaTrader在同一个路径下(例如:D:Program FilesMetaTrader 4)2- 创建一个批处理文件compile.bat(或者任何你喜欢的名字。)3- 把下面的几行代码写进bat文件并保存它:cd D:Program FilesMetaTrader 4metalang -q D:Program FilesMetaTrader 4my_first_mql4_script.mq4(不要忘了把路径更改为你的MetaTrader的安装路径).4- 运行这个批处理文件,如果你像我一样幸运的话,你将看到下面的画面。与你看见的一样,你将获得“my_first_mql4_script.ex4”输出文件。2-简单的:Metatrader已经装置了一个很好的IDE(integrated development editor,集成开发环境)MetaEditor,它有如下特性:1- 当你读写代码的时候它是一个有着MQL4语言强大和不同特性的文本编辑器。2- 方便的编译你的程序,只要按下F5,MetaEditor将为你做完所有的困难工作并输出“ex4”文件。(另外它还很容易的看出你的程序那里出错了)3- 内置参考字典。你可以访问高亮的关键字。如果想进一步了解它,请按F1.在接下来的课程里,我们将知道更多的关于MetaEditor。今天我仅仅是给大家打个招呼,明天我们将开始真正的工作,你将学习MQL4的语法。非常欢迎批评指正。明天见。最后感谢大家,欢迎回帖批评指正。MQL4课程By coders guru语法我希望你满意那个试着回答了:“什么”是MQL4?“为什么”使用MQL4和“在哪儿”书写MQL4的欢迎课程。方法或怎么做(how)永远是最大最重要的问题,接下来的全部课程就是答案。现在,我希望你清空你思想中的任何混乱想法,并且认真阅读下面的这些概念。我们今天正在谈论的是关于MQL4的语法规则。就像我以前告诉你的那样,如果你是个c语言或者c+的程序员,那么在我的课程没开始之前你就已经知道了许多MQL4的事情。这是因为MQL4的语法和c语言的语法很像。当我们学习一种语言的语法时,我们同时在学习它的原理和书写规则。它有以下几部分组成:1、 格式2、 注释3、 标识符4、 保留字让我们把它分成以下几块。一、 格式当你书写代码的时候,你可以自由的使用空格,制表符和空行来分隔你的代码和代码行,使它们更加的易读和美观。例如,下面这些语句行在MQL4里都是正确的:Double MacdCurrent,MacdPrevious,SignalCurrent:Double MacdCurrent,MacdPrevious,SignalCurrent:Double MacdCurrent, MacdPrevious, SignalCurrent:但是,就像你看到的,第一行更易读和容易理解。在MQL4的语言规则里有两个例外: 1、在“contorlling compilation”里不能使用新行。(我实在不知道老外在这里什么意思,不过还好。因为他说)在下一课里你将知道关于“contorlling compilation”更多,现在只要记住这个例外就好了。例如下面的代码行是错误的,并且MQL4编译的时候将会报错:这是正确的“contorlling compilation”: 2、在常数值,标识符和关键字的中间不能使用空格或新行。例如,这一行是正确的:Extern和int是关键字,MA_Period是标识符,13是常数值。在下一课,你将知道的更多。下面的这些行是不正确的:注意1和3之间的制表符。注意关键字extern中间的制表符。二、 注释为了使程序设计世界更容易些,任何程序语言都要它自己书写注释的风格。代码行里的注释会被汇编器忽略,但它使你的程序更加的清楚和易懂。假定你在夏天写了某个程序,到了冬天你再读它的时候,如果没有注释尽管你是代码的编写者你不能理解全部的这些谜一样的代码行。MQL4(c+)使用两种注释方式:1、单行注释单行注释开始于“/”,结束于一个新行。例如:2、多行注释多行注释开始于“/*”,结束于”*/”。例如:你也可以像下面这样在多行注释里嵌套一个单行注释:这也是争取的注释:但这样是错误的:三、 标识符标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.例如 MA_Period在这是就是个标识符:让我们来看一些例子:Name1正确的_Name1正确的1Name错误的(首字母不能是数字)Name错误的(不能使用)Name错误的(不能使用)I_love_my_country_and_my_country_loves_all_the_world错误的(不能超过31个字符)Color正确的(注意C是大写)Color错误的(color是保留字)四、 保留字下面列出的是固定的保留字。不能使用以下任何保留字进行命名。(译者注:都是小写。)数据类型存储类型操作符其他boolexternbreakfalsecolorstaticcasetruedatetimecontinuedoubledefaultintelsestringforvoidifreturnswitchwhile例如下面的这些代码行是不正确的:我希望你能对这一课感兴趣。下一课我们将讲关于“数据类型”。准备好,真正困难的工作将要开始了。最后感谢大家,欢迎回帖批评指正。MQL4课程By coders guru欢迎来到MQL4课程的第三课。回顾下上一课的内容:n 你可以使用什么格式来书写MQL4代码?n 怎样通过注释使你的程序更加完善?n 什么是标识符?选择他们有什么规则?n 什么是MQL4的保留字?现在,让我们享受本课的乐趣“DATA TYPES”(数据类型)数据类型是什么意思?任何程序语言都有一套数据的内存表示的名称。例如,如果内存保留一个-2147483648 到 2147483647之间的数,那么大多数的程序语言将命名这个数据为“整型数据”(Integer)。变量?变量是被提交到内存中的数据的名称。你可以设想内存是连续的、大小不同的盒子。l 为了使用一个盒子存储数据,这个盒子必须被赋予一个名称,这个过程被称为“声明”。l 在“声明”过程,你用一个词告诉计算机你想使用的盒子类型和大小,这个词被称为“关键字”。l 你还可以给这个盒子起一个好记的或者跟存储数据有关系的名字,这可以方便你以后找到这个数据。这个名字就叫“变量名”。l 通过“赋值”,可以把数据放进盒子里。l 我们可以在“声明”变量的同时就给它一个值,这个过程被称为“初始化”。例如下面的这行代码:int MyVaraible=0;int 关键字int 整型数据类型int 声明MyVaraible 变量名=0 初始化MQL4包括以下数据类型:整型数据 (int)十进制: 数字 0 - 9 ,包括负数。十六进制: 数字 0 - 9 , 字面 a - f 或者 A - F 代表 10 - 15; 以 0x 或者 0X 开头。整型数据占用 4 字节的空间,其数值范围介于 -2147483648 2147483647 之间。如果超出这个范围,则视为无效。例如:int intInteger = 0;int intAnotherIntger = -100;int intHexIntger=0x12;布尔数据 (bool)Boolean 用来表示 是 和 否, 还可以用数字 1 和 0 进行表示。True和Flase可以忽略大小写。例如:bool I = true;bool bFlag = 1;bool bBool=FALSE;字符数据 (char)任何带单引号的单一字符或者十六进制的 ASCII 码如 x10 都是字符数据。例如:a , $ , Z一些特殊的字符如单引号()、双引号()、问号(?)、反斜线()和控制符必须以反斜线开头(), 组合表达原来的意思,如下表所示:换行 NL (LF) n制表符 HT t回车 CR r反斜线 单引号 双引号 十六进制ASCII hh xhh我们使用关键字INT创建字符类型。例如:int chrA = A;int chrB = $;int c = ; / 代码0xA9int d = xAE; /货币对代码字符串数据 (string)字符串数据是带有双引号的一连串 ASCII 字符 ,如: Character constant。字符串可以容纳 0 到 255 个字符,如果超过这个长度,右边多余的字符将被忽略,编译器也会有相应的警示。如果字符串中需要插入一个双引号() 必须在它前面使用反斜线()。(参见字符数据部分)我们使用关键字STRING来创建字符串数据,例如:string str1 = Hello world1, with you coders guru”;string str2 = Copyright 2005, Forex-tsd forum.; /注意双引号的使用.string str3 = 1234567890;浮点型数据 (double)浮点型数据由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分为一系列十进制数字。浮点型数据 (双精度)占用 4 字节的空间。其数值范围介于 -1.7 * e-308 1.7 * e308 之间。如果超出这个范围,则视为无效。我们使用关键字double来创建浮点型数据,例如:double a = 12.111;double b = -956.1007;double c = 0.0001;double d = 16;double dblNumber3 = 1/4;颜色数据 (color)颜色数据可以用三种方法表示: 字符数据、整型数据或者是颜色名(只能是 Web colors 中已命名的).字符数据的表达方法是用三个数字来表示三种主要颜色:红、绿、蓝的比例。 以 C 开头,用单引号括住。数字的值在 0 255 之间按比例选取。整数数据的表达方法使用十六进制或十进制数字。十六进制数字如 0x00BBGGRR, 其中 RR 是红色的比例,GG 是绿色的比例,BB 是蓝色的比例。十进制数不能直接体现红绿蓝的比例 ,而是十六进制数字的十进制表示方式。特殊的颜色名可以参考Web colors set表。示例:/ 字符数据C128,128,128 / 灰色C0x00,0x00,0xFF / 蓝色/ 颜色名RedYellowBlack/ 整型数据0xFFFFFF / 白色16777215 / 白色0x008000 / 绿色32768 / 绿色颜色数据占用 4 字节的空间。第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。我们使用color关键字来创建颜色数据,例如:color clr1= Red;color clr1= C128,128,128 ;color clr1=32768;Web colors set表BlackDarkGreenDarkSlateGrayOliveGreenTealNavyPurpleMaroonIndigoMidnightBlueDarkBlueDarkOliveGreenSaddleBrownForestGreenOliveDrabSeaGreenDarkGoldenrodDarkSlateBlueSiennaMediumBlueBrownDarkTurquoiseDimGrayLightSeaGreenDarkVioletFireBrickMediumVioletRedMediumSeaGreenChocolateCrimsonSteelBlueGoldenrodMediumSpringGreenLawnGreenCadetBlueDarkOrchidYellowGreenLimeGreenOrangeRedDarkOrangeOrangeGoldYellowChartreuseLimeSpringGreenAquaDeepSkyBlueBlueMagentaRedGraySlateGrayPeruBlueVioletLightSlateGrayDeepPinkMediumTurquoiseDodgerBlueTurquoiseRoyalBlueSlateBlueDarkKhakiIndianRedMediumOrchidGreenYellowMediumAquamarineDarkSeaGreenTomatoRosyBrownOrchidMediumPurplePaleVioletRedCoralCornflowerBlueDarkGraySandyBrownMediumSlateBlueTanDarkSalmonBurlyWoodHotPinkSalmonVioletLightCoralSkyBlueLightSalmonPlumKhakiLightGreenAquamarineSilverLightSkyBlueLightSteelBlueLightBluePaleGreenThistlePowderBluePaleGoldenrodPaleTurquoiseLightGrayWheatNavajoWhiteMoccasinLightPinkGainsboroPeachPuffPinkBisqueLightGoldenrodBlanchedAlmondLemonChiffonBeigeAntiqueWhitePapayaWhipCornsilkLightYellowLightCyanLinenLavenderMistyRoseOldLaceWhiteSmokeSeashellIvoryHoneydewAliceBlueLavenderBlushMintCreamSnowWhite 日期时间数据 (datetime)日期时间数据由 6 个部分的字符组成:年、月、日、时、分、秒,以 D 开头, 用单引号括起。日期(年、月、日)或者时间(时、分、秒)甚至两者一起都可以不用填写。日期时间数据开始于 1. 1. 1970 截止到12.31. 2037D2004.01.01 00:00 / 新年D1980.07.19 12:30:27D19.07.1980 12:30:27D19.07.1980 12 /等于 D1980.07.19 12:00:00D01.01.2004 /等于 D01.01.2004 00:00:00D12:30:27 /等于 D编译日期 12:30:27D /等于 D编译日期 00:00:00我们使用关键字datatime来创建日期时间数据,例如:datetime dtMyBirthDay= D1972.10.19 12:00:00; datetime dt1= D2005.10.22 04:30:00;运算符和表达式一些数字和字符的组合是特别重要的,它们被称为运算符,例如:+ - * / % 算术运算符& | 逻辑运算符= += *= 负值运算符标识符加运算符就是表达式。举例说明:x = (y*z)/w;x,y,z和 w是标识符=,* 和/ 是运算符整个这行是表达式。表达式组成语句,语句组成函数,函数组成程序。算数运算符算术运算符包括加法和乘法运算:运算符名称示例+加A = B + C;-减A = B - C;+ -改变符号A = -A;*乘A = B * C;/除A = B / C;%求模A =A % C;+自加一A+;-自减一A-;添加1的运算符不能使用在表达式中。int a=3;a+; / 有效表达式int b=(a+)*3; / 无效表达式b=a*5 / 有效表达式赋值运算符任何表达式的目的是产生一个结果,赋值运算符把这个结果赋予给左边的操作数。例如:A=B*C在这里,我们把B和C相乘,并把结果赋予给A。(=在这儿是赋值运算符)MQL4有11个赋值运算符:把B的值赋予AA = B;在 y 值上加上 x y += x;在 y 值上减去 x y -= x;在 y 值上乘以 x y *= x;在 y 值上除以 x y /= x;在 y 值上求 x 的模 y %= x;把 y 值向右做 x 位逻辑移位 y = x;把 y 值向左做 x 位逻辑移位 y = x;AND 位运算符 y &= x;OR 位运算符 y |= x;把 x 和 y 按做逻辑异或的操作 y = x;关系运算符用返回0(False)或1(True)来表示两个量之间的关系。逻辑值FALSE代表整数零值,逻辑值TRUE 代表不同于零的任何值。MQL4有六个关系运算符。示例如下:4 = 4; /等于,结果TRUE,或14 4; /大于,结果为FALSE或04 =4 ; /大于等于,结果为TRUE或14!=4 ; /不等于,结果为FALSE或0布尔运算符(逻辑运算符)逻辑运算符是根据表达式的值来返回真值或是假值。MQL4使用3个逻辑运算符:运算符名称示例说明&逻辑与A & B;如果A和B值都是真实的,表达式值为TRUE (1)。 否则,表达式的值为FALSE (0).|逻辑或A | B;A和B值的逻辑运算符或OR (|)用来表示两个表达式只要有一个成立即可。如果A和B值为真的,表达式值为TRUE (1)。否则,值为FALSE (0)。逻辑表达式被完全计算。!逻辑非!A;否定运算符(!),用来表示真假的反面的结果。如果运算值是FALSE (0) 结果为TRUE (1);如果运算不同于FALSE (0)等于FALSE (0) 。位逻辑运算符位逻辑运算符和逻辑运算符比较相似,只是他们工作在一个比较小的范围-二进制数据。运算符对操作数执行按位求补操作。表达式的数字值中包含1,其中n 包含 0和数字值中包含0 ,其中 n 包含 1。b = n;运算符x 向右移动到数字y 代表二进制代码。向右移动是逻辑运算,即左侧将被零填满。x = x y;运算符x 向右移动到数字y 代表二进制代码。左侧将被零填满x = x y;二进制的x 和y代表位逻辑运算符AND 。在所有数组中x和y的值都不含有零表达式的值包含1 (TRUE);在所有其他数字中包含0 (FALSE)。b = (x & y) != 0);二进制的x 和y代表位逻辑运算符OR。在所有数字中x和y的值都不等于零表达值包含1 并且在所有其他数字中包含0。b = x | y;二进制的x 和y代表位逻辑运算符EXCLUSIVE 。在所有数字中x和y的值都不同于二进制值表达值包含1并且在所有其他数字中包含0 。 b = x y;位逻辑运算符只作用于Integers类型。其他运算符这些运算符不属于前面任何一个种类。运算符名称示例说明指数下一课中会有详细说明()调用x1,x2,.,xn 自变数函数,标点操作符 优先级下面是从上到下的运算优先规则,优先级高的将先被运算。() 函数调用 从左到右 数组元素参考! 真假运算符 从右到左- 改变运算符+ 增量- 减量 位逻辑运算符& 位逻辑运算符 AND 从左到右| 位逻辑运算符 OR 位逻辑运算符 OR 右移* 乘法 从左到右/ 除法% 百分比+ 加法 从左到右- 减法 小于 从左到右 大于= 大于等于= 等于!= 不等于| 逻辑 OR 从左到右& 逻辑 AND 从左到右= 值 从右到左+= 加法值-= 减法值*= 乘法值/= 除法值%= 百分比值= 右移值= 左移值&= 位逻辑运算符 AND值|= 位逻辑运算符OR值= 位逻辑运算符 OR值, 逗号 从左到右插入语会显示所优先执行的运算注意:在MQL4程序中执行优先运算不同于在C 语言范围内的运算。在MQL4中,正常的流程控制是从上而下一个语句一个语句的执行。一个语句是一行代码,它让电脑做某些事情。例如:Print(Hello World);return 0;语句后面的分号是语法中至关紧要的部分,也是最容易被遗忘的部分。从上到下的执行方式并不是唯一的途径,它有两个例外:循环和选择。你希望你写的程序代码能根据情况的改变而做出不同的响应。在这种方式中,控制流程从程序的这一部分跳转到程序的另一部分。语句引起这样的跳转被叫做控制语句。这样的控制由循环和选择组成。循环在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环语句是由循环体及循环的终止条件两部分组成的。要使用循环语句时,必须要确定循环体及条件(布尔表达式)两个重要因素,亦即首要考虑的是:我要重复执行哪些语句,我要重复到什么时候为止!MQL4有两种循环:for循环和while循环。一、for循环For循环执行代码片段固定的次数。例如:int j;for(j=0; j15; j+)Print(j);For循环由for关键字和跟随其后的圆括号和括号中由分号隔开的三个表达式组成:for(j=0; j15; j+)三个表达式分别是初始化表达式,测试表达式和增量表达式。循环的主体是被执行数次的语句:Print(j);在我们的例子中,循环的主体被执行了15次。注意:for语句后面没有分号,这是因为for语句和for循环的主体一起才能构成一个程序语句。A、 初始化表达式:初始化表达式只在程序开始的时候执行一次,它的目的是给循环变量一个初始值(在我们的例子中是0)你可以在循环外(之前)声明循环变量,就像我们的的例子里:int j;或者你也可以在像下面这样在循环里声明变量:for(int j=0;j15;j+)上面的两行代码是一样的,除了每个变量的范围。(我们将在变量一课中介绍更多的关于变量声明和范围)第一种声明方式(循环外)使得所有的代码行都可以使用这个变量,第二种声明方式(循环里)只有循环里能使用这个变量。你可以像下面这样,在for循环里声明多个变量,变量之间用逗号分隔:Fro(int i=0,j=0;i15;j+)print(i);B、 测试表达式:测试表达式是使用关系运算符的关系表达式。它通过评价每一次循环的值来决定循环是继续执行还是停止。如果表达式的结果为真,循环将继续执行;如果表达式的结果为假,那么循环终止。在我们的例子中,只要I15,循环主体print(i)将一直执行。例子里i的值为:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14。当到达15,控制语句将跳过循环,执行其后的语句。C、 增量表达式:增量表达式把循环变量的值(本例中为i)增加1。它是循环步骤中的最后一步,在初始化循环变量,测试完测试表达式,执行完循环主体之后。下面是for循环的流程图:像初始表达式一样,在fro循环中你也可以使用多个增量表达式,它们之间用逗号分隔。像下面这样:int i;int j;for(i=0,j=0;i0;i-)print(i);上面的例子中,它初始化i的值为15然后开始循环,并每次将其减少1和检查测试表达式(i0)。程序将给出这些结果:15,14,13,12,11,10,9,8,7,6,5,4,3,2,1。循环主体中的多个语句:在前面的例子里,循环主体中都只有一个语句,但并不总是这样。你可以像下面这样使用大括号()在循环主体中使用多个语句:For(int i=0;i=15;i+)Print(i);PlaySound(“alert.wav”);不要忘记在每一个语句后面加上分号。break声明:当关键字break出现在for循环中时(while循环和switch语句也一样),循环的执行将终止,并且跳过循环,执行其后的语句。例如:for(int i=0;i15;i+) if(i=10) break; Print(i);上面的例子中,循环将执行到i=10。在那里,break关键字将终止循环。代码将给出这些数值:0,1,2,3,4,5,6,7,8,9Continue声明:break声明让你跳出循环,continue则让你回到循环的顶部(圆括号内)。例如:for(int i=0;i15; i+) if(i=10) continue; Print(i)上面的例子循环将执行到i=10,在那里continue关键字将使循环回到循环顶部并且不输出i的值。代码将给出这些数值:0,1,2,3,4,5,6,7,8,9,11,12,13,14。提示:你可以省去for循环中的一个或所有表达式,例如:for(;)这个循环就像while循环,有一个始终被为真的测试表达式。二、while循环for循环通常被用在你知道循环将要被执行多少次的情况下。那如果是你不知道要执行多少次的循环该怎么办呢?这就是while循环。while循环和for循环一样有一个测试表达式,但没有初始化表达式和增量表达式。例如:int i=0;while(i15) Print(i); i+;在这个例子中你应该注意:l 循环变量在循环之前被声明和初始化,你不能想for循环那样,在循环中(圆括号内)对其声明和初始化。l i+在这里不像你想的那样是增量表达式,但是循环体必须包含一些改变循环变量的语句,否则,循环将永远不会停止。while仅包含一个测试表达式,它在每次循环的时候检查。如果表达式为真则循环继续执行。否则,循环终止,并执行其后的语句。在本例中,循环将执行到14,这时i15为假,循环终止。下面是while循环的流程图:while循环和for循环的相同点:1、 在它们两个中你都可以使用break声明和continue声明。2、 它们两个都可以在循环主体中用括起来使用多个语句。3、 for(;)等于while(true)。4、在上一课我们已经知道了循环是改变程序正常流程(自上而下)的两种方式的一种,第二种方式是选择。选择在程序中依靠一个表达式的值使其一次性跳转到程序的不同的部分。下面是MQL4中可用到的几种选择声明:一、 If语句。If语句是最简单的选择声明,例:if( x 100 )Print(hi);if关键字后面是小括号,小括号里是测试表达式(x100)。当测试表达式的值为真的时候,if主体将被执行(print(“hi”);)。如果测试表达式的值为假,将跳转到if语句后面执行其后的语句。下面是if声明的流程图:if主体中的多语句:像循环一样,if声明也可以通过大括号来包含多个语句,例:if(current_price=stop_lose) Print(you have to close the order); PlaySound(warning.wav);嵌套:选择和循环可以互相嵌套。你可以在循环中嵌套一个选择语句,或者在选择语句中嵌套一个循环,或者循环中嵌套一个循环,或者选择语句嵌套选择语句。例:for(int i=2;istop_lose) Print(Its too late to stop, please stop!);else Print(you playing well today!);在上例中,如果测试表达式为真,程序给出一个消息;如果测试表达式为假,程序给出另一个消息。下面是ifelse语句的流程图:if.else语句的嵌套:你可以在if语句中嵌套if.else语句,也可以在if.else语句中嵌套if.else语句。例:if(current_pricestop_lose) Print(Its too late to stop, please stop!);if(current_price=stop_lose) Print(Its time to stop!);else Print(you playing well today!);在ifelse语句的嵌套中有一个潜在的问题,你可能不经意的把else匹配给一个错误的if。有两种办法来解决这个问题:A、 你可以用大括号包含中if.else语句。例:if(current_pricestop_lose) Print(Its too late to stop, please stop!);if(current_price=stop_lose) Print(Its time to stop!);else Print(you playing well today!);B、 把else匹配给最近的if(在上面的例子中是if(current_price=stop_lose))。三、 switch语句如果你有一个巨大的选择树,并且所有的选择依赖一个相同变量的值,那么你可以使用switch语句。例:switch(x) case A: Print(CASE A); break; case B: case C: Print(CASE B or C); break; default: Print(NOT A, B or C); break; 在上面的例子中,switch跟着一个小括号,小括号里包含switch常数,switch可以是一个整数,一个字符或者一个常数表达式。常数表达式不能包含变量,例如:case X+Y:非法的switch常数。switch语句匹配常量X到case常量中的一个。当case=A,程序将输出CASE A并且break语句将告诉控制跳出switch代码段。当case=B或者case=C,程序将输出CASE B OR C,这是因为CASE B后面没有break语句。如果case x !=任何CASE常量,switch将执行default case,并输出 NOT A,B orC。下面是switch语句的流程图:最后感谢大家,欢迎回帖批评指正。函数函数很像一台香肠机,你放进肉和调料,它产出香肠。肉和调料相当于函数的参数,香肠相当于函数的返回值。机器本身相当于函数主体。香肠机和函数的唯一区别就是:有些函数没有返回值。(nothing在MQL4里被称为void)让我们来看一些例子:double /香肠的类型返回值my_func (double a, double b, double c) / 函数名和参数列表 (肉和调料) return (a*b + c); /产出香肠 返回来的值 就像你上面看到的那样,函数开始于返回值类型”double”和那个后面带小括号的函数名。小括号里是函数参数,在我们的例子中,我们有三个参数:double a,double b和double c。函数的主体包含在大括号里。在我们的例子中,函数主体将进行(a*b + c)操作。return关键字负责返回最终结果。return关键字:return关键字终止函数的执行(就像循环里的break关键字)并且把控制权交给函数调用方。return关键字可以像上面那样在它的圆括号里包含一个表达式,这样就可以终止函数的执行并返回表达式的值。当然,它也可以不包含表达式。这样的话,它的工作就仅仅是终止程序的执行。注意:并不是所有的函数都使用return关键字,特别是像下面这个没有返回值的例子:void / void 的意思是没有返回值。my_func (string s) /函数名和参数列表。 Print(s); 上面的函数没有返回值,但是它将输出参数 s的值。当函数没有返回值的时候,我们使用”void”作为函数返回类型。函数的调用:设想你有一个计算两个整数的和的函数,它像下面这样:in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论