2赞

357评论

14收藏

MQL4 Reference MQL4命令手册(完整版)

 

avatar EA狙击手 | 82485 人阅读 | 357 人评论 | 2013-07-19

目录

""
还没有人打赏,支持一下

评论|共 357 个

EA狙击手

发表于 2013-7-19 23:20:40 | 显示全部楼层

MetaQuotes Language 4 (MQL4) 是一种新的内置型程序用来编写交易策略。 这种语言可以创建你自己的智能交易,使自己的交易策略能够完全自动地执行。而且,MQL4 还能自定义客户指标,脚本和数据库。
内包含了大量可以分析当前及历史报价所必须的函数,以及一些基本的运算和逻辑操作。并内置了一些基本的指标和操作命令。
MetaEditor 4集合了编写 MQL4 程序代码的各种语句,它能帮助使用者方便地写出规范的代码。 MetaQuotes Language Dictionary 是 MQL4 语言的帮助工具,它包含了我们在使用工程中所有可能用到的函数。
MetaQuotes Language 4 可以编写不同作用的程序代码:
■智能交易 是一种连接到特定图表的自动交易系统。它能够根据设置的节点自动启动 ,当它开始运行后,它不会同时去处理另一个新的指令(也就是说必须等到当前程序完成)。 这种交易系统能够在提醒用户可以交易的同时,将交易定单自动送到交易服务器。与大多数交易系统一样, 它也能够用历史数据测试交易策略,并在图表上显示出来。
智能交易存储在 terminal_directory\experts。
■自定义指标 可用来编写新的技术指标,和内置的指标一样,它不能用来进行自动交易, 只能作为分析数据的工具。
自定义指标储存在 terminal_directory\experts\indicators。
■脚本 是执行单一功能的一段程序,和 智能交易不同,脚本不能单独执行,只能被调用。
脚本存储在 terminal_dictionary\experts\scripts。
■数据库 常被使用的自定义函数的集合。数据库不能单独运行。
数据库建议存储在terminal_directory\experts\libraries。
■包含文件 包含文件常被使用的程序块源代码,这些文件能够被包含在智能交易,脚本,客户指标和数据库 的源代码中。 使用包含文件比调用资料库更灵活快捷。
包含文件交易储存在 terminal_directory\experts\include。

EA狙击手

发表于 2013-7-19 23:20:55 | 显示全部楼层

Basics基础
MetaQuotes Language 4 (MQL4)是一种新型的交易策略内置语言。用来编写交易策略的程序语言。这种语言可以创建你自己的智能交易, 使自己的交易策略能够完全地自动执行。程序内包含了分析历史报价的必备函数, 以及一些基本的运算法和逻辑操作和一些基本的指标和操作命令。 而且,MQL4 还能自定义自己的客户指标,脚本和数据库。

EA狙击手

发表于 2013-7-19 23:21:03 | 显示全部楼层

Syntax语法
MQL4 的语法类似于C语言,除了以下这些特点:
        没有运算地址;
        没有 do ... while 语句;
        没有 goto ... 语句;
        没有 [条件][表达式 1]:[表达式 2] 语句;
        没有复合数据类型 (结构);
        复合负值是不允许的,例如:val1=val2=0; arr[i++]=val; cond=(cnt=OrdersTotal)>0; 等等;
        逻辑表达式的计算完成前不可以提前终止。

EA狙击手

发表于 2013-7-19 23:21:17 | 显示全部楼层

Comments注释
多行注释使用 /* 作为开始到 */ 结束,在这之间不能够嵌套。单行注释使用 // 作为开始到新的一行结束,可以被嵌套到多行注释之中。
示例:
// 单独注解
/*  multi-
    line         // 嵌入单独注解
    comment
*/
Identifiers标识符
标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节,你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.
示例:
NAME1 namel Total_5 Paper
Reserved words保留字
下面列出的是固定的保留字。不能使用以下任何保留字进行命名。
数据类型        储存类型        操作符        其他
bool        extern        break        false
color        static        case        true
datetime                continue       
double                default       
int                else       
string                for       
void                if       
                return       
                switch       
                while       

EA狙击手

发表于 2013-7-19 23:21:32 | 显示全部楼层

Data types数据类型
所有的程序都依靠数据来运作,数据因目的不同可以有不同的类型 。比如,访问数组可以用整型数据,价格可以用双精度的浮点型数据。在 MQL 4 中没有专门用来标记货币值的数据类型。
不同的数据类型有不同的处理速度,整型数据是最快的。 双精度的数据处理需要额外的处理器,所以处理浮点型数据比较复杂, 比处理整型数据慢一些。字符串是处理速度最慢的,因为它要存取动态内存。
主要的数据类型如下:
        整型数据 (int)
        布尔数据 (bool)
        字符数据 (char)
        字符串数据 (string)
        浮点型数据 (double)
        颜色数据 (color)
        日期时间数据 (datetime)
