编写MQL4语言课程112课.docx

上传人:b****5 文档编号:12189060 上传时间:2023-04-17 格式:DOCX 页数:65 大小:569.42KB
下载 相关 举报
编写MQL4语言课程112课.docx_第1页
第1页 / 共65页
编写MQL4语言课程112课.docx_第2页
第2页 / 共65页
编写MQL4语言课程112课.docx_第3页
第3页 / 共65页
编写MQL4语言课程112课.docx_第4页
第4页 / 共65页
编写MQL4语言课程112课.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

编写MQL4语言课程112课.docx

《编写MQL4语言课程112课.docx》由会员分享,可在线阅读,更多相关《编写MQL4语言课程112课.docx(65页珍藏版)》请在冰豆网上搜索。

编写MQL4语言课程112课.docx

编写MQL4语言课程112课

MQL4课程

Bycoders’guru

欢迎来到MQL4语言课程。

在这个系列里,我将试着通过直接而迅速的例子给你一个全面的教程来剥去MQL4语言的神秘和复杂。

在这个系列课程里,我还将告诉你如何使用MQL4语言编写你自己的智能交易系统,技术指标和脚本。

如果你是一个c语言的程序员,那么在我的课程开始之前,你甚至已经知道了许多关于MQL4语言的规则。

如果你以前没有书写过任何程序语言,那也没问题。

我同样将指导你全面的理解程序编制的概念。

那么,让我们从起点开始吧。

MQL4?

What?

WhyAndWhere?

MQL4代表MetaQuotesLanguage4.

MetaQuotes是组建MetaTrader交易平台的公司。

并且为了是它比其他的交易平台更强大,公司通过一种允许用户(你)编写自己的交易策略的内置程序语言来扩展它。

这种语言允许你创建下面的任何一种:

■智能交易是一种连接到特定图表的自动交易系统。

它能够根据设置的节点自动启动,当它开始运行后,它不会同时去处理另一个新的指令(也就是说必须等到当前程序完成)。

这种交易系统能够在提醒用户可以交易的同时,将交易定单自动送到交易服务器。

与大多数交易系统一样,它也能够用历史数据测试交易策略,并在图表上显示出来。

智能交易存储在terminal_directory\experts。

■自定义指标可用来编写新的技术指标,和内置的指标一样,它不能用来进行自动交易,只能作为分析数据的工具。

自定义指标储存在terminal_directory\experts\indicators。

■脚本是执行单一功能的一段程序,和智能交易不同,脚本不能单独执行,只能被调用。

脚本存储在terminal_dictionary\experts\scripts。

这就是“什么”是MQL4?

“为什么”使用MQL4?

现在,“在哪儿”我可以书写MQL4?

书写你自己的MQL4代码就像世界上的其他任何事情,你可以选择两种方法种的一种,困难的和简单的。

1-困难的:

困难的方式是使用你喜欢的文字编辑工具和命令提示符来编辑你的程序。

记事本是个不错的选择,但不要忘了两件事情:

1-保存你创建的文件为无格式的文本。

(plaintextformat)

2-保存文件为.mp4(这样方便用MetaEditor重新编辑它),但是你也可以保存它为任何你喜欢的扩展名。

保存完你的程序后,还有一个额外的步骤来让你的代码可以众所周知的出现。

那就是编译步骤。

编译的意思是转换你已经写好的人类易读的语言为电脑能理解的机器语言。

MetaTrader已经装置了一个它自己的编译器:

MetaLang.exe。

(这个程序将转换你的脚本为机器语言)

MetaLang.exe是一个带两个参数的命令行程序,它输出.ex4文件。

(.ex4为Metatrader可识别的文件)

第一个参数是“options”,它只有一个可选项–q退出。

第二个参数是你的.mql文件的完整路径。

语法格式为:

Metalang[options….]filename

例:

1-找到你的metalang.exe的路径,它和MetaTrader在同一个路径下(例如:

D:

\ProgramFiles\MetaTrader4)

