MT4智能交易系统编程语言语法规则.pdf

上传人:罗晋 文档编号:6064545 上传时间:2020-09-04 格式:PDF 页数:99 大小:617.05KB
返回 下载 相关 举报
MT4智能交易系统编程语言语法规则.pdf_第1页
第1页 / 共99页
MT4智能交易系统编程语言语法规则.pdf_第2页
第2页 / 共99页
MT4智能交易系统编程语言语法规则.pdf_第3页
第3页 / 共99页
MT4智能交易系统编程语言语法规则.pdf_第4页
第4页 / 共99页
MT4智能交易系统编程语言语法规则.pdf_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《MT4智能交易系统编程语言语法规则.pdf》由会员分享,可在线阅读,更多相关《MT4智能交易系统编程语言语法规则.pdf(99页珍藏版)》请在三一文库上搜索。

1、MT4 智能交易系统编程语法规则 外汇智能工具网 Http:/BBS.FX-SmartT 语法语法 Syntax 代码格式代码格式 空格建、Tab 键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加你带骂得可读性。 注释注释 多行注释使用 /* 作为开始到 */ 结束,在这之间不能够嵌套。单行注释使用 / 作为开始到新的一行结束,可以被嵌套到多 行注释之中。 示例: / 单行注释 /* 多行 注释 / 嵌套的单行注释 注释结束 */ 标识符标识符 标识符用来给变量、函数和数据类型进行命名,长度不能超过 31 一个字节 你可以使用数字 0- 9、拉丁字母大写 A- Z 和小写

2、a- z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能 和保留字冲突. 示例: / NAME1 namel Total_5 Paper 保留字保留字 下面列出的是固定的保留字。不能使用以下任何保留字进行命名。 数据类型数据类型 存储类型存储类型 操作符操作符 其它其它 bool extern break false color static case true datetime continue double default int else string for void if return switch while 数据类型数据类型 Data types 数据类型概

3、述数据类型概述 主要数据类型有: Integer (int) Boolean (bool) 第 1 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT Char (char) String (string) Floating- point number (double) Color (color) Datetime (datetime) 我们用 Integer 类型数据来作为 DateTime 和 Color 数据的存储。 使用以下方式可以进行类型站换: int (b

4、ool,color,datetime); double; string; Integer 类型类型 十进制十进制: 数字 0- 9;0 不能作为第一个字母 示例: 12, 111, - 956 1007 十六进制十六进制: 数字 0- 9;拉丁字母 a- f 或 A- F 用来表示 10- 15;使用 0 x 或者 0X 作为开始。 示例: 0 x0A, 0 x12, 0X12, 0 x2f, 0 xA3, 0Xa3, 0X7C7 Integer 变量的取值范围为- 2147483648 到 2147483647。 Literal 类型类型 任意在单引号中的字符或十六进制的任意 ASCII 码

5、例如x10都是被看作为一个字符, 一些字符例如单引号(),双引号(),问号(?),反斜杠()和一些控制符都需要在之前加一个反斜杠()进行转意后表示出来: line feed NL (LF) n horizontal tab HT t carriage return CR r reverse slash single quote double quote hexadecimal ASCII- code hh xhh 以上字符如果不经过反斜杠进行转意将不能被使用 示例: int a = A; int b = $; int c = ; / code 0 xA9 int d = xAE; / symb

6、ol code Boolean 类型类型 Boolean 用来表示 是 和 否, 还可以用数字 1 和 0 进行表示。True 和 Flase 可以忽略大小写。 示例: MT4 智能交易系统编程语法规则 第 2 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT bool a = true; bool b = false; bool c = 1; Floating-point number 类型类型 浮点型变量在整数型后面加一个点(.)用来更精确的表示十进制数字。 示

7、例: double a = 12.111; double b = - 956.1007; double c = 0.0001; double d = 16; 浮点型的取值范围从 2.2e- 308 到 1.8e308. String 类型类型 字符串型是用来表示连续的 ASCII 码字符的使用连续的两个双引号来包括需要表示的内容如:Character constant. 示例: This is a character string Copyright symbol txA9 this line with LF symbol n A 1234567890 0 $ Color 类型类型 颜色类型可

