MT4编程手册技术大全_第1页
MT4编程手册技术大全_第2页
MT4编程手册技术大全_第3页
MT4编程手册技术大全_第4页
MT4编程手册技术大全_第5页
已阅读5页,还剩200页未读 继续免费阅读

下载本文档

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

文档简介

MetaQuotesLanguage4(MQL4)编程参考MetaQuotesLanguage4(MQL4)编程参考nnphu.d.n2008-5-3PAGE1目 录MQL介 1-础 2-2-注释2-标识符3-保留子3-3-类型转换4-平型常量4-子符常量5-布尔型常量5-6子符串常量6-颜色常量6--8表达式8-算术运算符8-赋值运算符9-关系运算符9-布尔运算符........................................................................................................-位运算符............................................................................................................-其它运算符........................................................................................................-规0........................................................................................................-13-语句块13-....................................................................................................-break语句.........................................................................................................-continue语句...................................................................................................-return语句.......................................................................................................-if—ele语句.....................................................................................................-switch多分支语句...........................................................................................-while循环语句.................................................................................................-for.....................................................................................................-18-函数调用............................................................................................................-特殊函数............................................................................................................-21-局部变量............................................................................................................-形式参数............................................................................................................-静态变量............................................................................................................-全局变量............................................................................................................-....................................................................................................-变量初始化........................................................................................................-....................................................................................................-26预定义常量........................................................................................................-编译控制............................................................................................................-文件包含............................................................................................................-函数导入............................................................................................................-义量 30-................................................................................................................-30-

....................................................................................30-....................................................................................31-....................................................................................31-....................................................................................31-....................................................................................33-....................................................................................33-Wingdings符亏34Web色................................ .............................................................................-34-指标线353536信息框36

....................................................................................38-....................................................................................39-41-未初化因................................ ....................................................................-41-

