MT编程语言MQL入门全接触_第1页
MT编程语言MQL入门全接触_第2页
MT编程语言MQL入门全接触_第3页
MT编程语言MQL入门全接触_第4页
MT编程语言MQL入门全接触_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

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

文档简介

MT编程语言MQL入门(全接触)————————————————————————————————作者:————————————————————————————————日期: MT4编程语言全接触语法[Syntax]代码格式空格建、Tab键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加代码的可读性。注释多行注释使用/*作为开始到*/结束,在这之间不能够嵌套。单行注释使用//作为开始到新的一行结束,可以被嵌套到多行注释之中。示例://单行注释/*多行

注释//嵌套的单行注释注释结束*/标识符标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.示例://NAME1namelTotal_5Paper保留字下面列出的是固定的保留字。不能使用以下任何保留字进行命名。数据类型存储类型操作符其它boolexternbreakfalsecolorstaticcasetruedatetimecontinuedoubledefaultintelsestringforvoidifreturnswitchwhile数据类型[Datatypes]数据类型概述主要数据类型有:Integer(int)Boolean(bool)ëèòåðàëû(char)String(string)Floating-pointnumber(double)Color(color)Datetime(datetime)我们用Integer类型数据来作为DateTime和Color数据的存储。使用以下方式可以进行类型站换:int(bool,color,datetime);double;string;Integer类型十进制:数字0-9;0不能作为第一个字母示例:12,111,-9561007十六进制:数字0-9;拉丁字母a-f或A-F用来表示10-15;使用0x或者0X作为开始。示例:0x0A,0x12,0X12,0x2f,0xA3,0Xa3,0X7C7Integer变量的取值范围为-2147483648到2147483647。Literal类型任意在单引号中的字符或十六进制的任意ASCII码例如'\x10'都是被看作为一个字符,一些字符例如单引号('),双引号("),问号(?),反斜杠(\)和一些控制符都需要在之前加一个反斜杠(\)进行转意后表示出来:linefeedNL(LF)\nhorizontaltabHT\tcarriagereturnCR\rreverseslash\\\singlequote'\'doublequote"\"hexadecimalASCII-codehh\xhh以上字符如果不经过反斜杠进行转意将不能被使用示例:inta='A';intb='$';intc='©';//code0xA9intd='\xAE';//symbolcode®Boolean类型Boolean用来表示是和否,还可以用数字1和0进行表示。True和Flase可以忽略大小写。示例:boola=true;boolb=false;boolc=1;Floating-pointnumber类型浮点型变量在整数型后面加一个点(.)用来更精确的表示十进制数字。示例:doublea=12.111;doubleb=-956.1007;doublec=0.0001;doubled=16;浮点型的取值范围从2.2e-308到1.8e308.String类型字符串型是用来表示连续的ASCII码字符的使用连续的两个双引号来包括需要表示的内容如:"Characterconstant".示例:"Thisisacharacterstring""Copyrightsymbol\t\xA9""thislinewithLFsymbol\n""A""1234567890""0""$"Color类型颜色类型可以使用以下示例里的几种方式进行定义。示例://symbolconstantsC'128,128,128'//grayC'0x00,0x00,0xFF'//blue//namedcolorRedYellowBlack//integer-valuedrepresentation0xFFFFFF//white16777215//white0x008000//green32768//greenDatetime类型时间类型使用年、月、日、时、分、秒来进行定义,你可以使用以下示例中的方式来定义变量。示例:D'2004.01.0100:00'//NewYearD'1980.07.1912:30:27'D'19.07.198012:30:27'D'19.07.198012'//equaltoD'1980.07.1912:00:00'D'01.01.2004'//equaltoD'01.01.200400:00:00'D'12:30:27'//equaltoD'[compilationdate]12:30:27'D''//equaltoD'[compilationdate]00:00:00'运算符和表达式[Operations&Expressions]表达式一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。示例:a++;b=10;x=(y*z)/w;注:分号(;)是表达式的结束符。算术运算符Sumofvaluesi=j+2;Differenceofvaluesi=j-3;Changingtheoperationsignx=-x;Productofvaluesz=3*x;Divisionquotienti=j/5;Divisionremainderminutes=time%60;Adding1tothevariablevaluei++;Subtracting1fromthevariablevaluek--;加减1的运算符不能被嵌套在表达式中inta=3;a++;//可行的表达式intb=(a++)*3;//不可行的表达式赋值运算符注:将右侧的结果赋值给左侧的变量将x的值赋值给yy=x;将x的值加到y上面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;得到逻辑非OR的值y^=x;注:一个表达式只能有一个赋值运算符.关系运算符用返回0(False)或1(True)来表示两个量之间的关系。a是否等于ba==b;a是否不等于ba!=b;a是否小于ba<b;a是否大于ba>b;a是否小于等于ba<=b;a是否大于等于ba>=b;真假运算符否定运算符(!),用来表示真假的反面的结果。//如果a不是真的if(!a)Print("not'a'");逻辑运算符或(||)用来表示两个表达式只要有一个成立即可。示例:if(xl)Print("outofrange");逻辑运算符和(&&)用来表示两个表达式要同时成立才行。示例:if(p!=x&&p>y)Print("true");n++;位逻辑运算符~运算符对操作数执行按位求补操作。b=~n;>>运算符对操作数执行向右位移操作。x=x>>y;<<运算符对操作数执行向左位移操作。x=x<<y;一元&运算符返回操作数的地址为整型和bool类型预定义了二进制&运算符。对于整型,&计算操作数的按位“与”。对于bool操作数,&计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为true时,其结果才为true。b=((x&y)!=0);二进制|运算符是为整型和bool类型预定义的。对于整型,|对操作数进行按位“或”运算。对于bool操作数,|对操作数进行逻辑“或”计算,也就是说,当且仅当两个操作数均为false时,其结果才为false。b=x|y;为整型和bool类型预定义了^二进制操作数。对于整型,^计算操作数的按位“异或”。对于bool操作数,^计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为true时,其结果才为true。b=x^y;注:位逻辑运算符只作用于Integers类型其它运算符索引。定位在数组中i位置的值。array=3;//将3负值到array数组第i位置上使用x1,x2,...,xn这样的方法将各种值传送到function中进行运算。示例:doubleSL=Ask-25*Point;doubleTP=Ask+25*Point;intticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP,"Mycomment",123,0,Red);优先级规则下面是从上到下的运算优先规则,优先级高的将先被运算。()FunctioncallFromlefttoright[]Arrayelementselection!NegationFromlefttoright~Bitwisenegation-Signchangingoperation*MultiplicationFromlefttoright/Division%Moduledivision+AdditionFromlefttoright-Subtraction<<LeftshiftFromlefttoright>>Rightshift<LessthanFromlefttoright<=Lessthanorequals>Greaterthan>=Greaterthanorequals==EqualsFromlefttoright!=Notequal&BitwiseANDoperationFromlefttoright^BitwiseexclusiveORFromlefttoright|BitwiseORoperationFromlefttoright&&LogicalANDFromlefttoright||LogicalORFromlefttoright=AssignmentFromrighttoleft+=Assignmentaddition-=Assignmentsubtraction*=Assignmentmultiplication/=Assignmentdivision%=Assignmentmodule>>=Assignmentrightshift<<=Assignmentleftshift&=AssignmentbitwiseAND|=AssignmentbitwiseOR^=AssignmentexclusiveOR,CommaFromlefttoright操作符[Operators]格式和嵌套格式.一个操作符可以占用一行或者多行,两个或多个操作符可以占用更多的行。嵌套.执行控制符(if,if-else,switch,whileandfor)可以进行任意嵌套.复合操作符一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}.每个表达式使用分号作为结束(;)示例:if(x==0){x=1;y=2;z=3;}表达式操作符任何以分号(;)结束的表达式都被视为是一个操作符。Assignmentoperator.Identifier=expression;标识符=表达式;示例:x=3;y=x=3;//这是错误的一个操作符中只能有一个表达式。调用函数操作符Function_name(argument1,...,argumentN);函数名称(参数1,...,参数N);示例:fclose(file);空操作符只有一个分号组成(;).我们用它来表示没有任何表达式的空操作符.停止操作符一个break;,我们将其放在嵌套内的指定位置,用来在指定情况下跳出循环操作.示例://从0开始搜索数组for(i=0;i<ARRAY_SIZE;I++)if((array==0)break;继续操作符一个continue;我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环。示例://summaryofnonzeroelementsofarrayintfunc(intarray[]){intarray_size=ArraySize(array);intsum=0;for(inti=0;i{if(a==0)continue;sum+=a;}return(sum);}返回操作符一个return;将需要返回的结果放在return后面的()中。示例:return(x+y);条件操作符ifif(expression)operator;如果表达式为真那么执行操作。示例:if(a==x)temp*=3;temp=MathAbs(temp);条件操作符if-elseif(expression)operator1elseoperator2如果表达式为真那么执行operator1,如果为假执行operator2,else后还可以跟进多个if执行多项选择。详见示例。示例:if(x>1)if(y==2)z=5;elsez=6;if(x>l){if(y==2)z=5;}else{z=6;}//多项选择if(x=='a'){y=1;}elseif(x=='b'){y=2;z=3;}elseif(x=='c'){y=4;}else{Print("ERROR");}选择操作符switchswitch(expression){caseconstant1:operators;break;caseconstant2:operators;break;...default:operators;break;}当表达式expression的值等于结果之一时,执行其结果下的操作。不管结果如何都将执行default中的操作。示例:case3+4://正确的caseX+Y://错误的被选择的结果只可以是常数,不可为变量或表达式。示例:switch(x){case'A':Print("CASEA\n");break;case'B':case'C':Print("CASEBorC\n");break;default:Print("NOTA,BorC\n");break;}循环操作符whilewhile(expression)operator;只要表达式expression为真就执行操作operator示例:while(k<N){y=y*x;k++;}循环操作符forfor(expression1;expression2;expression3)operator;用表达式1(expression1)来定义初始变量,当表达式2(expression2)为真的时候执行操作operator,在每次循环结束后执行表达式3(expression3)用while可以表示为这样:expression1;while(expression2){operator;expression3;};示例:for(x=1;x<=7;x++)Print(MathPower(x,2));使用for(;;)可以造成一个死循环如同while(true)一样.表达式1和表达式3都可以内嵌多个用逗号(,)分割的表达式。示例:for(i=0,j=n-l;i<N;I++,J--)a=a[j];函数[Function]函数定义一个函数是由返回值、输入参数、内嵌操作所组成的。示例:double//返回值类型linfunc(doublex,doublea,doubleb)//函数名和输入参数{//内嵌的操作return(a*x+b);//返回值}如果没有返回值那么返回值的类型可以写为void示例:voiderrmesg(strings){Print("error:"+s);}函数调用function_name(x1,x2,...,xn)示例:intsomefunc(){doublea=linfunc(0.3,10.5,8);}doublelinfunc(doublex,doublea,doubleb){return(a*x+b);}特殊函数init()、deinit()和start()init()在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。deinit()在卸载时调用,可以用此函数在去处自定义指标或者自动交易之前做初始化操作。start()当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行。变量[Variables]定义变量定义基本类型基本类型包括string-字符串型;int-整数型;double-双精度浮点数型;bool-布尔型示例:stringMessageBox;intOrders;doubleSymbolPrice;boolbLog;定义附加类型附加类型包括datetime-时间型,使用无符号整型数字存储,是1970.1.10:0:0开始的秒数color-颜色,使用三色的整型数字编码而成示例:externdatetimetBegin_Data=D'2004.01.0100:00';externcolorcModify_Color=C'0x44,0xB9,0xE6';定义数组类型示例:inta[50];//一个一维由五十个int组成的数组doublem[7][50];//一个两维由7x50个double组成的数组内部变量定义内部变量顾名思义是在内部使用的,可以理解为在当前嵌套内所使用的变量。函数参数定义示例:voidfunc(intx,doubley,boolz){...}函数的参数内的变量只能在函数内才生效,在函数外无法使用,而且在函数内对变量进行的修改在函数外无法生效。调用函数示例:func(123,0.5);如果有需要在变量传入由参数传入函数内操作后保留修改在函数外生效的情况的话,可以在参数定义的类型名称后加上修饰符(&)。示例:voidfunc(int&x,double&y,double&z[]){...}静态变量定义在数据类型前加上static就可以将变量定义成静态变量示例:{staticintflag}全局变量定义全局变量是指在整个程序中都能够调用的变量,只需将变量定义卸载所有嵌套之外即可。示例:intGlobal_flag;intstart(){...}附加变量定义附加变量可以允许由用户自己输入。示例:externdoubleInputParameter1=1.0;intinit(){...}初始化变量变量必须经过初始化才可以使用。基本类型示例:intmt=1;//integer初始化//double初始化doublep=MarketInfo(Symbol(),MODE_POINT);//string初始化strings="hello";数组类型示例:intmta[6]={1,4,9,16,25,36};外部函数引用示例:#import"user32.dll"intMessageBoxA(inthWnd,stringszText,stringszCaption,intnType);intSendMessageA(inthWnd,intMsg,intwParam,intlParam);#import"lib.ex4"doubleround(doublevalue);#import预处理程序[Preprocessor]定义常数#defineidentifier_value常数可以是任何类型的,常数在程序中不可更改。示例:#defineABC100#definePI0.314#defineCOMPANY_NAME"MetaQuotesSoftwareCorp."编译参数定义#propertyidentifier_value示例:#propertylink"http://www.metaquotes.net"#propertycopyright"MetaQuotesSoftwareCorp."#propertystacksize1024以下是所有的参数名称:参数名称类型说明linkstring设置一个链接到公司网站copyrightstring公司名称stacksizeint堆栈大小indicator_chart_windowvoid显示在走势图窗口indicator_separate_windowvoid显示在新区块indicator_buffersint显示缓存最高8indicator_minimumint图形区间最低点indicator_maximumint图形区间最高点indicator_colorNcolor第N根线的颜色,最高8根线indicator_levelNdoublepredefinedlevelNforseparatewindowcustomindicatorshow_confirmvoid当程序执行之前是否经过确认show_inputsvoidbeforescriptrunitspropertysheetappears;disablesshow_confiperty嵌入文件#include<file_name>示例:#include<win32.h>#include"file_name"示例:#include"mylib.h"引入函数或其他模块#import"file_name"func1();func2();#import示例:#import"user32.dll"intMessageBoxA(inthWnd,stringlpText,stringlpCaption,intuType);intMessageBoxExA(inthWnd,stringlpText,stringlpCaption,intuType,intwLanguageId);#import"melib.ex4"#import"gdi32.dll"intGetDC(inthWnd);intReleaseDC(inthWnd,inthDC);#import账户信息[AccountInformation]doubleAccountBalance()返回账户余额示例:Print("Accountbalance=",AccountBalance());doubleAccountCredit()返回账户信用点数示例:Print("Accountnumber",AccountCredit());stringAccountCompany()返回账户公司名示例:Print("Accountcompanyname",AccountCompany());stringAccountCurrency()返回账户所用的通货名称示例:Print("accountcurrencyis",AccountCurrency());doubleAccountEquity()返回资产净值示例:Print("Accountequity=",AccountEquity());doubleAccountFreeMargin()Returnsfreemarginvalueofthecurrentaccount.示例:Print("Accountfreemargin=",AccountFreeMargin());intAccountLeverage()返回杠杆比率示例:Print("Account#",AccountNumber(),"leverageis",AccountLeverage());doubleAccountMargin()Returnsmarginvalueofthecurrentaccount.示例:Print("Accountmargin",AccountMargin());stringAccountName()返回账户名称示例:Print("Accountname",AccountName());intAccountNumber()返回账户数字示例:Print("accountnumber",AccountNumber());doubleAccountProfit()返回账户利润示例:Print("Accountprofit",AccountProfit());数组函数[ArrayFunctions]intArrayBsearch(doublearray[],doublevalue,intcount=WHOLE_ARRAY,intstart=0,intdirection=MODE_ASCEND)搜索一个值在数组中的位置此函数不能用在字符型或连续数字的数组上.::输入参数array[]-需要搜索的数组value-将要搜索的值count-搜索的数量,默认搜索所有的数组start-搜索的开始点,默认从头开始direction-搜索的方向,MODE_ASCEND顺序搜索MODE_DESCEND倒序搜索示例:datetimedaytimes[];intshift=10,dayshift;//AlltheTime[]timeseriesaresortedindescendantmodeArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);if(Time[shift]>>=daytimes[0])dayshift=0;else{dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);if(Period()<PERIOD_D1)dayshift++;}Print(TimeToStr(Time[shift]),"correspondsto",dayshift,"daybaropenedat",TimeToStr(daytimes[dayshift]));intArrayCopy(object&dest[],objectsource[],intstart_dest=0,intstart_source=0,intcount=WHOLE_ARRAY)复制一个数组到另外一个数组。只有double[],int[],datetime[],color[],和bool[]这些类型的数组可以被复制。::输入参数dest[]-目标数组source[]-源数组start_dest-从目标数组的第几位开始写入,默认为0start_source-从源数组的第几位开始读取,默认为0count-读取多少位的数组示例:doublearray1[][6];doublearray2[10][6];//fillarraywithsomedataArrayCopyRates(array1);ArrayCopy(array2,array1,0,Bars-9,10);//nowarray2hasfirst10barsinthehistoryintArrayCopyRates(double&dest_array[],stringsymbol=NULL,inttimeframe=0)复制一段走势图上的数据到一个二维数组,数组的第二维只有6个项目分别是:0-时间,1-开盘价,2-最低价,3-最高价,4-收盘价,5-成交量.::输入参数dest_array[]-目标数组symbol-标示,当前所需要的通货的标示timeframe-图表的时间线示例:doublearray1[][6];ArrayCopyRates(array1,"EURUSD",PERIOD_H1);Print("Currentbar",TimeToStr(array1[0][0]),"Open",array1[0][1]);intArrayCopySeries(double&array[],intseries_index,stringsymbol=NULL,inttimeframe=0)复制一个系列的走势图数据到数组上注:如果series_index是MODE_TIME,那么第一个参数必须是日期型的数组::输入参数dest_array[]-目标数组series_index-想要取的系列的名称或编号,0-5symbol-标示,当前所需要的通货的标示timeframe-图表的时间线示例:datetimedaytimes[];intshift=10,dayshift;//AlltheTime[]timeseriesaresortedindescendantmodeArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);if(Time[shift]>=daytimes[0])dayshift=0;else{dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);if(Period()}Print(TimeToStr(Time[shift]),"correspondsto",dayshift,"daybaropenedat",TimeToStr(daytimes[dayshift]));intArrayDimension(intarray[])返回数组的维数::输入参数array[]-需要检查的数组示例:intnum_array[10][5];intdim_size;dim_size=ArrayDimension(num_array);//dim_sizeis2boolArrayGetAsSeries(objectarray[])检查数组是否是有组织序列的数组(是否从最后到最开始排序过的),如果不是返回否::输入参数array[]-需要检查的数组示例:if(ArrayGetAsSeries(array1)==true)Print("array1isindexedasaseriesarray");elsePrint("array1isindexednormally(fromlefttoright)");intArrayInitialize(double&array[],doublevalue)对数组进行初始化,返回经过初始化的数组项的个数::输入参数array[]-需要初始化的数组value-新的数组项的值示例://----把所有数组项的值设置为2.1doublemyarray[10];ArrayInitialize(myarray,2.1);boolArrayIsSeries(objectarray[])检查数组是否连续的(time,open,close,high,low,orvolume).::输入参数array[]-需要检查的数组示例:if(ArrayIsSeries(array1)==false)ArrayInitialize(array1,0);else{Print("Seriesarraycannotbeinitialized!");return(-1);}intArrayMaximum(doublearray[],intcount=WHOLE_ARRAY,intstart=0)找出数组中最大值的定位::输入参数array[]-需要检查的数组count-搜索数组中项目的个数start-搜索的开始点示例:doublenum_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};intmaxValueIdx=ArrayMaximum(num_array);Print("Maxvalue=",num_array[maxValueIdx]);intArrayMinimum(doublearray[],intcount=WHOLE_ARRAY,intstart=0)找出数组中最小值的定位::输入参数array[]-需要检查的数组count-搜索数组中项目的个数start-搜索的开始点示例:doublenum_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};doubleminValueidx=ArrayMinimum(num_array);Print("Minvalue=",num_array[minValueIdx]);intArrayRange(objectarray[],intrange_index)取数组中指定维数中项目的数量。::输入参数array[]-需要检查的数组range_index-指定的维数示例:intdim_size;doublenum_array[10,10,10];dim_size=ArrayRange(num_array,1);intArrayResize(object&array[],intnew_size)重定义数组大小::输入参数array[]-需要检查的数组new_size-第一维中数组的新大小示例:doublearray1[][4];intelement_count=ArrayResize(array,20);//数组中总项目数为80boolArraySetAsSeries(double&array[],boolset)设置指数数组为系列数组,数组0位的值是最后的值。返回之前的数组状态::输入参数array[]-需要处理的数组set-是否是设置为系列数组,true或者false示例:doublemacd_buffer[300];doublesignal_buffer[300];inti,limit=ArraySize(macd_buffer);ArraySetAsSeries(macd_buffer,true);for(i=0;imacd_buffer=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);for(i=0;isignal_buffer=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);intArraySize(objectarray[])返回数组的项目数::输入参数array[]-需要处理的数组示例:intcount=ArraySize(array1);for(inti=0;i{//dosomecalculations.}intArraySort(double&array[],intcount=WHOLE_ARRAY,intstart=0,intsort_dir=MODE_ASCEND)对数组进行排序,系列数组不可进行排序::输入参数array[]-需要处理的数组count-对多少个数组项进行排序start-排序的开始点sort_dir-排序方式,MODE_ASCEND顺序排列MODE_DESCEND倒序排列示例:doublenum_array[5]={4,1,6,3,9};//nowarraycontainsvalues4,1,6,3,9ArraySort(num_array);//nowarrayissorted1,3,4,6,9ArraySort(num_array,MODE_DESCEND);//nowarrayissorted9,6,4,3,1类型转换函数[ConversionFunctions]stringCharToStr(intchar_code)将字符型转换成字符串型结果返回::输入参数char_code-字符的ACSII码示例:stringstr="WORL"+CharToStr(44);//44iscodefor'D'//resultingstringwillbeWORLDstringDoubleToStr(doublevalue,intdigits)将双精度浮点型转换成字符串型结果返回::输入参数value-浮点型数字digits-小数点后多少位,0-8示例:stringvalue=DoubleToStr(1.28473418,5);//valueis1.28473doubleNormalizeDouble(doublevalue,intdigits)将双精度浮点型格式化后结果返回::输入参数value-浮点型数字digits-小数点后多少位,0-8示例:doublevar1=0.123456789;Print(NormalizeDouble(var1,5));//output:0.12346doubleStrToDouble(stringvalue)将字符串型转换成双精度浮点型结果返回::输入参数value-数字的字符串示例:doublevar=StrToDouble("103.2812");intStrToInteger(stringvalue)将字符串型转换成整型结果返回::输入参数value-数字的字符串示例:intvar1=StrToInteger("1024");datetimeStrToTime(stringvalue)将字符串型转换成时间型结果返回,输入格式为yyyy.mm.ddhh:mi::输入参数value-时间的字符串示例:datetimevar1;var1=StrToTime("2003.8.1217:35");var1=StrToTime("17:35");//returnswithcurrentdatevar1=StrToTime("2003.8.12");//returnswithmidnighttime"00:00"stringTimeToStr(datetimevalue,intmode=TIME_DATE|TIME_MINUTES)将时间型转换成字符串型返回::输入参数value-时间的数字,从1970.1.10:0:0到现在的秒数mode-返回字符串的格式TIME_DATE(yyyy.mm.dd),TIME_MINUTES(hh:mi),TIME_SECONDS(hh:mi:ss)示例:strignvar1=TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS);公用函数[CommonFunctions]voidAlert(...)弹出一个显示信息的警告窗口::输入参数...-任意值,如有多个可用逗号分割示例:if(Close[0]>SignalLevel)Alert("Closepricecoming",Close[0],"!!!");stringClientTerminalName()返回客户终端名称示例:Print("Terminalnameis",ClientTerminalName());stringCompanyName()返回公司名称示例:Print("Comis",CompanyName());voidComment(...)显示信息在走势图左上角::输入参数...-任意值,如有多个可用逗号分割示例:doublefree=AccountFreeMargin();Comment("Accountfreemarginis",DoubleToStr(free,2),"\n","Currenttimeis",TimeToStr(CurTime()));intGetLastError()取最后错误在错误中的索引位置示例:interr;inthandle=FileOpen("somefile.dat",FILE_READ|FILE_BIN);if(handle<1){err=GetLastError();Print("error(",err,"):",ErrorDescription(err));return(0);}intGetTickCount()取时间标记,函数取回用毫秒标示的时间标记。示例:intstart=GetTickCount();//dosomehardcalculation...Print("Calculationtimeis",GetTickCount()-start,"milliseconds.");voidHideTestIndicators(boolhide)使用此函数设置一个在ExpertAdvisor的开关,在测试完成之前指标不回显示在图表上。::输入参数hide-是否隐藏True或者False示例:HideTestIndicators(true);boolIsConnected()返回客户端是否已连接示例:if(!IsConnected()){Print("Connectionisbroken!");return(0);}//Expertbodythatneedopenedconnection//...boolIsDemo()返回是否是模拟账户示例:if(IsDemo())Print("Iamworkingondemoaccount");elsePrint("Iamworkingonrealaccount");boolIsDllsAllowed()返回是否允许载入Dll文件示例:#import"user32.dll"intMessageBoxA(inthWnd,stringszText,stringszCaption,intnType);......if(IsDllsAllowed()==false){Print("DLLcallisnotallowed.Expertscannotrun.");return(0);}//expertbodythatcallsexternalDLLfunctionsMessageBoxA(0,"anmessage","Message",MB_OK);boolIsLibrariesAllowed()返回是否允许载入库文件示例:#import"somelibrary.ex4"intsomefunc();......if(IsLibrariesAllowed()==false){Print("Librarycallisnotallowed.Expertscannotrun.");return(0);}//expertbodythatcallsexternalDLLfunctionssomefunc();boolIsStopped()返回是否处于停止状态示例:while(expr!=false){if(IsStopped()==true)return(0);//longtimeprocesingcycle//...}boolIsTesting()返回是否处于测试模式示例:if(IsTesting())Print("Iamtestingnow");boolIsTradeAllowed()返回是否允许交易示例:if(IsTradeAllowed())Print("Tradeallowed");doubleMarketInfo(stringsymbol,inttype)返回市场当前情况::输入参数symbol-通货代码type-返回结果的类型示例:doublevar;var=MarketInfo("EURUSD",MODE_BID);intMessageBox(stringtext=NULL,stringcaption=NULL,intflags=EMPTY)弹出消息窗口,返回消息窗口的结果::输入参数text-窗口显示的文字caption-窗口上显示的标题flags-窗口选项开关示例:#includeif(ObjectCreate("text_object",OBJ_TEXT,0,D'2004.02.2012:30',1.0045)==false){intret=MessageBox("ObjectCreate()failswithcode"+GetLastError()+"\nContinue?","Question",MB_YESNO|MB_ICONQUESTION);if(ret==IDNO)return(false);}//continueintPeriod()返回图表时间线的类型示例:Print("Periodis",Period());voidPlaySound(stringfilename)播放音乐文件::输入参数filename-音频文件名示例:if(IsDemo())PlaySound("alert.wav");voidPrint(...)将文本打印在结果窗口内::输入参数...-任意值,复数用逗号分割示例:Print("Accountfreemarginis",AccountFreeMargin());Print("Currenttimeis",TimeToStr(CurTime()));doublepi=3.141592653589793;Print("PInumberis",DoubleToStr(pi,8));//Output:PInumberis3.14159265//Arrayprintingfor(inti=0;i<10;i++)Print(Close);boolRefreshRates()返回数据是否已经被刷新过了示例:intticket;while(true){ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expertcomment",255,0,CLR_NONE);if(ticket<=0){interror=GetLastError();if(error==134)break;//notenoughmoneyif(error==135)RefreshRates();//priceschangedbreak;}else{OrderPrint();break;}//----10secondswaitSleep(10000);}voidSendMail(stringsubject,stringsome_text)发送邮件到指定信箱,需要到菜单Tools->Options->Email中将邮件打开.::输入参数subject-邮件标题some_text-邮件内容示例:doublelastclose=Close[0];if(lastclose<MY_SIGNAL)SendMail("fromyourexpert","Pricedroppeddownto"+DoubleToStr(lastclose));stringServerAddress()返回服务器地址示例:Print("Serveraddressis",ServerAddress());voidSleep(intmilliseconds)设置线程暂停时间::输入参数milliseconds-暂停时间1000=1秒示例:Sleep(5);voidSpeechText(stringtext,intlang_mode=SPEECH_ENGLISH)使用Speech进行语音输出::输入参数text-阅读的文字lang_mode-语音模式SPEECH_ENGLISH(默认的)或SPEECH_NATIVE示例:doublelastclose=Close[0];SpeechText("Pricedroppeddownto"+DoubleToStr(lastclose));stringSymbol()返回当前当前通货的名称示例:inttotal=OrdersTotal();for(intpos=0;pos<TOTAL;POS++){//checkselectionresultbecouseordermaybeclosedordeletedatthistime!if(OrderSelect(pos,SELECT_BY_POS)==false)continue;if(OrderType()>OP_SELL||OrderSymbol()!=Symbol())continue;//dosomeordersprocessing...}intUninitializeReason()取得程序末初始化的理由示例://thisisexampleintdeinit(){switch(UninitializeReason()){caseREASON_CHARTCLOSE:caseREASON_REMOVE:CleanUp();break;//cleanupandfreeallexpert'sresources.caseREASON_RECOMPILE:caseREASON_CHARTCHANGE:caseREASON_PARAMETERS:caseREASON_ACCOUNT:StoreData();break;//preparetorestart}//...}自定义指标函数[CustomIndicatorFunctions]voidIndicatorBuffers(intcount)设置自定义指标缓存数::输入参数count-缓存数量示例:#propertyindicator_separate_window#propertyindicator_buffers1#propertyindicator_color1Silver//----indicatorparametersexternintFastEMA=12;externintSlowEMA=26;externintSignalSMA=9;//----indicatorbuffersdoubleind_buffer1[];doubleind_buffer2[];doubleind_buffer3[];//+------------------------------------------------------------------+//|Customindicatorinitializationfunction|//+------------------------------------------------------------------+intinit(){//----2additionalbuffersareusedforcounting.IndicatorBuffers(3);//----drawingsettingsSetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);SetIndexDrawBegin(0,SignalSMA);IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);//----3indicatorbuffersmappingSetIndexBuffer(0,ind_buffer1);SetIndexBuffer(1,ind_buffer2);SetIndexBuffer(2,ind_buffer3);//----nameforDataWindowandindicatorsubwindowlabelIndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");//----initializationdonereturn(0);}intIndicatorCounted()返回缓存数量示例:intstart(){intlimit;intcounted_bars=IndicatorCounted();//----checkforpossibleerrorsif(counted_bars<0)return(-1);//----lastcountedbarwillberecountedif(counted_bars>0)counted_bars--;limit=Bars-counted_bars;//----mainloopfor(inti=0;i{//----ma_shiftsetto0becauseSetIndexShiftcalledaboweExtBlueBuffer=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);ExtRedBuffer=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);ExtLimeBuffer=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);}//----donereturn(0);}voidIndicatorDigits(intdigits)设置指标精确度::输入参数digits-小数点后的小数位数示例:#propertyindicator_separate_window#propertyindicator_buffers1#propertyindicator_color1Silver//----indicatorparametersexternintFastEMA=12;externintSlowEMA=26;externintSignalSMA=9;//----indicatorbuffersdoubleind_buffer1[];doubleind_buffer2[];doubleind_buffer3[];//+------------------------------------------------------------------+//|Customindicatorinitializationfunction|//+------------------------------------------------------------------+intinit(){//----2additionalbuffersareusedforcounting.IndicatorBuffers(3);//----drawingsettingsSetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);SetIndexDrawBegin(0,SignalSMA);IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);//----3indicatorbuffersmappingSetIndexBuffer(0,ind_buffer1);SetIndexBuffer(1,ind_buffer2);SetIndexBuffer(2,ind_buffer3);//----nameforDataWindowandindicatorsubwindowlabelIndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");//----initializationdonereturn(0);}voidIndicatorShortName(stringname)设置指标的简称::输入参数name-新的简称示例:#propertyindicator_separate_window#propertyindicator_buffers1#propertyindicator_color1Silver//----indicatorparametersexternintFastEMA=12;externintSlowEMA=26;externintSignalSMA=9;//----indicatorbuffersdoubleind_buffer1[];doubleind_buffer2[];doubleind_buffer3[];//+------------------------------------------------------------------+//|Customindicatorinitializationfunction|//+------------------------------------------------------------------+intinit(){//----2additionalbuffersareusedforcounting.IndicatorBuffers(3);//----drawingsettingsSetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);SetIndexDrawBegin(0,SignalSMA);IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);//----3indicatorbuffersmappingSetIndexBuffer(0,ind_buffer1);SetIndexBuffer(1,ind_buffer2);SetIndexBuffer(2,ind_buffer3);//----nameforDataWindowandindicatorsubwindowlabelIndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");//----initializationdonereturn(0);}voidSetIndexArrow(intindex,intcode)在指标上设置一个箭头符号::输入参数index-第几根指标线0-7code-符号的编码,参照Wingdings字体示例:SetIndexArrow(0,217);boolSetIndexBuffer(intindex,doublearray[])设置指标线的缓存数组::输入参数index-第几根指标线0-7array[]-缓存的数组示例:doubleExtBufferSilver[];intinit(){SetIndexBuffer(0,ExtBufferSilver);//setbufferforfirstline//...}voidSetIndexDrawBegin(intindex,intbegin)设置划线的开始点::输入参数index-第几根指标线0-7begin-划线的开始点示例:#propertyindicator_separate_window#propertyindicator_buffers1#propertyindicator_color1Silver//----indicatorparametersexterFastEMA=12;externintSlowEMA=26;externintSignalSMA=9;//----indicatorbuffersdoubleind_buffer1[];doubleind_buffer2[];doubleind_buffer3[];//+------------------------------------------------------------------+//|Customindicatorinitializationfunction|//+------------------------------------------------------------------+intinit(){//----2additionalbuffersareusedforcounting.IndicatorBuffers(3);//----drawingsettingsSetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);SetIndexDrawBegin(0,SignalSMA);IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);//----3indicatorbuffersmappingSetIndexBuffer(0,ind_buffer1);SetIndexBuffer(1,ind_buffer2);SetIndexBuffer(2,ind_buffer3);//----nameforDataWindowandindicatorsubwindowlabelIndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");//----initializati

温馨提示

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

评论

0/150

提交评论