2-创建一个批处理文件compile.bat(或者任何你喜欢的名字。

3-把下面的几行代码写进bat文件并保存它:

cdD:

\ProgramFiles\MetaTrader4

metalang-q"D:

\ProgramFiles\MetaTrader4\my_first_mql4_script.mq4"

(不要忘了把路径更改为你的MetaTrader的安装路径).

4-运行这个批处理文件,如果你像我一样幸运的话,你将看到下面的画面。

与你看见的一样,你将获得“my_first_mql4_script.ex4”输出文件。

2-简单的:

Metatrader已经装置了一个很好的IDE(integrateddevelopmenteditor,集成开发环境)——MetaEditor,它有如下特性:

1-当你读写代码的时候它是一个有着MQL4语言强大和不同特性的文本编辑器。

2-方便的编译你的程序,只要按下F5,MetaEditor将为你做完所有的困难工作并输出“ex4”文件。

(另外它还很容易的看出你的程序那里出错了)

3-内置参考字典。

你可以访问高亮的关键字。

如果想进一步了解它,请按F1.

在接下来的课程里,我们将知道更多的关于MetaEditor。

今天我仅仅是给大家打个招呼,明天我们将开始真正的工作,你将学习MQL4的语法。

非常欢迎批评指正。

明天见。

最后感谢大家,欢迎回帖批评指正。

MQL4课程

Bycoders’guru

语法

我希望你满意那个试着回答了:

“什么”是MQL4?

“为什么”使用MQL4和“在哪儿”书写MQL4的欢迎课程。

方法或怎么做(how)永远是最大最重要的问题,接下来的全部课程就是答案。

现在,我希望你清空你思想中的任何混乱想法,并且认真阅读下面的这些概念。

我们今天正在谈论的是关于MQL4的语法规则。

就像我以前告诉你的那样,如果你是个c语言或者c++的程序员,那么在我的课程没开始之前你就已经知道了许多MQL4的事情。

这是因为MQL4的语法和c语言的语法很像。

当我们学习一种语言的语法时,我们同时在学习它的原理和书写规则。

它有以下几部分组成:

1、格式

2、注释

3、标识符

4、保留字

让我们把它分成以下几块。

一、格式

当你书写代码的时候,你可以自由的使用空格,制表符和空行来分隔你的代码和代码行,使它们更加的易读和美观。

例如,下面这些语句行在MQL4里都是正确的:

DoubleMacdCurrent,MacdPrevious,SignalCurrent:

Double

MacdCurrent,

MacdPrevious,

SignalCurrent:

DoubleMacdCurrent,MacdPrevious,SignalCurrent:

但是,就像你看到的,第一行更易读和容易理解。

在MQL4的语言规则里有两个例外:

1、在“contorllingcompilation”里不能使用新行。

(我实在不知道老外在这里什么意思,不过还好。

因为他说)在下一课里你将知道关于“contorllingcompilation”更多,现在只要记住这个例外就好了。

例如下面的代码行是错误的,并且MQL4编译的时候将会报错:

这是正确的“contorllingcompilation”:

2、在常数值,标识符和关键字的中间不能使用空格或新行。

例如,这一行是正确的:

Extern和int是关键字,MA_Period是标识符,13是常数值。

在下一课,你将知道的更多。

下面的这些行是不正确的:

注意1和3之间的制表符。

注意关键字extern中间的制表符。

二、注释

为了使程序设计世界更容易些,任何程序语言都要它自己书写注释的风格。

代码行里的注释会被汇编器忽略,但它使你的程序更加的清楚和易懂。

假定你在夏天写了某个程序,到了冬天你再读它的时候,如果没有注释——尽管你是代码的编写者——你不能理解全部的这些谜一样的代码行。

MQL4(c++)使用两种注释方式:

1、单行注释

单行注释开始于“//”,结束于一个新行。

例如:

2、多行注释

多行注释开始于“/*”,结束于”*/”。

例如:

你也可以像下面这样在多行注释里嵌套一个单行注释:

这也是争取的注释:

但这样是错误的:

三、标识符

标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。

此外首字母不可以是数字,标识符不能和保留字冲突.

例如MA_Period在这是就是个标识符:

让我们来看一些例子:

Name1

正确的

_Name1

正确的

1Name

错误的(首字母不能是数字)

~Name

错误的(不能使用~)

N~ame

错误的(不能使用~)

I_love_my_country_and_my_country_loves_all_the_world

错误的(不能超过31个字符)

Color

正确的(注意C是大写)

Color

错误的(color是保留字)

四、保留字

下面列出的是固定的保留字。

不能使用以下任何保留字进行命名。

(译者注:

都是小写。

数据类型

存储类型

操作符

其他

bool

extern

break

false

color

static

case

true

datetime

continue

double

default

int

else

string

for

void

if

return

switch

while

例如下面的这些代码行是不正确的:

我希望你能对这一课感兴趣。

下一课我们将讲关于“数据类型”。

准备好,真正困难的工作将要开始了。

最后感谢大家,欢迎回帖批评指正。

MQL4课程

Bycoders’guru

欢迎来到MQL4课程的第三课。

回顾下上一课的内容:

⏹你可以使用什么格式来书写MQL4代码?

⏹怎样通过注释使你的程序更加完善?

⏹什么是标识符?

选择他们有什么规则?

⏹什么是MQL4的保留字?

现在,让我们享受本课的乐趣“DATATYPES”(数据类型)

数据类型是什么意思?

任何程序语言都有一套数据的内存表示的名称。

例如,如果内存保留一个-2147483648到2147483647之间的数,那么大多数的程序语言将命名这个数据为“整型数据”(Integer)。

变量?

变量是被提交到内存中的数据的名称。

你可以设想内存是连续的、大小不同的盒子。

●为了使用一个盒子存储数据,这个盒子必须被赋予一个名称,这个过程被称为“声明”。

●在“声明”过程,你用一个词告诉计算机你想使用的盒子类型和大小,这个词被称为“关键字”。

●你还可以给这个盒子起一个好记的或者跟存储数据有关系的名字,这可以方便你以后找到这个数据。

这个名字就叫“变量名”。

●通过“赋值”,可以把数据放进盒子里。

●我们可以在“声明”变量的同时就给它一个值,这个过程被称为“初始化”。

例如下面的这行代码:

intMyVaraible=0;

intß关键字

intß整型数据类型

intß声明

MyVaraibleß变量名

=0ß初始化

MQL4包括以下数据类型:

■整型数据(int)

十进制:

数字0-9,包括负数。

十六进制:

数字0-9,字面a-f或者A-F代表10-15;以0x或者0X开头。

整型数据占用4字节的空间,其数值范围介于-2147483648~2147483647之间。

如果超出这个范围,则视为无效。

例如:

intintInteger=0;

intintAnotherIntger=-100;

intintHexIntger=0x12;

■布尔数据(bool)

Boolean用来表示是和否,还可以用数字1和0进行表示。

True和Flase可以忽略大小写。

例如:

boolI=true;

boolbFlag=1;

boolbBool=FALSE;

■字符数据(char)

任何带单引号的单一字符或者十六进制的ASCII码如'\x10'都是字符数据。

例如:

'a','$','Z'

一些特殊的字符如单引号(')、双引号(")、问号(?

)、反斜线(\)和控制符必须以反斜线开头(\),组合表达原来的意思,如下表所示:

换行NL(LF)\n

制表符HT\t

回车CR\r

反斜线\\\

单引号'\'

双引号"\"

十六进制ASCIIhh\xhh

我们使用关键字INT创建字符类型。

例如:

intchrA='A';

intchrB='$';

intc='©';//代码0xA9

intd='\xAE';//货币对代码

■字符串数据(string)

字符串数据是带有双引号的一连串ASCII字符,如:

"Characterconstant"。

字符串可以容纳0到255个字符,如果超过这个长度,右边多余的字符将被忽略,编译器也会有相应的警示。

如果字符串中需要插入一个双引号(")必须在它前面使用反斜线(\)。

(参见字符数据部分)

我们使用关键字STRING来创建字符串数据,例如:

stringstr1="Helloworld1,withyoucodersguru”;

stringstr2="Copyright©2005,\"Forex-tsdforum\".";//注意双引号的使用.

stringstr3="1234567890";

■浮点型数据(double)

浮点型数据由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分为一系列十进制数字。

浮点型数据(双精度)占用4字节的空间。

其数值范围介于-1.7*e-308~1.7*e308之间。

如果超出这个范围,则视为无效。

我们使用关键字double来创建浮点型数据,例如:

doublea=12.111;

doubleb=-956.1007;

doublec=0.0001;

doubled=16;

doubledblNumber3=1/4;

■颜色数据(color)

颜色数据可以用三种方法表示:

字符数据、整型数据或者是颜色名(只能是Webcolors中已命名的).

字符数据的表达方法是用三个数字来表示三种主要颜色:

红、绿、蓝的比例。

以C开头,用单引号括住。

数字的值在0~255之间按比例选取。

整数数据的表达方法使用十六进制或十进制数字。

十六进制数字如0x00BBGGRR,其中RR是红色的比例,GG是绿色的比例,BB是蓝色的比例。

十进制数不能直接体现红绿蓝的比例,而是十六进制数字的十进制表示方式。

特殊的颜色名可以参考Webcolorsset表。

示例:

//字符数据

C'128,128,128'//灰色

C'0x00,0x00,0xFF'//蓝色

//颜色名

Red

Yellow

Black

//整型数据

0xFFFFFF//白色

16777215//白色

0x008000//绿色

32768//绿色

颜色数据占用4字节的空间。

第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。

我们使用color关键字来创建颜色数据,例如:

colorclr1=Red;

colorclr1=C'128,128,128';

colorclr1=32768;

Webcolorsset表

DarkTurquoise

LightSeaGreen

Goldenrod

MediumSpringGreen

LawnGreen

Orange

Gold

Yellow

Chartreuse

Lime

SpringGreen

Aqua

DeepSkyBlue

Magenta

MediumTurquoise

Turquoise

DarkKhaki

MediumOrchid

GreenYellow

MediumAquamarine

Orchid

DarkGray

SandyBrown

Tan

BurlyWood

HotPink

Violet

SkyBlue

LightSalmon

Plum

Khaki

LightGreen

Aquamarine

Silver

LightSkyBlue

LightSteelBlue

LightBlue

PaleGreen

Thistle

PowderBlue

PaleGoldenrod

PaleTurquoise

LightGray

Wheat

NavajoWhite

Moccasin

LightPink

Gainsboro

PeachPuff

Pink

Bisque

LightGoldenrod

BlanchedAlmond

LemonChiffon

Beige

AntiqueWhite

PapayaWhip

Cornsilk

LightYellow

LightCyan

Linen

Lavender

MistyRose

OldLace

WhiteSmoke

Seashell

Ivory

Honeydew

AliceBlue

LavenderBlush

MintCream

Snow

White

■日期时间数据(datetime)

日期时间数据由6个部分的字符组成:

年、月、日、时、分、秒,以D开头,用单引号括起。

日期(年、月、日)或者时间(时、分、秒)甚至两者一起都可以不用填写。

日期时间数据开始于1.1.1970截止到12.31.2037

D'2004.01.0100:

00'//新年

D'1980.07.1912:

30:

27'

D'19.07.198012:

30:

27'

D'19.07.198012'//等于D'1980.07.1912:

00:

00'

D'01.01.2004'//等于D'01.01.200400:

00:

00'

D'12:

30:

27'//等于D'[编译日期]12:

30:

27'

D''//等于D'[编译日期]00:

00:

00'

我们使用关键字datatime来创建日期时间数据,例如:

datetimedtMyBirthDay=D'1972.10.1912:

00:

00';

datetimedt1=D'2005.10.2204:

30:

00';

运算符和表达式

一些数字和字符的组合是特别重要的,它们被称为运算符,例如:

+-*/%算术运算符

&&||逻辑运算符

=+=*=负值运算符

标识符加运算符就是表达式。

举例说明:

x=(y*z)/w;

x,y,z和w是标识符

=,*和/是运算符

整个这行是表达式。

表达式组成语句,语句组成函数,函数组成程序。

■算数运算符

算术运算符包括加法和乘法运算:

运算符

名称

示例

+

A=B+C;

-

A=B-C;

+-

改变符号

A=-A;

*

A=B*C;

/

A=B/C;

%

求模

A=A%C;

++

自加一

A++;

--

自减一

A--;

添加1的运算符不能使用在表达式中。

inta=3;

a++;//有效表达式

intb=(a++)*3;//无效表达式

b=a*5//有效表达式

■赋值运算符

任何表达式的目的是产生一个结果,赋值运算符把这个结果赋予给左边的操作数。

例如:

A=B*C

在这里,我们把B和C相乘,并把结果赋予给A。

(=在这儿是赋值运算符)

MQL4有11个赋值运算符:

把B的值赋予AA=B;

在y值上加上xy+=x;

在y值上减去xy-=x;

在y值上乘以xy*=x;

在y值上除以xy/=x;

在y值上求x的模y%=x;

把y值向右做x位逻辑移位y>>=x;

把y值向左做x位逻辑移位y<<=x;

AND位运算符y&=x;

OR位运算符y|=x;

把x和y按做逻辑异或的操作y^=x;

■关系运算符

用返回0(False)或1(True)来表示两个量之间的关系。

逻辑值FALSE代表整数零值,逻辑值TRUE代表不同于零的任何值。

MQL4有六个关系运算符。

示例如下:

4==4;//等于,结果TRUE,或1

4<4;//小于,结果为FALSE或0

4>4;//大于,结果为FALSE或0

4<=4;//小于等于,结果为TRUE或1

4>=4;//大于等于,结果为TRUE或1

4!

=4;//不等于,结果为FALSE或0

■布尔运算符(逻辑运算符)

逻辑运算符是根据表达式的值来返回真值或是假值。

MQL4使用3个逻辑运算符:

 

运算符

名称

示例

说明

&&

逻辑与

A&&B;

如果A和B值都是真实的,表达式值为TRUE

(1)。

否则,表达式的值为FALSE(0).

||

逻辑或

A||B;

A和B值的逻辑运算符或OR(||)用来表示两个表达式只要有一个成立即可。

如果A和B值为真的,表达式值为TRUE

(1)。

否则,值为FALSE(0)。

逻辑表达式被完全计算。

!

逻辑非

!

A;

否定运算符(!

),用来表示真假的反面的结果。

如果运算值是FALSE(0)结果为TRUE

(1);如果运算不同于FALSE(0)等于FALSE(0)。

■位逻辑运算符

位逻辑运算符和逻辑运算符比较相似,只是他们工作在一个比较小的范围---二进制数据。

运算符对操作数执行按位求补操作。

表达式的数字值中包含1,其中n包含0和数字值中包含0,其中n包含1。

b=~n;

运算符x向右移动到数字y代表二进制代码。

向右移动是逻辑运算,即左侧将被零填满。

x=x>>y;

运算符x向右移动到数字y代表二进制代码。

左侧将被零填满

x=x<

二进制的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类型。

■其他运算符

这些运算符不属于前面任何一个种类。

运算符

名称

示例

说明

[]

指数

下一课中会有详细说明

()

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

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1