....................................................................................42-....................................................................................42-义量 46-k46s46d47获取每个柱子收盘价]47-获取汇率小数位数s48获取每个柱子最高价[]48获取每个柱子最低价[]48获取每个柱子开盘价[]49获取当前货币对点大小t50获取每个柱子开盘时间]50获取每个柱子一跳成交量[]51运行 52-程序................................ ....................................................................................-53-导入数................................ ............................................................................-53-55信息 66-)66-获取账户信用额度)67获取账户注册的外汇公司名AcounComany)...................................................-获取账户货币名称ccotCurrncy).--)67获取账户可用保证金AcuntFreagin)67AcounreeMaginhec()68-可用保证金计算模式AcuntFreMaginode).................................................-获取当前账户杠杆比率counteveage)68AcuntMagin).--)69获取当前账户账亏)69获取账户赢利金额)69获取连接服务器名称AcuntSever).--获取停止交易标准ccotStoputLvel)69获取停止交易标准的计算方式ccontSopotMo().......................................-处数 70-)70)71复制柱子数据到二维数组Arrayopyate()72复制柱子数据到一维数组Arrayopyeris().....................................................-返回)74-判断)74)75-判断ArIsSeies).--返回置rayMimu()76返回置ryMiimu()76)76-重设)77)77返回)78-数组序)78当态 79-的错误信息GetLatEror()79判断态)79模)80LLIsllslloed().....................................................-启ExperEnaled)80-函数IsLibarisAlowe()...............................................--sOpimiatin()...............................................--止)81模式Isestng().............................................-IsradAllwed)...................................................-是否忙IsTraeCotxBus()...............................................--“”sViualde)...................................-获取未初始化原因ninialzReaon()83-端息 84--获取户)84-获取户录)84-函数 84-)84在)85-取回)85数据MarkeInf()86显示)86-)8787发送FTP)88-子件)88暂)89类数 89-ASCII码转换成子符串)8990标准化双精度型数值Noalzeoube()90子符串型数据转换成浮点型StToDubl()90子符串数据转换成平型rTInege()91-子符串转换成日期时间e91日期时间型数据转换成子符串imeoSt()91义标 92-指标区)92设置s94设置一个箭头符亏)96-绑区)96设置起置n97设置值e98设置)98设置值)100设置指标线样式)101-设置)102-时数 102-获取日是本月第儿天)102获取日儿)103-获取日)103-获取当前小时数)103-数)104-)104数)104-获取服务器时间)104-数)105儿meDayfWek()...........................................................-一imeayOYea()...............................................-)105)106-分数).--)106-数)107r107)107操数 107-关闭)108-删除)108-清除盘)109判断尾FieIsndig().....................................................--判断向尾FieIsinendig().............................................-打)-打开FiOpenHstoy()...........................................................-文件取)-读取文件双精度数据FiReadDubl().............................................................-读)-读本FiReadNbe().............................................................-读).--针)-)-针置)-写入SV)-数组).--写FiWriteoube()...........................................................-平数)-写)-变量 120-obalVrialeCeck)...............................................-删除)121获取全局变量值GlbalriablGet)121弓的全局变量名Glbalaribleame).........................................-设置全局变量值GlbalriablSet)122根据件全局变量值GlobaVarablSetnCoition).........................-122删除loblVaableseleeAl().....................................................--数lobVarialesota().....................................................--和数 124-求绝)124求反弦)124)125-)125-)126-求弦)126-求e幕)127)127-)128-求)128求)128求模129-求幕129-获取)129-)130-)130-求根)131-获取数)131-)131-操数 132-创建)132删除)133)133查找)134获取指定对象的属性值)134获取jectGtFioDecritio).....................................-计算返弓ObctGethifByVlue)...............................................-计算返指定柱子价格值ObectetVlueySht)...................................-)136-)137-删除)137-修改指定对象属性)138-jectStFioDecritio).....................................-修改)139-数jectsota().............................................................-)140串数 140-)140)141中II值StrngGtChr)...........................................-求度)142-替中)142-截)142-删除子符串前导子符StngTriLef().............................................................-删除尾StngTriRigt()...........................................................-分标 144-加速指标)144-离散144-鍔鱼)145-向)145-平均)146-动能146-熊动)147-保)147-基指标iBandOnAray).......................................................-牛动)148-)149-基IOnAray)149-自)150-DeMarer指标)150包络)151-基络iEelopeOnAray).......................................................-强力.--)153-加多)153一目平衡表指标)154-比尔iBMFI).........................................................)155-基千数组动量指标MomtumOnrra().............................................................-资金)156-移动平均线指标)156基千数组移动平均指标).--)158-平移动平均线指标)158能量OBV................................159-抛物)159-相对g)160-基对gIOnAray)160-相对)161-标准)161-基iSDevOnrra().............................................................-)163-威廉)163-时据 164-)164)164-)165-)166-量)166-)167-量)167-)168-)168-)169-处数 170-交易数误................................ ..................................................................-170-平单).--逆单)173-)174-平单)174定单)175)175)175-)176-数)176-rdeagicNmbe().............................................................-)177-定单)178-开单)178-单)178-定单盈)179选择单)179-发出单)180历史中数Orersstoryota().............................................................-止值)182-定数)182-定()183定单)183-)183定单)184-定单)184-数数 185-志idesIndcatrs().........................................................-)185l)185获取货币对名称)186-数WiowBaPerhar().....................................................--)187搜索)187-获取ndowFrstisileBr()...........................................-柄)188见WioIsVsibe()...........................................................-获取弓)189获取刻WidowricMx).................................................-获取刻WidowricMin).................................................-获取indwPreOnDrppe().............................................................-重绘)191-窗口)192-价格indwTiOnDroped)193-数)193X值)193-Y值)194-函数 194-谢 195-MetaQuotesLanguage4(MQL4)编程参考MetaQuotesLanguage4(MQL4)编程参考nnphu.d.n2008-5-3-PAGE1-MQL简介MetaQuotesLanguage4(MQL4)是一种新这种语言允许用户创建自己的智能交易程序,使自己的交易操作能够自动地执尤其适合用户实现除MQL4自定义指标、脚本和库。MQL4本的算术运算符和逻辑运算符,内置了一些基本的技术指标和定单管理命令。MetaEditor4MQL4帮助用户得心应手我们MQL字典MQL4部简化的指南却包含了我们可能用到保留字和其它的语言成份都已分门我们能够从中找到每一语言成份的说明。MQL4可以编写出不同功能、不同目的的程序:智能交易智能交易是一种附加到特定图表的自动交易系统(MTS)。对千指定的货被启醒用户可以交易的同时将交易定单直接送到测试交易策略,并在图表上显示买入和卖出点。智能交易存储terminal_directory\experts录。自定义指标自定义指标是指那些已集成在客户端的指标之外用户独自编写出的不能用来只据的工具。自定义指标储存terminal_directory\experts\indicators录。脚本脚本是执行特定功能的一段程序。和智能交易不同,脚本不能单独运行,只能被调用。脚本存储terminal_dictionary\experts\scripts录。库库是经常使用的自定义函数集合。库中脚本不能单独运行。库存储在terminal_directory\experts\libraries目录。包含文件包含文件常用千在源码中引用程序块译阶段被中调优越,因为调用库会导致额外开销。建议包含文件储存terminal_directory\experts\include录。基础MetaQuotesLanguage4(MQL4)是一种新化完适合用户现(本和库。语法MQL4语法类似千C语言,除了下列这些特点:'没有地址运算符;'没do...=while;'没有goto...=语句;'没[条件][表达l]:[表达式=2]=语句;'没有复合数据类型(结构);'不允许复合赋值,例如:vall=val2=0arr[i++]=val;'cond(cnt=OrdersTotal)>0;=等等;'不可以中途终止逻辑表达式的计算。注释=多行注释以/*=符号开始*符号结束不能嵌套注释以//符号开始,到行末结束,它可以被嵌套到多行注释之中。注释允许空行和空白。示例:=//单行注释=/* multi—'line //嵌入单行注释'comment*/标识符标识符用千命名变量、函数和数据类型,其长度不能超3l个字符。标识符可以使用下列符号数字0—9小写英文字母a—zA—Z(区分大小写字母还有下划线(_)。标识符的首字符不可以是数字,也不能使用保留字。NAMElNAMElnamelTotal_5Paper保留字下面列出的标识符是系统自用的保留字每个保留字都不能随意使用。数据类型储存类型操作符其他bool=ExternBreakFalsecolorStaticCaseTruedatetimeContinuedoubleDefaultintElsestringForvoidIfReturnSwitch=While数据类型任何程序都要依靠数据来运行,数据因目的不同可以有不同的类型。比如,数组可以存取整型数据,价格可以用浮点型双精度数表示。在MQL4中没有专门用来表示货币值的数据类型。不同的数据类型有不同的处理速度整型数据是最快双精度需要使用特殊的协浮点型数据比较复杂整要慢一些。字符串处理速度是最慢的,因为它要分配/單分配计算机动态内存。主要的数据类型如下:=整型数据(int)布尔(bool)字符型数据(char)字符串型数据(string)浮点型数据(double)颜(color)日期时间(datetime)color型和datetime型仅仅是为了让我们更清楚地区分图表内容和输入这些参数时才有意义,这些参数可在智能交易的属性标签和自定义指标“输入标签中设置。color和datatime型数据用整数来表示。intdouble称为数值型。在表达式运算中使用了隐式类型转换(自动转换)。类型转换=intdoubleintdouble;=string;=值操作完成时,数据会转换成目标数据类型。"0.l"0.l2500000"(l0个字符)strings NULL;= //整型常量转成字符串型,结果为"0"(含l个字符)strings "Tickett:"+l2345;//表达式转成字符串型,与目标类型相同结果为"Tickett:l2345"=l2;= //整型表达式转成双精度型,结果为0.0l.08;= //表达式转成双精度型,再转成字符串型,结果为l2;= //没有类型转换,结果为0l2.0;= 表达式转换成双精度型,再转成整型,结0l.0/2.0;//没有类型转换,结0.5l2.0;=表达式转换成双精度型,和目标类型一样,结果doubleddoubled为0.5doubledstringsiiintint类型转换不但运用在常量中,还被运用在相应的变量中。整型常量十进制:=数字0—=9=,包括正负号。示例:=ll2,lll,=—956l007=十六进制:=数字0—9,=字a—f=或者A—F代表l0—l5;=0x=或者0X=开头。0x0A,0x0A,0xl2,0Xl2,0x2f,0xA3,0Xa3,0X7C7=整型数据占4字节内存空间,其数值范围介—2l474836482l47483647=之间。如果超出这个范围,则视为无效。字符常量任何用单引号括起来的单个字符或者类似'\xl0'形式的十六进ASCII=码都是整型的字符常量。字符常量中包含的一些特殊字符,如单引号(')、双引号(")问号(?)反斜杠(\)须以反斜杠开头(\)转义表如下表所示:换行制表符回车反斜线NL(LF)HTCR=\=\n\t\r\\=单引号='=\'=双引号="=\"=十六进制ASCII=hh=\xhh=如果上述字符不使用反斜杠引导,结果将不被定义:=intintintab=c'A';'$';='©';=//代码0xA9=intd//符号®代码字符数据占用4字节内存空间。其数值范围介千0�255之间。如果超=出这个范围,则视为无效。布尔型常量布尔型常量用来表示真值truefalse。它还可以用数字l0表示。TrueTRUE,FalseFALSE都可使用(字母不区分大小写)。boolboola true;=bool=b= bbool=c l;=布尔型常量占用长度4字节的内存空间0或l的值表示。浮点常量(双精度常量)浮点型常量由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分是一组十进制数字。doubledoublea l2.lll;=doubleb= doublec 0.000l;=doubled l6;=浮点型数据(双精度)占用8=字节的内存空间。其数值范围介千—l.7e-308�l.7e308之间。如果超出这个范围,结果则视为无效。字符串常量字符串常量是用双引号括起来的一连串ASCII=字符,如:"Characterconstant"。字符串常量是双引号里一组字字符串如果需要在字符串中何特殊字符都能用在字符串中字符串长度介千0255符之间如果超过这个长度,尾部多余的字符将被忽略,编译器也会有相应的提示。"This"Thisisacharacterstring"="Copyrightsymbol=\t\xA9"="thislinecontainsalinefeed"C:\\ProgramFiles\\MetaTrader4"="A"="l234567890"="0"="$"=字符串常量占用8=个字节的内存空间。其中第一部分为长整型,存储字符串缓冲区的长度,第二部分是存储字符串缓冲区的32=位地址。颜色常量颜色常量可以用三种方法表示:用字符表示、用整数表示或用颜色名(只能是已命名的Web颜色)。用字符表示的方法是用三个数字来表示三种主要颜色分量的比例:红、绿、蓝颜色常量以C开头并用单引号括起来每种颜色分量所占的比例在0255之间。用整数表示的方法是以十六进制或十进制数字的形式写出颜色值十六进数字看起来0x00RRGGBB这样,其中RR=是红色分量的比例,GG=是绿色分量的比例,BB=是蓝色分量的比例。十进制数不能直接体现红、绿、蓝的比例,而是十六进制整数的十进制表示形式。特殊的颜色名可以参阅所谓Web色表示例://用字符表示数据C'l28,l28,l28'= //灰C'0x00,0x00,0xFF'=//蓝//用颜色名表示RedYellow=Black//用整数表示0xFFFFFF 白色l67772l5 //白色0x008000 绿色32768= 绿色颜色常量占用4字节存储空间。第一个字节一般被忽略,后三个字节了红、绿、蓝的组成信息。日期时间常量日期时间常量可以当作一个文本行来表示,它由6=个部分组成:年、月日、时、分、秒,以D开头,并用单引号括起来,其中日期(年、月、日)、间(时、分、秒)、甚至两者都可以同时省略。日期时间型常量变化范围=l970.l.l-2037.l2.3l。//等千 D'//等千 D'l980.07.l9l2:00:00'=//等千 D'0l.0l.200400:00:00'=//D'[编译日期]l2:30:27'=//D'[编译日期]00:00:00'=新年D'2004.0l.0l00:00'=D'l980.07.l9D'l9.07.l980D'l9.07.l980l2'=D'0l.0l.2004'=D'l2:30:27'=D''=日期时间常量在内存中表4字节长整型数,其值是l970年l日00:00始以来的总秒数。运算符和表达式=算术运算符逻辑运算符赋值运算符+—*=/%=&&==算术运算符逻辑运算符赋值运算符+—*=/%=&&==+ *=运算符通常用在表达式中,当合适的操作数提供给他们时才有意需要特别注意标点符号,如圆括号、方括号、逗号、冒号、分号。运算符、标点符号、空格用来分割语句的不同部分。表达式=一个表达式由一个或多个操作数和运算符组成,它们可以分儿行书写。示例:=aa++;b= x= (y=*=z)/(w=+2)+l27;=以分号(;)结束的表达式是一个操作符。算术运算符算术运算符包括加法和乘法运算符:=求和i j=+2;=求差i j=—=3;=改变符号=x= —=x;=求积=z= 3=*=x;=求商i j=/5;=求模minutes time%=60;=自增=i++;=自减=k——;=自增/自减运算符不能用在表达式中。示例:=intainta=3;=a++;= 法表达式=intb=(a++)*3;= //非法表达式=赋值运算符把变量x=的值赋给变量y= y x;=把变量x=的值赋给变量y= y x;=y=+ x;=y=—=x;=y=*=x;=y=/ x;=y=%=x;=y=>>=y=<<=y=&=x;=y==y=+ x;=y=—=x;=y=*=x;=y=/ x;=y=%=x;=y=>>=y=<<=y=&=x;=y==x;=y=~=x;=y值加上xy=值减去=x=y=值乘以x=y=值除以x=求=y/x=模y=值逻辑右移=x=y=值逻辑左移=x=按位与运算按位或运算x=和y=逻辑异或表达式只能有一个赋值位运算符只能用千整逻辑移位算符中x=值只能是小千5位的二进过大的数值将会被拒绝移范围只0到3l位%=运算符求(y/x的模),其结果符号与被除数相同。关系运算符整数0代表逻辑假值=FALSE,任何非零的值代表逻辑真值=TRUE。用关系运算符或逻辑运算符组成的表达式值是0(False)或l(True)。a等千b,结果为truea b;=a不等千b,结果为truea!=b;=a小千b,结果为truea<=b;=a大千b,结果为truea>b;=a小千等千b,结果为truea<=b;=a大千等千b,结果为truea>=b;=个浮点型数值不能直接用 或!=运算符进行比较,这就是为何要把两数相减,并将所得结果与null=进行比较的原因。MetaQuotesLanguage4(MQL4)编程参考MetaQuotesLanguage4(MQL4)编程参考nnphu.d.n2008-5-3-PAGE12-布尔运算符逻辑非运算符(!)的操作数必须是算术类型。如果运算值FALSE(0),其非运算的结TRUE(l);如果运算值不同FALSE(0),其非运算的结FALSE(0)。iif(!a)Print("不'a'");=if(x<0=x>=max_bars)Print("超出范围");=y的逻辑或()运算。如y有一个为true(l),表达式值TRUE(l),否则,值FALSE(0)。逻if(x<0=x>=max_bars)Print("超出范围");=xy的逻辑与“&&“运算。如xy都是true(l),表达式值=if(p!=x=&&=p>y)Print("TRUif(p!=x=&&=p>y)Print("TRUE");=位运算符取反运算符(~)对变量值二进制代码按位取反。表达式值中所有l变为0,0变为l。bb ~n;=x= x>>y;=将二进制代码表示的x=逻辑右移y=位。右移是逻辑运算,即左侧用零填=x= x>>y;=x= x<<y;=将二进制代码表x=逻辑y位,右侧(低位)用x= x<<y;=b= ((x&y)!=0);=二进制表x=y位运算与(&如Xy个相应的二进制位都l,则b= ((x&y)!=0);=b= xy;二进制表x=位如y个相应的二进制位都0,则该位的结0,b= xy;b= x~y;二进制表x=位运算异或(~如y个相应的二进制位相异,则该位的结l,b= x~y;位运算符只适合整型。其它运算符下标数组的i个元素的序号,i整数或整型表达式。array[i]array[i]=3;//3给数组的i个元素。只有整数才能成为数组下只允许使用四维或四维以下每维索引是0到每维大小—l。举一个例子,一个50个元素组成的一维数组,引用第一个数组元素array[0],这样,最后一个数组元素将array[49]如果访问数组超出了数组下标范围,系统将会出错ERR_ARRAY_INDEX_OUT_OF_RANGE(下标超过范围)过调GetLastError()数,获取这些错误信息。调xl,x2,...,xn形式参数的函数每个形参可以是一个个变量和相应类型的表达式传递的参数用号隔开,并放在圆括号()内,函数名放在圆括号()前。用此函数返回表达式值。如果函数返回值定义为void型,这些函数调用就不能放在赋值号右边。请确认表达xl,x2,...,xn按序执行的。doubledoubleSL=Bid—25*Point;intticket=OrderSend(Symbol(),OP_BUY,l,Ask,3,SL,Ask+25*Point,"Mycomment",l23,0,Red);逗号运算符用逗号分隔的表达式是按从左到右的顺序执行。所有表达式都是先算左边再算右边结果的类型和值由右边表达式决表也可视一个范例(参见上面)。for(i=0for(i=0,j=99i<l00i++,j——)Print(数组[i][j]);优先级规则下表中同组运算符优先级相同。排在前面的运算符优先级高,排在后面的运算符优先级低。运算符按优先级顺序从高到低排列如下:从左到右从左到右函数调用引用数组元素非改变符自增自减“按位取反“位“按位与“位运算符“按位或“位运算符“按位异或“位逻辑左移逻辑乘法除求加减小小千等千大千等千不逻逻赋值加法复合赋值运算符减法复合赋值运算符乘法复合赋值运算符除法复合赋值运算符求模复合赋值运算符右移复合赋值运算符左移复合赋值运算符按位与复合赋值按位或复合赋值按位异或复合赋值运算符逗号()[]!—++——~&~<<>>*/%+—<<=>>===!=&&=+=—=*=/=%=>>=<<=&==~=,从右到左从左到右从左到右从右到左从左到右从左到右从左到从左到从左到从左到从右到从左到右注意:在MQL4程序中,运算符的优先级不同千C语言。控制语句语句描述了完成一项任务的算法操作规则。程序本身就是这样的语句序列。一条条语句之间以分号;分隔。一条语句能占一行或儿行。二个或更多语句也能书写千同一行上。控制执行顺序的语句(if、if—elseswitch、whilefor)相互嵌套。if(Monthif(Month()==l2)if(Day()==3l)Print("新年快乐!");语句块一个复合语句(一个语句块)可以由一条由大括弧{}括起的一条或多条任意类型的语句组成。大括弧{}后面不必跟着分号(;)。if(x==if(x==0){Print("无效位x=",x);return;}表达式操作符式操作符的范例:IdentifierIdentifier=expression;x=3;y=x=3;//错误Function_name(argumentl,...,argumentFunction_name(argumentl,...,argumentN);FileClose(file);空语句操作符仅仅只有一个分号(;)组成,用来表示控制语句中无任何语句。break语句break语句可以终止最邻近switch、while或forBreak语句由最近的终止条满足一定条件时完成环的执行。//搜索数组中第//搜索数组中第一个值为零的元素for(i=0;i<array_size;i++)if((array[i]==0)break;continuecontinue邻近的循环语句while或for返回循环开始,接着执行下一次循环。continue语句与break语句作用相反。// 统计数组中非零元素// 统计数组中非零元素个intfunc(intarray[]){intintsum=0;for(inti=0;i<array_size;i++){if(a[i]==0)continue;sum+=a[i];}return(sum);}returnReturn语句结束返回到调return(expression);结束当前函数的执行并带回函数的结中的表达式必须放在圆括号不使用赋值号。示例:intintCalcSum(intx,inty){return(x+y);}voidSomeFunction(){Print("HevoidSomeFunction(){Print("Hello!");return; 这个语句能删除}本函数右大括弧}表明这个不带表达式的return语句将明确执行。if—elseif(expression)operatorlelseoperator2如果条件表达式true,语句序operatorl执行语句序operator2将不执行。如果表达式false,语句序opif(expression)operatorlelseoperator2if语句的else部分可能被省略,因此,如果本语句省略了else部if语句在嵌套时可能会出现歧义。在这种情况下,else会匹配前面最近的不else部if语句。// else// else部分匹配if语句:if(x>l)if(y==2)else // else部分匹配第一if语句:if(x>l){if(y==2)z=5;}else z=6;// // if语句if(x=='a'){y=l;}elseif(x=='b'){y=2;z=3;}elseif(x=='c'){y=4;}elsePrint("ERROR");switch多分支语句switch语句比expression表达式值caseconstant值,如果相相应的语句块caseconstant值必须是一个整字符常量或常量表达式。常量表达式中不能包含变量和函数调用。Switch后面的表达式(expression)必须是整型。sswitch(expression){caseconstant:operatorscaseconstant:operators...default:operators}如果没有一case表达式值expression表达式值将后面的语句块default语句并不是必需如果没有一caseexpression值一致,default语句也不可用,那么不会执行任何动作。关键case签,即switch语句带有数case都会按序执行后面所有的语句块,直至遇break语句为止。在编译期间,编译程序将计算常量表达式的值,不允许在一个switch语句内同时存在两个相同的常量值。switcswitch(x){{case'A':Print("CASEA");break;case'B':case'C':Print("CASEBorC");break;default:Print("NOTA,BorC");break;}while循环语句如果条件表达expression值truewhile至条件表while(expression)operator;达式变false。如果条件表达式while(expression)operator;本语句执行前,表达式expression必须事先定义过。因此,如果表达式值一开始就为false,while语句根本不会执行。while(while(k<n){y=y*x;k++;}for循环语句表达l(Expressionl)定义循环的初始变量,表达2(Expression2)是循环终止条表达式2(Expression2)为真(true)的时候循环体單复直Expression2为假(false)。如Expression2false,循环将会被中断,并继续执行循环语句的下一条语句。每次循环结束后都会计算表达式3(Expression3),用千改变循环条件。ffor(Expressionl;Expression2;Expression3)operator;for下while价:EExpressionl;while(Expression2){operator;Expression3;};For语句中我们可以省略三个表达式中任一部分或全部但中分却不能省如果省略了表达2(expression2),则被视作真值for(;;)语句是一个死循相while(l)表达l表达式3都可以内嵌多个逗号(,)分隔的表达式。for(x=lfor(x=l;x<=7;x++)Print(MathPower(x,2));for(;;){Print(MathPower(x,2));x++;if(x>l0)break;}for(i=0,j=n—l;i<n;i++,j——)a[i]=a[j];函数函数是一段已命名从程序任一部分多次调由函数回值的类型说明名称形式参数和语句块传递参数的个数被限64个之内。linfunlinfunc(doublex,doublea,doubleb)//函数名称和参数列表{//语句块return(ab); 返回表达式值}返回值的类型doubleReturn语句可以返回函数内表达式的值。如有必要,表达式值的类型可以转换为函数结果类型。没有返回值的函数必须定义成“void“型。voidvoiderrmesg(strings){Print("错误:"+s);}函数的参数可能存在默认值,这些默认值是用相应类型常量定义的。intsointsomefunc(doublea,doubled=0.000l,intn=5,boolb=true,s="passedstring"){Print("要求输入a=",a);Print("下列参数被传递:d=",d,"n=",n,"b=",b,"s=",s);return(0);}intsomefunc(doublea,doubledintsomefunc(doublea,doubled=0.000l,intn,boolb,strings="passedstring"){}函数调用如果在表达式前出现一个曾未用过的名字又后跟一个左括号下境中它将被视作函数的名字。函数函数名称(xl,x2,...,xn)函数自变量(形式参数)按值的方式传递,也就是说,先计算每一个表达xl,...,xn值,再将其值传递给函数,表达式计算顺序及其值的传递要确保无误。在执行期间,系统将检查那些提供给函数的值这种形式的函数调用被称“值传调用函数是为了获得函数返回的表达式值须符合函数返回值局层次我们可以在程序的任何位置定义和说明即要在其他不能定义或说明另一个函数。intstart(){例如intstart(){doudoublesome_array[4]={0.3,l.4,2.5,3.6};doublea=linfunc(some_array,l0.5,8);//...}doublelinfunc(doublex[],doublea,doubleb){return(a*x[0]+b);}当我们使用默认参数调用函数时列表使用规则是有要求表中无默认值的参数必须指定值且不可以省默认值的参数要么全省掉,要么指定值,不可只省略其中部分参数。voidvoidsomefunc(doubleinit,doublesec=0.000l,intlevel=l0)//数原型somefunc(); //错误调用,第一个参数必须赋值。somefunc(3.l4); //正确调somefunc(3.l4,0.0002); //正确调somefunc(3.l4,0.0002,l0);//正确调当我们调用一个函数时,不可以省略参数,即使那些存在默认值的参数也somesomefunc(3.l4,,l0); //错误调用。第二个参数被省略。特殊函数在MQL4中存在三种预定义名称的函数:init()是一个在模块初始化时调用的函数,可以用此函数在开始自定义指标或者自动交易之前做初始化如果这个函数不初始化时就不会调任何函数。start()是主对收到下一跳数据后调添加到图表之后始运行之时下一跳数据之后被调对被添加到图表之后立即并初始化如果模块中根本不存在start()块(义指标)就不能执行。deinit()是一个模块的析构函数(注:借C++概念),init()函数相反的操作。Deinit()函数往往用来做“清理善后“的工作,例如对象时开辟了一片内存空间,退出模块前需要释放。如果用户没有编写该函数,它也不会执行任何操作。预定义函数可以带参数。不过,当客户端调用这些函数时,并不能从外向它传递参数,只能采用默认值start(),init()deinit()函数可从模任何一点按照常规函数规则调用,等同千其他函数。不推荐init()函数调用start()对千图表市价块初始化期间残缺不时deinit()函数必须尽快地完成任调用start()千万不要开始尝试变量变量必须在使用之前定义。变量必须拥有唯一的标识名。变量的说明包括要定义的变量名及其类型。变量的说明不是语句。基本类型如下:bool—truefalse;string—字符串;double—带浮点的双精度数。stringMessageBox;stringMessageBox;int Orders;doublebool bLog;其它类型:color—RGB色的整数;datetime-日期和时间,无符号整数,代l970年ll日上00:00始以来总秒数。其它的数据类型仅仅在输入参数说明时才有意义,可以更方便地在属性窗口查看。datetimedatetimetBegin_Data =D'2004.0l.0l00:00';color cModify_Color=C'0x44,0xB9,0xE6';数组数组是有下标的同类型的一组数据。//5//50个元素的一维整数数组//7个一维数组组成二维数组//每一维数组50个整数组成。doublem[7][50];a[50];int只有整数才能作为数组的下不允许使用四维元素下标0始维数组的最后一个元素下标是数组大小—l意味着,50个元素组成的数组中,引用数组的最后一个元素a[49]。同样的规则也适用千多维数组:任一维数组下标都是0始,到数组大小—l结束。从上例可以看出,这个二维数组的最后一个元素将会出现m[6][49]这样的下标。如果引用超出数组下标范围,系统将产生数组下标越界错误ERR_ARRAY_INDEX_OUT_OF_RANGE,这些信息可通过GetLastError()函数得到。局部变量在一个函数内部定义的变量是局部变局部变量的作用范围被限局部变量可以用任意一个表达式值进行初始化每次调用函数初始化一次局部变量。局部变量存储在函数申请的临时空间中。intsointsomefunc(){intret_code=0;return(ret_code);}形式参数传递给函数的参数都是局部变范围限形式参数与外部定义的变量名和函数内部定义的局部变量名不同调用函数时形参变须赋值,当然,在函数内,这些形参变量也可以被赋值。voidvoidfunc(intx[],doubley,boolz){if(y>0.0&&!z)Print(x[0]);...}形参变量可用常数进行初始化。在这种情况下,初始化值被当作默认值。voidfunc(intx,doublevoidfunc(intx,doubley=0.0,boolz=true){...}当调用函数时,初始化过的参数可能被省略不写,默认值会代替它们。func(lfunc(l23,0.5); //z被省略,z的默认值从外部模块导入的MQL4库函数无法初始化参数的默认值。参数采用值传递方式说任何情况下被调用函数内部如修改了参数值修改结果将不会带回主调数,但是,如果以数组作为参数,修改数组元素值是不允许的。它还可能通过引用进行参数传递(称之为引用传递或地址传递)下,通过引用传递修改将被传递给调用函数中对应的变素无法通过引用传递给过引用传递参数只能在一个模块内进提供引用传递表明参数是通过引用传递时必须在数据类型后放&符号。voidvoidfunc(int&x,double&y,double&z[]){doublecalculated_tp;...for(inti=0;i<OrdersTotal();i++){if(i==ArraySize(z)) if(OrderSelect(i)==false)z[i]=OrderOpenPrice();}x=i;y=calculated_tp;}数组也可以使用引用传递,同理,所有修改将反映在源数组中。不同千简单的参数,数组也可以通过引用传递给库函数。采用引用传递方式的参数无法初始化默认值。传递给函数的最大参数个数不得超过64个。静态变量"static(静态)"存储类型用千定义一个静态变量。在数据类型前指定"static"说明符说明定义的是一个静态变量。intsointsomefunc(){staticintflag=l0;return(flag);}静态变量被存放在内存静态存储区里结束后静态变量的值不会丢失。同一模块内所有变量,除函数的形参变量外,都能定义成静态变静态变量只能由相应类型的常量初始化,这点与一般的局部变量有所不同,局部变量可由任意类型的表达式进行初始化。如果静态变量没有明确地初始化,它将被初始化为零。静态变量只可在"init()"函数之前初始化一次。当从定义了静态变量的函数内部退出时,静态变量值不会丢失。全局变量全局变量只能定义在函数之外,与函数同级,也就是说,在任何模块中全局变量都不是局部的。intGlointGlobalFlag=l0; //全局变intstart(){...}全局变量的作用域是整个程序。全局变量可从任意函数内访问。如果它的值没有被明确初始化值就为零个全局变量只能由相应进行初始化。全局变量只可以在程序装入到客户机内存时初始化一次。注:全局定义的变量不能与那些能被GlobalVariable…()函数访问的客户端全局变量混淆。定义外部变量外部存储类型extern可以定义一个外部变量。在数据类型之前冠以externdoubleInputPexterndoubleInputParameterl=externcolorInputParameter2=intinit(){...}外部变量决定程序的数据输入,他们会直接显示在程序属性窗口。数组本身不能作为外部变量。变量初始化定义变量时可以初始化值如果变量的初始值未被明确被初始为零(0)。全局变量和静态变量仅能被相应类型的常量初始化而局部变被任意类型的表达式初始化,并不局限千常量。全局变量和静态变量只能初始化一次局部变量在被相应的函数调用都会初始化。int a[int a[4][4]={l,l,l,l, 2,2,2,2, 3,3,3,3, 4,4,4,4};=l;=MarketInfo(Symbol(),MODE_POINT);="hello";={0.0,0.236,0.382,0.5,0.6l8,l.0};doublepstringsdoublef[]nint数组元素值列表必须被包含在大括号{}省略初始化的值被认为零如初始化定义时没有指定数组大小,编译器将根据初始化值列表的大小来定义。多维数组按照一维数组的顺序进行初始化,即初始化序列中不需要另加大括号有数组,包括那些在局部范围内定义的数组,只能用常数进行初始化。外部函数定义定义在程序其它部分内的外部函数类型必须明确地说明缺乏导致在程序的编译、连接、运行时出错。说明一个外部对象时,必须使用关键字t:import。t:importt:import"user32.dll"t:t:import"lib.ex4"double round(doublevalue);t:importSendMessageA(inthWnd,intMsg,intwParam,intlParam);MessageBoxA(inthWnd,stringszText,stringszCaption,intintnType);intImport清楚地说明这些函数是从外DLL译过EX4中用的。变量的指针能传给导入DLL字符串型数据能作为指针传给相应内存块(我们应该记住,字符串数据的内部表示分为两个部分:内存块长度和内存块的指针如果有必要传递整型或双精度型数据,那么这些类型的一维组也能作为参数引用传递。t:importt:import"some_lib.dll"void PassIntegerByref(int&t:importintstart(){intarray[l];//...PassIntegerByref(array);Print(array[0]);//...}编译预处理预处理程序是MQL4编译程序的一个特殊的组成部分,用千在程序被编译之前预先准备好程序源码。预处理程序能增强程序源码的可读性MQL4中过文件可以获得结构化给常量取一个易千记忆的名字有助千增读性。预处理程序也允许MQL4程序定义特定的参数。如果t:号置千程序的第一行,那么该行就是预处理程序的控制指令。预处理程序指令以回车换行结束。预定义常量使用t:define命令,我们可以在程序中定义符号名或符号常量代表特定的字符串。随后,编译程序会把所有符号名替换成相应的字符串。事实上,这些名称可以被任意的文本替换,并不局限千数字:t:t:defineidentifiervalue常量符号名同样遵守变量名的命名规则,值可以是以下任意类型:vvoidShowCopyright(){Print("版权©200l—2007,",COMPANY_NAME);Print("http://");...t:defineCOMPANY_NAME"MetaQuotesSoftwareCorp."l000.3l4t:defineABCt:definePI编译控制MQL4程序允许指定额外的特定参数,这些参数用t:property命名,它不需要用户明确地启动程序,就可帮助客户端提供合适的服务。要注意这个功能还与技术指标的外部设定有关。t:pt:propertyidentifiervalue常数类型描述Linkstring连接公司网站网址copyrightstring公司或厂商名称stacksizeint堆栈大小library库;indicator_chart_windowvoid在图表窗口显示指标void在独立显示窗口中显示指标indicator_buffersint计算指标的缓冲区个数,最大为8indicator_minimumdouble独立显示的指标窗口下端缩放比例indicator_maximumdouble独立显示的指标窗口上端缩放比例indicator_colorNcolor线l到8的显示颜色indicator_widthNint线l到8的显示宽度indicator_styleNint线l到8的显示样式indicator_levelNdouble自定义指标的第n条水平线(nl—8)indicator_levelcolorcolor自定义指标的第n条水平线颜色(n为l—8)indicator_levelwidthint自定义指标的第n条水平线宽度(n为l—8)indicator_levelstyleint自定义指标的第n条水平线样式(n为l—8)show_confirmvoid在脚本运行之前显示确认框show_inputsvoid在脚本运行之前显示它的属性表;禁用show_confirm属性l024"hl024"http://""MetaQuotesSoftwareCorp."t:propertylinkt:propertycopyrightt:propertylibraryt:propertystacksize在所执行模块的设置中,编译程序将会保存这些已说明的值。文件包含t:include命令行可以放置在程序的任意部分,但是所有的“文件包含“通常都被统一放置在源代码的开头。调用格式:t:t:include<file_name>t:includet:inclt:includet:include"mylib.mqh"预处理程序将WinUser32.mqh文件内容替换这一行。尖括号表WinUser32.mqh文件将会从默认目录调用(通常默认

温馨提示

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

评论

0/150

提交评论