color 和 datetime 可以使我们更清楚的区分图表中的内容,在 expert advisor 和 indicator 中经常使用这些数据类型。颜色和日期时间数据用整数来表示。int 和 double 都属于数值(数字)型。
在表达式运算中使用强制的类型转换。
Type casting类型转换
表达式中使用强制的数据转换,转换时类型的优先级如下:
int  (bool,color,datetime);
double;
string;
在运算完成之前(除了数据已被定义的),数据会根据优先级被转换。当定义数据的操作完成前 ,数据会转换成被定义的数据类型。
示例:
int    i = 1 / 2;     // 没有类型转换,结果为 0
int    i = 1 / 2.0;   // 表达式中有浮点型数据,但会转换成整型数据,结果为 0
double d = 1.0 / 2.0; // 没有类型转换,结果为 0.5
double d = 1 / 2.0;   // 表达式计算的结果是浮点型数据,和定义的类型一样,结果为 0.5
double d = 1 / 2;     // 表达式是整型数据的计算,然后被定义为浮点型数据,结果为 0.0
类型转换不但运用在常量中,还被运用在相应的变量中。
Integer constants整数常量
十进制: 数字 0 - 9 ,包括负数。
示例:
12, 111, -956 1007
十六进制: 数字 0 - 9 , 字面 a - f 或者 A - F 代表 10 - 15; 以 0x 或者 0X 开头。
示例:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
整型数据占用 4 字节的空间,其数值范围介于 -2147483648 ~ 2147483647 之间。如果超出这个范围,则视为无效。

EA狙击手

发表于 2013-7-19 23:21:56 | 显示全部楼层

