MQL4命令中文详解手册
MQL4命令中文详解手册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。
MetaQuotes Language 4 (MQL4)是一种新型的贸易政策内置发言。用来编写贸易政策的轨范 发言。这种发言可能创修你己方的智能贸易, 使己方的贸易政策不妨全体地自愿履行。程 序内包蕴了领会史乘报价的必备函数, 以及少许根基的运算法和逻辑操作和少许根基的指 标和操作下令。 况且,MQL4 还能自界说己方的客户目标,剧本和数据库。
众行评释运用 /* 行动开端到 */ 解散,正在这之间不不妨嵌套。单行评释运用 // 行动开端
标识符用来给变量、函数和数据类型实行定名,长度不行横跨 31 个字节,你可能运用数字 0-9、拉丁字母大写 A-Z 和小写 a-z(巨细写有划分的)又有下划线(_)。其它首字母不行能是数 字,标识符不行和保存字冲突. 示例: NAME1 namel Total_5 Paper
扫数的轨范都寄托数据来运作,数据因宗旨分别可能有分别的类型 。比方,探访数组可能 用整型数据,代价可能用双精度的浮点型数据。正在 MQL 4 中没有特意用来象征钱银值的数 据类型。 分别的数据类型有分别的经管速率,整型数据是最疾的。 双精度的数据经管必要特地的处 理器,因而经管浮点型数据比力丰富, 比经管整型数据慢少许。字符串是经管速率最慢的, 由于它要存取动态内存。 首要的数据类型如下: 整型数据 (int) 布尔数据 (bool) 字符数据 (char) 字符串数据 (string) 浮点型数据 (double) 颜色数据 (color) 日期期间数据 (datetime) color 和 datetime 可能使咱们更分明的划分图外中的实质,正在 expert advisor 和 indicator 中时常运用这些数据类型。颜色和日期期间数据用整数来透露。int 和 double 都属于数值 (数字)型。 正在外达式运算中运用强制的类型转换。
正在运算完毕之前(除了数据已被界说的),数据会遵照优先级被转换。当界说数据的操作完毕
int i = 1 / 2.0; // 外达式中有浮点型数据,但会转换成整型数据,结果为 0
任何带单引号的简单字符或者十六进制的 ASCII 码如 \x10 都是字符数据。少许迥殊的字 符如单引号()、双引号()、问号(?)、反斜线(\)和驾驭符必需以反斜线开首(\), 组合外达原 来的有趣,如下外所示:
字符数据占用 4 字节的空间。其数值规模介于 0 ~ 255 之间。倘若胜过这个规模,则视
颜色数据可能用三种本领透露: 字符数据、整型数据或者是颜色名(只可是 Web colors 中
字符数据的外达本领是用三个数字来透露三种首要颜色:红、绿、蓝的比例。 以 C 开首,
整数数据的外达本领运用十六进制或十进制数字。十六进制数字如 0x00BBGGRR, 此中 RR
是赤色的比例,GG 是绿色的比例,BB 是蓝色的比例。十进制数不行直接显露红绿蓝的比
颜色数据占用 4 字节的空间。第一个字节凡是被渺视,后三个字节包蕴了红绿蓝的构成信
日期期间数据由 6 个局限的字符构成:年、月、日、时、分、秒,以 D 开首, 用单引号
括起。日期(年、月、日)或者期间(时、分、秒)以至两者一同都可能无须填写。 日期期间数
日期期间数据占用 4 字节空间长度的整型数值。其值从 1970 年 1 月 00:00 开端以秒的方法
一个外达式可能具有众个字符和操作符,一个外达式可能写正在几行内里。 示例: a++; b = 10; x = (y * z) /
外达式中可能只可有一个赋值运算符。 位运算符只可用于整型数据。逻辑移位运算符中 x
值只可是小于 5 位的二进制数,过大的数值将会被拒绝。因而搬动规模只可是 0 到 31 。
逻辑值 FALSE 代外整数零值,逻辑值 TRUE 代外分别于零的任何值。
2 个不榜样的浮点型数据不行用 = 或 != 运算符比力,不过咱们可能把 2 者相减, 寻常化
运算符对操作数履行按位求补操作。外达式的数字值中包蕴 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 二进制的 x 和 y 代外位逻辑运算符 OR。正在所罕有字中 x 和 y 的值都不等于零外达值包蕴 1 并 且正在扫数其他数字中包蕴 0。 b = x y; 二进制的 x 和 y 代外位逻辑运算符 EXCLUSIVE 。正在所罕有字中 x 和 y 的值都分别于二进制 值外达值包蕴 1 而且正在扫数其他数字中包蕴 0 。 b = x ^ y; 位逻辑运算符只感化于 Integers 类型。
指数 正在数组第一元素的地方,外达式值为 i 的系列数变量值。 示例: array[i] = 3; //数组的 3 的谋略值到第 i 个元素。 只要整数不妨成为数组指数。四维以下的数组是禁止的。每组的检测是从 0 到 衡量巨细-1。 特定景况下,看待维数组由 50 个元素构成,参照的第一个数组将为[0],如许终末一个数组 将是[49]。 获取胜过数组,将会产生旧例缺点 ERR_ARRAY_INDEX_OUT_OF_RANGE, 可能移用 GetLastError() 函数。 移用 x1,x2,...,xn 自变数函数 每一个自变数可能显示一个常数,一个变量和相应类型外达式。自变数的通过必需遵照通道 下令。 用此函数返回外达式值。倘若返回的外达式值为空,少许函数不行实行中转。请确认外达式 x1,x2,...,xn 是依据下令履行的。 示例: double SL=Bid-25*Point; int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,Ask+25*Point,My comment,123,0,Red); 标点操作符 从左到右的外达式用标点隔离。扫数外达式的谋略是从左至右的。结果类型和值彼此吻合, 评释外达式是确切的。参量列外可能行动外率被通过。
发言操作符必需对履行完毕职分的少许运算法操作实行描写。轨范自己是如许的序列语句 。 语句逐一随后以分号涣散。 一个语句能吞没一条或几条线。二个或更众语句大概位于同样线。独自履行下令的语句(if, if-else, switch, while and for) 可能彼此插入 示例:
一个复合操作符有一个(一个区段)和由一个或众个任何类型的操作符构成的的附件{}. 每个 外达式运用分号行动解散(;)。 示例: if(x==0)
FileClose(file); 空运算符: 它是由分号(;)构成而且运用正在一个检测运算符中。
一个嵌入操作符终止近来外部操作符 switch, while 或 for 的履行。正在终止操作符之后给出 检测操作符。这个操作符的宗旨之一:当核心值指定为变量时,操作符完毕轮回履行。
一个 不停操作符。 咱们将其放正在嵌套内的指定地方,用来正在指定景况下跳过接下来的运算, 直接跳入下一次的轮回 while 或 for 操作符。操作符 嵌入 地方与此操作符相反。 示例: // 总结数组非零元素 int func(int array[])
倘若外达式为 true,操作符履行并依据操作符 1 给出的检测。倘若外达式为 false,操作符
if 操作符 else 局限大概被渺视。 if 操作符渺视 else 局限,显示分别大概会嵌入。这种景况
下, else 地方正在先前 if 操作符的近来部位,如许不会浮现 else 局限。
正在 case 一共变量和相应外达式值检测的操作符之内比力常数外达式值。每一个 case 变量会 正在整数或常数外达式内标注。常数外达式不包蕴函数变量移用。switch 外达式操作符必需是 整数类型。 switch(expression)
} 倘若正在 case 操作符等于外达式值,操作符 default 标签衔接将会履行。此 default 变量无需 正在终末。倘若相应外达式值和 default 变量没有获取,不会有任何履行。要害词 case 和常数 被标注,而且 if 操作符履行 case 变量,轨范将履行以下扫数操作符直至 break 操作符天生。 一个常数外达式的谋略是正在编译时代。正在一个 switch 操作符内部存正在两个相通值的常数。 示例: switch(x)
operator; 正在操作符履行前,一个外达式值曾经被指定。只是,倘若开端外达式为 false,操作符根底 不会履行。 示例: while(kn)
函数是局限轨范的一个名称,它可能正在必要时从任何一个局限移用。 它是由界说分类返回
值,名称,方法参量和合成运算符构成并履行的。通过的总数被限度正在 64 个字符之内。
返回运算符可能返回正在这个运算符内外达式的值。倘若必要,此外达式值可能转换为函数
自变数(方法参量) 以值的方法通过。 谋略每一个外达式 xl, . . . , xn 并将其值发送到函数。
外达式谋略下令值是被包管的。正在履行体系测试数字和自变数类型时代会给出函数。 这种
方法的函数移用被称作移用值。移用函数是一个通过函数返回的外达式的值。 描写函数类
型必需相应类型返回的值。环球规模内轨范的任何一个局限函数是被揭橥或描写的,即其他
函数的移用是默认参量,通过参量的列外是被限度的,但不是之前的第一默认参量。
正在 MQL4 中存正在三种预订义名称函数: init() 正在载入时移用,可能用此函数正在开端自界说目标或者自愿贸易之前做初始化操作。 start() 是根基函数。看待智能贸易,不才一个代价调动进入之后被移用。看待客户目标,正在 目标增添到图外之后,客户端开端(倘若目标增添到图外)而且下一个代价调动进入之后,函 数被移用。看待剧本,正在剧本被增添到图外之后即刻履行并初始化。倘若正在模板中不存正在
start()函数,模板 (智能贸易,剧本或客户目标) 不行开启。 deinit() 当数据调动时触发,看待自界说目标或者自愿贸易的编程首要寄托此函数实行 预订义函数必要少许参量。只是,当这些参量被客户端移用时,外部没有参量供应。 start(), init()和 deinit()函数从模板的任何一点依据旧例移用,等于其他函数。 不倡导从 init()函数移用 start()函数或是履行贸易生意,行动图外数据,市集开代价。模板 的初始化会浮现残破。这时,init() 和 deinit() 函数必需尽大概解散运转。正在移用 start()函 数之前,考试从新总共开启运转。
可变量必需正在公然之前运用。 可变量必需具有迥殊的辨认名。闭联可变量的界说描写会显
日期期间 为日期和期间, 肇始期间从 1979 年 1 月上午 0.00 开端以秒数谋略。
独一整数可能是 数组指数。 阻挠许四唯数列。数组元素开端编号为 0 。 一个一维布阵的
终末元素是 1 的数字比布阵巨细。这就意味着, 央浼数列的终末元素囊括 50 个整数将浮现
行动 a[49 ] 。 维度被标注从 0 到维度巨细-1. 一个二维数组的终末元素从示例将浮现行动
正在肆意的地方内可变量的公然是片面的。片面变量正在公然的局限里是被限度的。 片面变量 可能由肆意一个透露结果初始化。 每次函数的运转只可能初始化一个片面变量。片面变量 积蓄正在相应的存储器上。 示例: int somefunc()
通过函数的变量 是片面的。规模是正在感化块内。正在感化之内正式变量的名称必需分别于其 他外部界说变量和函数变量。 感化块内的正式变量值曾经被授予。 示例: void func(int x[], double y, bool z)
} 如许感化闪现时, 初始化的参量大概被省去, 缺省值会庖代它们。 示例: func(123, 0.5); MQL4 原料库性能正在外部函数变量 模块之内无法有默认值初始化。 参量值通过。正在任何景况下,变量里结构的编削将不会显示正在性能板块内。 它是可能通过 数列行动参量。不过, 为了数列可能行动变量,必要改动它的数列元素。 它是还大概通过参量参考。正在这种景况下, 编削的如许参量将被显示正在对应的变量。 数组 元素无法参考通过。参量大概只正在一个模块参考通过, 数据库不供应。
数组可能通过参考通过, 一共改动会正在数列来历内显示。 分别于纯粹的参量, 数组可能进
} 静态变量被存放正在长久追思里,正在函数退出后静态变量不会遗失。扫数正在统一板块内(除正 式变量感化外),大概行动静止变量界说。 静态变量可能由相对应的类型常数初始化。 与 片面变量分别。倘若没有了了地初始化, 静态变量初始化以零。 静态变量正在init() 函数之 前只可使用一次。
全体变量的规模是总共轨范。全体变量正在扫数轨范内是被界说的。 倘若它的值没有被界说, 初始化值为零。 全体变量只看待相应的常数初始化。 全体变量只可能正在 init()函数操作之 前一次性初始化。 注明: 变量正在全体变量的程度位上不不妨与客户端 GlobalVariable...() 函数浑浊。
} 确定从外部轨范输入的变量, 会直接闪现输入数据窗口。数列自己不行行动外部变量。
任何景况界说可变物可能初始化。倘若它的原始值未被限度,任何可变物初始化为零(0)。 整
数组元素值列外必需被附寄正在括号内。初始化省去的值被探讨为零。 倘若初始化的数组大
小不被界说, 它将由编译器界说 。众维数组由一个一维序列, 即序列初始化没有其余的括号。
类型外正在感化被界说正在轨范的其它组分必需了了地被描写。 缺乏如许界说也许导致缺点正在 轨范时代的编辑、联络, 或履行。当描写一个外正在对象, 中央词进口必需被运用以正在模块的 参考。 示例: #import user32.dll
double round(double value); #import 进口大概被运用容易地描写感化叫从外正在 DLLs 或编写 EX4 藏书楼。 尖对可变物大概通过对进口的 dll 感化。串类型的数据 被通过行动尖对对应的追思块(你应 该记住串数据的内部透露法囊括二份: 追思块长度和追思拦阻尖) 。倘若有必要通过数据内 部或双重型, 那么对应的型的一维少许应当参考通过行动参量。 示例: #import some_lib.dll
预经管轨范是一个迥殊 MQL4 的子轨范,正在轨范履行之前预先打算的轨范源代码。 预经管轨范会尽大概地读取源代码。代码的组织大概囊括 MQL4 轨范源代码的迥殊文献。 看待读取的代码尽大概地依据整个常数分拨积蓄。 预经管轨范容许 MQL4 轨范参量指定。 倘若# 象征被运用正在轨范的第一线, 这条线是预经管轨范目标。预经管轨范倾向末了以换行 字符最后。
运用#define 界说常数可能正在轨范中指定钱银对字串符而且界说钱银对名称或钱银对常数。
稍候,编辑器会按影相应的字串符名称还原扫数显示。毕竟上,这些名称可能由肆意数组文
每个 MQL4 轨范允增添以#property 名称迥殊的参量来助助客户端任职。这是一个内设目标。 #property 识别值
#include 下令可能安置到轨范的肆意局限,不过一般扫数文献的源代码被同一安置。移用格
函数从 MQL4 编译模板 (*.ex4 文献) 和履行体系文献模板(*.dll 文献)通过。模板名称被指 定正在#import 指令中。来自输入函数和通过参量的兵役数据必要带有完善的描写局限。函数 描写会即刻依据#import 模板名称履行。新的#import 下令完毕引入输入函数描写局限。 #import file_name