8、以使用以下示例里的几种方式进行定义。 示例: / symbol constants C128,128,128 / gray C0 x00,0 x00,0 xFF / blue / named color Red Yellow Black / integer- valued representation 0 xFFFFFF / white 16777215 / white 0 x008000 / green 32768 / green Datetime 类型类型 时间类型使用年、月、日、时、分、秒来进行定义,你可以使用以下示例中的方式来定义变量。 示例: D2004.01.01 00:00 /

9、New Year D1980.07.19 12:30:27 MT4 智能交易系统编程语法规则 第 3 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT D19.07.1980 12:30:27 D19.07.1980 12 /equal to D1980.07.19 12:00:00 D01.01.2004 /equal to D01.01.2004 00:00:00 D12:30:27 /equal to Dcompilation date 12:30:27 D

10、/equal to Dcompilation date 00:00:00 运算符和表达式运算符和表达式 Operations b = 10; x = (y*z)/w; 注:分号(;)是表达式的结束符。 算术运算符算术运算符 Sum of values i = j + 2; Difference of values i = j - 3; Changing the operation sign x = - x; Product of values z = 3 * x; Division quotient i = j / 5; Division remainder minutes = time %

11、60; Adding 1 to the variable value i+; Subtracting 1 from the variable value k- - ; 加减 1 的运算符不能被嵌套在表达式中 int a=3; a+; / 可行的表达式 int b=(a+)*3; / 不可行的表达式 赋值运算符赋值运算符 注:将右侧的结果赋值给左侧的变量 将 x 的值赋值给 y y = x; 将 x 的值加到 y 上面 y += x; 在 y 上面减去 x 的值 y - = x; 得到 y 的 x 倍的值 y *= x; 得到 y 除以 x 的值 y /= x; 取 y 除以 x 后的余数 y

12、%= x; y 向右位移 x 位 y = x; y 向左位移 x 位 y = x; 得到逻辑 AND 的值 y 得到逻辑 OR 的值 y |= x; 得到逻辑非 OR 的值 y = x; 注:一个表达式只能有一个赋值运算符. 关系运算符关系运算符 MT4 智能交易系统编程语法规则 第 4 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 用返回 0(False)或 1(True)来表示两个量之间的关系。 a 是否等于 b a = b; a 是否不等于 b a !=

13、b; a 是否小于 b a b; a 是否小于等于 b a = b; 真假运算符真假运算符 否定运算符(!),用来表示真假的反面的结果。 / 如果 a 不是真的 if(!a) Print(not a); 逻辑运算符或(|)用来表示两个表达式只要有一个成立即可。 示例: if(xl) Print(out of range); 逻辑运算符和( n+; 位逻辑运算符位逻辑运算符 运算符对操作数执行按位求补操作。 b = n; 运算符对操作数执行向右位移操作。 x = x y; 运算符对操作数执行向左位移操作。 x = x y; 一元 二进制 | 运算符是为整型和 bool 类型预定义的。对于整型,|

14、 对操作数进行按位“或”运算。对于 bool 操作数,| 对操作 数进行逻辑“或”计算,也就是说,当且仅当两个操作数均为 false 时,其结果才为 false。 b = x | y; 为整型和 bool 类型预定义了 二进制操作数。对于整型, 计算操作数的按位“异或” 。对于 bool 操作数, 计算操作 MT4 智能交易系统编程语法规则 第 5 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 数的逻辑“异或” ;也就是说,当且仅当只有一个操作数为 true 时

15、,其结果才为 true。 b = x y; 注:位逻辑运算符只作用于 Integers 类型 其它运算符其它运算符 索引。定位在数组中 i 位置的值。 arrayi = 3; /将 3 负值到 array 数组第 i 位置上 使用 x1,x2,.,xn 这样的方法将各种值传送到 function 中进行运算。 示例: double SL=Ask- 25*Point; double TP=Ask+25*Point; int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP, My comment,123,0,Red); 优先级规则优先级规则 下面是从上

16、到下的运算优先规则,优先级高的将先被运算。 () Function call From left to right Array element selection ! Negation From left to right Bitwise negation - Sign changing operation * Multiplication From left to right / Division % Module division + Addition From left to right - Subtraction Right shift Less than From left to r

