MQL4外汇智能交易编程入门指南

什么是智能交易系统?它是一个用特殊的MetaQuotes语言4(MQL4)编写的自动交易系统,与特定的图表相关联。智能交易系统不仅能通知交易者交易机会,而且还能自动执行交易账户中的交易,直接发送至交易服务器。与许多IT系统类似,智能交易系统支持历史数据的策略测试,并在图表上标注入场和离场点。此外,智能交易系统的可执行代码分别存储于源文件和加密的可执行文件中,这种安排保证了交易者所使用的逻辑在必要时能够保持隐藏而不泄露。

MetaTrader4软件将智能交易系统保存在程序根目录下的/Experts子目录中,文件格式为*.MQ4(源代码)和*.EX4(可执行代码)。交易者可以无限制地保存智能交易系统数据,并通过导航条窗口轻松管理这些数据。

创建自定义智能交易系统数据以及将数据与交易终端连接的详细方法,在MetaTrader4用户指南中有详尽说明。

MetaQuotes语言4用于编写自定义智能交易系统软件,从而自动化交易程序的管理并执行交易者自身的交易策略。MQL4语言易学、易用且易于创建。它包含了相当数量的变量,用于控制当前及历史报价、执行基本的算术与逻辑运算和特征、调用主要的内置指标,以及开启和控制持仓的命令。在语法上,该语言与TradeStation技术有限公司开发的EasyLanguage相似,但具有自身的一些特定特征。

程序代码使用MetaEditor4编辑器编写,该编辑器能够以不同颜色来区分MQL4语言的不同结构,从而帮助用户熟悉专家系统的文本。注释以//(双斜线)符号开始,注释也可以用“斜线-星号”和“星号-斜线”的组合(/*[注释]*/)来表示,就像在“C”编程语言中那样。

为了设定和控制操作策略,交易者可以保存一份日志文件,其中存储了产生的信号信息、变量输出以及已执行交易的结果。智能交易系统日志保存在MetaTrader4目录下的/logs/YYYYMMDD.log文件中,当前日志可以直接从下方的“终端”窗口(日志标签)进入查看。

访问MQL4语言的目录系统,可以通过点击目录按钮或从工具菜单打开MetaQuotes语言词典窗口。本教程包含分类、运算、存储词语等功能,使用户对该语言所涉及的每个元素都有所了解。

1. 主要语言结构

与其他编程语言一样,MQL4有一套构成基本结构的主要组成元素。这些组成元素以特殊的方式组合排列,以表示适当的语句和表达式。

语言的主要对象是数据,包括三种类型:数字、逻辑和排列。所有数值均采用双浮点格式,逻辑数据可能包括真值和假值,排列是用省略号标注的一系列字符,字符串也叫做文本串。数据可以包含在适当类型的变量中,或直接由程序的源文本表现出来。

一个MetaQuotes语言陈述指的是一个完整的用法说明,陈述可以包括保留字、运算符、数据、变量、表达式或标点符号,并且总是以分号结尾。

保留字是指具有特定或特别意义的预先设定的词语。

运算符是指在数据、盛宝银行变量或表达式中执行特定操作的符号。

变量用于存储数字、排列或逻辑数据。

表达式是将保留字、变量、数据和运算符组合而成,因为它们在语言的三类元素(保留字、变量、数据)中都具有相应的值。

标点符号用来表示表达式、界定参数、区分词语或重新排列计算顺序。

2. 标点符号

字符

名称

描述

;

分号

结束MetaQuotes 4语言指令

( )

圆括号

对表达式的值进行分组,改变计算顺序。

标注函数参数并启动变量描述表达式

标注变量的初始值并在变量描述区排列组合

,

逗号

提取函数值时,对参数进行区分

在变量描述区对变量进行区分

在描述排列长度时对数字进行区分

区分进入排列元素的指标

:

冒号

用在变量描述区,启动变量列表

" "

引号

标注一个文本(字)串。

[ ]

方括号

标注数字,确定排列长度

标注进入某个特殊排列元素的数字(指数)

标注进入历史数据的期间数字

{ }

波形括号

充当运算括号。可以用来代替begin...end。将指令系列隔离成块。

/* */

注解括号

标注注解

//

双斜线

明确说明单串注解的开始

3. 运算符号

运算符号分成5组:分配符号、字串符号、数学运算符号、相关符号和逻辑符号。

3.1. 分配符号

分配符号'='(等号)用于将具体数值(数字、排列或逻辑,取决于变量类型)分配到变量中。分配值可以是表达式的结果。例如:

变量:Counter(0);

...

Counter = Counter + 1;结果,变量Counter取值为1。变量值也可以分配给排列的元素。

3.2. 字串符号

操作文本串时,只有一个运算符可用: '+'(加号)。它用于连接两个字串。例如:

变量:字串(" ");

...

字串 = "some_" + "text";

结果,字串变量包含“some_text”这样的文本串。允许将字串与数字和逻辑值结合起来。在后面的这个例子里,数字及或逻辑值在结合前应转化为字串类型。比如:

String = "string" + 1;

因此,字串变量将包含"string1"的文本串。

操作数不仅可以是数值,也可以是含有这样数值类型的变量,以及表达式,在执行后便产生这样的数值。

3.3. 数学符号

四种主要的数学运算:加法- '+'(加号)、减法-'-'(减号)、乘法-'*'(星号)、除法-'/'(斜线),都用在计算数值的数学表达式里。

数学表达式的例子:( Ask + Bid ) / 2 , High[1] + 20 * Point

3.4. 相关符号

相关符号用于对同种类型的两个数值进行比较。第一个数值和第二个数值进行比较,产生逻辑值“真值”或“假值”: “小于”- '<'(左小于号), “大于”- '>'(右小于号);“等于”- '='(等号);“不等于”- '<>'; “小于或等于”- '<='; “大于或等于”- '>='。由相关表达式取得的逻辑值用在MetaQuotes语言的控制结构里。比如:

if FreeMargin < 1000 then exit; 这个字串按词典顺序进行比较,即,"aaa" 字串被认为小于字串 "zzz"。当逻辑值进行比较时,应该牢记:“True”的逻辑值的数值为1,而“False”的逻辑值的数值为“0”。

3.5. 逻辑符号

逻辑符号使用户能够将逻辑值结合起来。逻辑或 - '|' (垂直线或竖杠);逻辑与 - '&' (“和”符号)。逻辑符号有相应的保留字OR、AND、NOT。比如:

If FreeMargin > 100 and FreeMargin < 1000 then print( "Free margin is ", FreeMargin );注意:当OR和AND运算是双值时,即它们有两个值进行运算,NOT运算是单值,即它只适用于单值。比如:

Variable: Condition1( True );

...

Condition1 = FreeMargin = 1000;

If not Condition1 then exit;

下面是逻辑运算符号的结果表:

Value1

Value2

Value1 OR Value2

True

True

True

True

False

True

False

True

True

False

False

False

Value1

Value2

Value1 AND Value2

True

True

True

True

False

False

False

True

False

False

False

False

Value1

NOT Value1

True

False

False

True