Literal constants字面常量
任何带单引号的单一字符或者十六进制的 ASCII 码如 '\x10' 都是字符数据。一些特殊的字符如单引号(')、双引号(")、问号(?)、反斜线(\)和控制符必须以反斜线开头(\), 组合表达原来的意思,如下表所示:

换行             NL (LF)  \n
制表符           HT       \t
回车             CR       \r
反斜线           \        \\
单引号           '        \'
双引号           "        \"
十六进制ASCII    hh       \xhh
如果上述字符不使用反斜线,结果将不被定义:
int a = 'A';
int b = '$';
int c = '©';      // 代码0xA9
int d = '\xAE';   //货币对代码 ®
字符数据占用 4 字节的空间。其数值范围介于 0 ~ 255 之间。如果超出这个范围,则视为无效。
Boolean constants布尔常量
Boolean 用来表示 是 和 否, 还可以用数字 1 和 0 进行表示。True和Flase可以忽略大小写。
示例:
bool a = true;
bool b = false;
bool c = 1;
它的十进制表示一个长度为4-byte的整数值。Boolean 常数可以表示0 或 1值。
Floating-point number constants (double)浮点数常量(双精度)
浮点型数据由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分为一系列十进制数字。
示例:
double a = 12.111;
double b = -956.1007;
double c = 0.0001;
double d = 16;
浮点型数据 (双精度)占用 4 字节的空间。其数值范围介于 -1.7 * e-308 ~ 1.7 * e308 之间。如果超出这个范围,则视为无效。
String constants字符串常量
字符串数据是带有双引号的一连串 ASCII 字符 ,如: "Character constant"。
字符串数据是引号里的一组字符,如果字符串中需要插入一个双引号(") 必须在它前面使用反斜线(\)。任何特殊字符都必须有前置的反斜线(\)才能在字符串中使用。 字符串可以容纳 0 到 255 个字符,如果超过这个长度,右边多余的字符将被忽略,编译器也会有相应的警示。
示例s:
"This is a character string"
"Copyright symbol \t\xA9"
"this line contains a line feed symbol \n"
"C:\\Program Files\\MetaTrader 4"
"A" "1234567890" "0" "$"
字符串数据占用 8 个字节的空间。其中第一部分为长的整型存储字符串缓冲区分布的长度。第二部分是32位的存储字符串缓冲区的地址。
Color constants颜色常数
颜色数据可以用三种方法表示: 字符数据、整型数据或者是颜色名(只能是 Web colors 中已命名的).
字符数据的表达方法是用三个数字来表示三种主要颜色:红、绿、蓝的比例。 以 C 开头,用单引号括住。数字的值在 0 ~ 255 之间按比例选取。
整数数据的表达方法使用十六进制或十进制数字。十六进制数字如 0x00BBGGRR, 其中 RR 是红色的比例,GG 是绿色的比例,BB 是蓝色的比例。十进制数不能直接体现红绿蓝的比例 ,而是十六进制数字的十进制表示方式。
特殊的颜色名可以参考Web colors set表。
示例:
// 字符数据
C'128,128,128'    // 灰色
C'0x00,0x00,0xFF' // 蓝色
// 颜色名
Red
Yellow
Black
// 整型数据
0xFFFFFF          // 白色
16777215          // 白色
0x008000          // 绿色
32768             // 绿色
颜色数据占用 4 字节的空间。第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。

EA狙击手

发表于 2013-7-19 23:22:11 | 显示全部楼层

Datetime constants日期时间常数
日期时间数据由 6 个部分的字符组成:年、月、日、时、分、秒,以 D 开头, 用单引号括起。日期(年、月、日)或者时间(时、分、秒)甚至两者一起都可以不用填写。 日期时间数据开始于 1. 1. 1970 截止到12.31. 2037
示例:
D'2004.01.01 00:00'     // 新年
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'        //等于  D'1980.07.19 12:00:00'
D'01.01.2004'           //等于  D'01.01.2004 00:00:00'
D'12:30:27'             //等于 D'[编译日期] 12:30:27'
D''                     //等于 D'[编译日期] 00:00:00'
日期时间数据占用 4 字节空间长度的整型数值。其值从1970年1月00:00开始以秒的形式显示总数。
Operations & Expressions操作表达式
一些数字和字符的组合是特别重要的,它们被称为运算符,例如:
+ - * / %     算术运算符
&& ||         逻辑运算符
= += *=       负值运算符
运算符应用在表达式中实现特定的作用。
需要特别注意标点符号如圆括号、方括号、逗号、冒号、分号。
运算符、标点符号、空格用来分割语句的不同部分。

EA狙击手

发表于 2013-7-19 23:22:30 | 显示全部楼层

Expressions表达式
一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。
示例:
a++; b = 10;
x = (y * z) /
    (w + 2) + 127;
一个表达式的最后一个分号(;) 操作符。
Arithmetical operations算术运算
算术运算符包括加法和乘法运算:
求和                   i = j + 2;
求差                   i = j - 3;
改变运算符             x = - x;
求积                   z = 3 * x;
求商                   i = j / 5;
求模                   minutes = time % 60;
自加1                  i++;
自减1                  k--;
添加1的运算符不能使用在表达式中。
示例:
int a=3;
a++;              // 有效表达式
int b=(a++)*3;    // 无效表达式
Assignment operation赋值操作
表达式的值包括左边值给出的赋值运算符。
把变量 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;
把 y 值向左做 x 位逻辑移位                y <<= x;
AND 位运算符                            y &= x;
OR 位运算符                             y |= x;
把 x 和 y 按做逻辑异或的操作              y ^= x;
表达式中可以只能有一个赋值运算符。 位运算符只能用于整型数据。逻辑移位运算符中 x 值只能是小于 5 位的二进制数,过大的数值将会被拒绝。所以移动范围只能是 0 到 31 。 用 %= 运算符 ( 用x的模板求y值),其结果等于余数。

EA狙击手

发表于 2013-7-19 23:22:42 | 显示全部楼层

Operations of relation操作关系
逻辑值FALSE代表整数零值,逻辑值TRUE 代表不同于零的任何值。
用返回0(False)或1(True)来表示两个量之间的关系。
等于b                        a = b;
不等于b                      a != b;
小于b                        a< b;
大于b                        a >b;
小于等于 b                   a <=b;
大于等于 b                   a >= b;
2个不规范的浮点型数据不能用 = 或 != 运算符比较,但是我们可以把2者相减, 正常化后和 null进行比较。
Boolean operations布尔运算
否定运算符(!),用来表示真假的反面的结果。如果运算值是FALSE (0) 结果为TRUE (1);如果运算不同于FALSE (0)等于FALSE (0) 。
if(!a) Print("不是 'a'");
x和y值的逻辑运算符或OR (||)用来表示两个表达式只要有一个成立即可。如果x和y值为真的,表达式值为TRUE (1)。否则,值为FALSE (0)。逻辑表达式被完全计算。
if(x<0 || x>=max_bars) Print("超出范围");
x和y值的逻辑运算符AND (&&)。如果x和值都是真实的,表达式值为TRUE (1)。 Otherwise, it is FALSE (0).
if(p!=x && p>y) Print("TRUE");
Bitwise operations位运算
运算符对操作数执行按位求补操作。表达式的数字值中包含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类型。

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则