17、ight Greater than = Greater than or equals = Equals From left to right != Not equal ) 示例: if(x=0) x=1; y=2; z=3; 表达式操作符表达式操作符 任何以分号(;)结束的表达式都被视为是一个操作符。 Assignment operator. Identifier=expression; 标识符=表达式; 示例: x=3; y=x=3; / 这是错误的 一个操作符中只能有一个表达式。 调用函数操作符调用函数操作符 Function_name(argument1,., argumentN); 函

18、数名称(参数1,.,参数N); 示例: fclose(file); 空操作符空操作符 只有一个分号组成(;).我们用它来表示没有任何表达式的空操作符. MT4 智能交易系统编程语法规则 MT4 智能交易系统编程语法规则 第 7 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 停止操作符停止操作符 一个 break; , 我们将其放在嵌套内的指定位置,用来在指定情况下跳出循环操作. 示例: / 从 0 开始搜索数组 for(i=0;i1) if(y=2) z=5;

19、else z=6; if(xl) if(y=2) z=5; else z=6; / 多项选择 if(x=a) y=1; else if(x=b) y=2; z=3; else if(x=c) y = 4; else Print(ERROR); 选择操作符选择操作符 switch switch (expression) case constant1: operators; break; case constant2: operators; break; . default: operators; break; 当表达式 expression 的值等于结果之一时,执行其结果下的操作。不管结果如何都

20、将执行 default 中的操作。 示例: case 3+4: /正确的 MT4 智能交易系统编程语法规则 第 9 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT case X+Y: /错误的 被选择的结果只可以是常数,不可为变量或表达式。 示例: switch(x) case A: Print(CASE An); break; case B: case C: Print(CASE B or Cn); break; default: Print(NOT A, B

21、or Cn); break; 循环操作符循环操作符 while while (expression) operator; 只要表达式 expression 为真就执行操作 operator 示例: while(kN) y=y*x; k+; 循环操作符循环操作符 for for (expression1; expression2; expression3) operator; 用表达式 1(expression1)来定义初始变量,当表达式 2(expression2)为真的时候执行操作 operator,在每次循环结束后执行 表达式 3(expression3) 用 while 可以表示为这样:

22、 expression1; while (expression2) operator; expression3; ; 示例: for(x=1;x=7;x+) Print(MathPower(x,2); 使用 for(;)可以造成一个死循环如同 while(true)一样. MT4 智能交易系统编程语法规则 第 10 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 表达式 1 和表达式 3 都可以内嵌多个用逗号(,)分割的表达式。 示例: for(i=0,j=n-

23、l;iN;I+,J- - ) ai=aj; 函数函数 Function 函数定义函数定义 一个函数是由返回值、输入参数、内嵌操作所组成的。 示例: double / 返回值类型 linfunc (double x, double a, double b) / 函数名和输入参数 / 内嵌的操作 return (a*x + b); / 返回值 如果没有返回值那么返回值的类型可以写为 void 示例: void errmesg(string s) Print(error: +s); 函数调用函数调用 function_name (x1,x2,.,xn) 示例: int somefunc() doub

24、le a=linfunc(0.3, 10.5, 8); double linfunc(double x, double a, double b) return (a*x + b); 特殊函数特殊函数 init()、deinit()和和 start() init()在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。 deinit()在卸载时调用,可以用此函数在去处自定义指标或者自动交易之前做初始化操作。 start()当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行。 变量变量 Variables 定义变量定义变量 定义基本类型定义基本类型 基本类型包括

25、 MT4 智能交易系统编程语法规则 第 11 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT string - 字符串型; int - 整数型; double - 双精度浮点数型; bool - 布尔型 示例: string MessageBox; int Orders; double SymbolPrice; bool bLog; 定义附加类型定义附加类型 附加类型包括 datetime - 时间型,使用无符号整型数字存储,是 1970.1.1 0:0:0 开始

26、的秒数 color - 颜色,使用三色的整型数字编码而成 示例: extern datetime tBegin_Data = D2004.01.01 00:00; extern color cModify_Color = C0 x44,0 xB9,0 xE6; 定义数组类型定义数组类型 示例: int a50; /一个一维由五十个 int 组成的数组 double m750; /一个两维由 7x50 个 double 组成的数组 内部变量定义内部变量定义 内部变量顾名思义是在内部使用的,可以理解为在当前嵌套内所使用的变量。 函数参数定义函数参数定义 示例: void func(int x, d

27、ouble y, bool z) . 函数的参数内的变量只能在函数内才生效,在函数外无法使用,而且在函数内对变量进行的修改在函数外无法生效。 调用函数示例: func(123, 0.5); 如果有需要在变量传入由参数传入函数内操作后保留修改在函数外生效的情况的话,可以在参数定义的类型名称后加上修饰符 ( int start() . 附加变量定义附加变量定义 附加变量可以允许由用户自己输入。 示例: extern double InputParameter1 = 1.0; int init() . 初始化变量初始化变量 变量必须经过初始化才可以使用。 基本类型基本类型 示例: int mt =

28、1; / integer 初始化 / double 初始化 double p = MarketInfo(Symbol(),MODE_POINT); / string 初始化 string s = hello; MT4 智能交易系统编程语法规则 第 13 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 数组类型数组类型 示例: int mta6 = 1,4,9,16,25,36; 外部函数引用外部函数引用 示例: #import user32.dll int Mes

29、sageBoxA(int hWnd ,string szText, string szCaption,int nType); int SendMessageA(int hWnd,int Msg,int wParam,int lParam); #import lib.ex4 double round(double value); #import 预处理程序预处理程序 Preprocessor 定义常数定义常数 #define identifier_value 常数可以是任何类型的,常数在程序中不可更改。 示例: #define ABC 100 #define PI 0.314 #define C

30、OMPANY_NAME MetaQuotes Software Corp. 编译参数定义编译参数定义 #property identifier_value 示例: #property link #property copyright MetaQuotes Software Corp. #property stacksize 1024 以下是所有的参数名称: 参数名称参数名称 类型类型 说明说明 link string 设置一个链接到公司网站 copyright string 公司名称 stacksize int 堆栈大小 indicator_chart_window void 显示在走势图窗口

31、 indicator_separate_window void 显示在新区块 indicator_buffers int 显示缓存最高 8 indicator_minimum int 图形区间最低点 MT4 智能交易系统编程语法规则 第 14 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT indicator_maximum int 图形区间最高点 indicator_colorN color 第 N 根线的颜色,最高 8 根线 indicator_levelN

32、double predefined level N for separate window custom indicator show_confirm void 当程序执行之前是否经过确认 show_inputs void before script run its property sheet appears; disables show_confirm property 嵌入文件嵌入文件 #include 示例: #include #include file_name 示例: #include mylib.h 引入函数或其他模块引入函数或其他模块 #import file_name fun

33、c1(); func2(); #import 示例: #import user32.dll int MessageBoxA(int hWnd,string lpText,string lpCaption, int uType); int MessageBoxExA(int hWnd,string lpText,string lpCaption, int uType,int wLanguageId); #import melib.ex4 #import gdi32.dll int GetDC(int hWnd); int ReleaseDC(int hWnd,int hDC); #import

34、账户信息账户信息 Account Information double AccountBalance() 返回账户余额 示例: Print(Account balance = ,AccountBalance(); double AccountCredit() 返回账户信用点数 MT4 智能交易系统编程语法规则 第 15 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 示例: Print(Account number , AccountCredit(); strin

35、g AccountCompany() 返回账户公司名 示例: Print(Account company name , AccountCompany(); string AccountCurrency() 返回账户所用的通货名称 示例: Print(account currency is , AccountCurrency(); double AccountEquity() 返回资产净值 示例: Print(Account equity = ,AccountEquity(); double AccountFreeMargin() Returns free margin value of the

36、 current account. 示例: Print(Account free margin = ,AccountFreeMargin(); int AccountLeverage() 返回杠杆比率 示例: Print(Account #,AccountNumber(), leverage is , AccountLeverage(); double AccountMargin() Returns margin value of the current account. 示例: Print(Account margin , AccountMargin(); string AccountNam

37、e() 返回账户名称 示例: Print(Account name , AccountName(); int AccountNumber() MT4 智能交易系统编程语法规则 第 16 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT 返回账户数字 示例: Print(account number , AccountNumber(); double AccountProfit() 返回账户利润 示例: Print(Account profit , AccountPr

38、ofit(); 数组函数数组函数 Array Functions int ArrayBsearch( double array, double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND) 搜索一个值在数组中的位置 此函数不能用在字符型或连续数字的数组上. : 输入参数输入参数 array - 需要搜索的数组 value - 将要搜索的值 count - 搜索的数量,默认搜索所有的数组 start - 搜索的开始点,默认从头开始 direction - 搜索的方向,MODE_ASCEND 顺序搜索 M

39、ODE_DESCEND 倒序搜索 示例: datetime daytimes; int shift=10,dayshift; / All the Time timeseries are sorted in descendant mode ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1); if(Timeshift else dayshift=ArrayBsearch(daytimes,Timeshift,WHOLE_ARRAY,0,MODE_DESCEND); if(Period()=daytimes0) dayshift=0; MT

40、4 智能交易系统编程语法规则 第 18 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT else dayshift=ArrayBsearch(daytimes,Timeshift,WHOLE_ARRAY,0,MODE_DESCEND); if(Period() Print(TimeToStr(Timeshift), corresponds to ,dayshift, day bar opened at , TimeToStr(daytimesdayshift);

41、int ArrayDimension( int array) 返回数组的维数 : 输入参数输入参数 array - 需要检查的数组 示例: int num_array105; int dim_size; dim_size=ArrayDimension(num_array); / dim_size is 2 bool ArrayGetAsSeries(object array) 检查数组是否是有组织序列的数组(是否从最后到最开始排序过的),如果不是返回否 : 输入参数输入参数 array - 需要检查的数组 示例: if(ArrayGetAsSeries(array1)=true) Print(

42、array1 is indexed as a series array); else Print(array1 is indexed normally (from left to right); int ArrayInitialize( double ArrayInitialize(myarray,2.1); bool ArrayIsSeries( object array) 检查数组是否连续的(time,open,close,high,low, or volume). MT4 智能交易系统编程语法规则 第 19 页,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -S

43、m a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT : 输入参数输入参数 array - 需要检查的数组 示例: if(ArrayIsSeries(array1)=false) ArrayInitialize(array1,0); else Print(Series array cannot be initialized!); return(- 1); int ArrayMaximum( double array, int count=WHOLE_ARRAY, int start=0) 找出数组中最大值的定位 : 输入参数输入参数 array -

44、 需要检查的数组 count - 搜索数组中项目的个数 start - 搜索的开始点 示例: double num_array15=4,1,6,3,9,4,1,6,3,9,4,1,6,3,9; int maxValueIdx=ArrayMaximum(num_array); Print(Max value = , num_arraymaxValueIdx); int ArrayMinimum( double array, int count=WHOLE_ARRAY, int start=0) 找出数组中最小值的定位 : 输入参数输入参数 array - 需要检查的数组 count - 搜索数组

45、中项目的个数 start - 搜索的开始点 示例: double num_array15=4,1,6,3,9,4,1,6,3,9,4,1,6,3,9; double minValueidx=ArrayMinimum(num_array); Print(Min value = , num_arrayminValueIdx); int ArrayRange( object array, int range_index) 取数组中指定维数中项目的数量。 : 输入参数输入参数 array - 需要检查的数组 range_index - 指定的维数 示例: MT4 智能交易系统编程语法规则 第 20 页

46、,共 99 页 外汇智能工具论坛 h t t p :/w w w .Fx -Sm a r t To o l .c o m 外汇智能工具网 Http:/BBS.FX-SmartT int dim_size; double num_array10,10,10; dim_size=ArrayRange(num_array, 1); int ArrayResize( object int element_count=ArrayResize(array, 20); / 数组中总项目数为 80 bool ArraySetAsSeries( double double signal_buffer300; int i,limit=ArraySize(macd_buffer); ArraySetAsSeries(macd_buffer,true); for(i=0; i macd_bufferi=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)- iMA(NULL,0,26,0,MO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1