4MQL4基础Word文件下载.docx

上传人:b****5 文档编号:17013060 上传时间:2022-11-27 格式:DOCX 页数:28 大小:140.71KB
下载 相关 举报
4MQL4基础Word文件下载.docx_第1页
第1页 / 共28页
4MQL4基础Word文件下载.docx_第2页
第2页 / 共28页
4MQL4基础Word文件下载.docx_第3页
第3页 / 共28页
4MQL4基础Word文件下载.docx_第4页
第4页 / 共28页
4MQL4基础Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

4MQL4基础Word文件下载.docx

《4MQL4基础Word文件下载.docx》由会员分享,可在线阅读,更多相关《4MQL4基础Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

4MQL4基础Word文件下载.docx

客户端收到的tick便是市场的价格变动信息。

Tick的概念

Tick是描述某一时刻货币对价格的事件。

部署在交易中心的服务器会向每个客户端发送tick。

视乎当前市况,收到tick的间隔长短不一,但每个tick都带来了新的报价——货币对的比价。

应用程序可能在客户端上运行一段很长的时间,比如,几天或者几周。

不同类型的应用程序有不同的执行机制。

比如,智能交易(ExpertAdvisor)不是一直处于运行状态。

智能交易通常在接收到新tick时开始运行。

由于这个原因,点数不仅仅是报价手段,更是驱动客户端调度的事件。

智能交易运行时间的长短取决于它的程序代码。

通常EA会在十分之一或百分之一秒内完成一次信息处理流程。

在这段时间内,EA能完成参数处理,交易决策,为交易者提供辅助信息等任务。

完成这些任务后,EA进入等待模式,直到客户端收到新的tick。

新的tick驱动EA再次运行,程序再次执行相应的操作然后回到等待模式。

下面的段落会详细解释,新tick的到来会如何影响程序的操作。

控制权的概念

说起程序的执行流程,以及程序如何与客户端交互,我们要用到“控制权”这个名词。

控制权是完成操作的过程,至于完成什么操作由程序算法和客户端特性决定。

控制权可以在程序内部从一行代码传递给另一行代码,也可以程序传递给客户端。

控制权的传递过程类似于让人在会议上发言。

客户端和程序相互传递控制权的过程,就像一个发言人结束发言之后,把发言的机会让给另一位发言人。

客户端支配这一过程。

它的优先权比程序要高,就像大会主席的优先权比一般与会者高一样。

在程序得到调度之前,客户端监管着控制权。

当收到新的tick,客户端把控制权交给程序,此时程序的代码开始得以执行。

客户端将控制权交给程序后,继续运行。

程序只有在客户端传递控制权之后才有机会得以执行(就像主席一直掌控着会议的节奏,发言者只能在指定时段发言)。

程序运行结束,要交还控制权给客户端,而不能自己调度自己。

但是,一旦程序得到了控制权,控制权就是不可剥夺的。

也就是说,客户端不能强行拿回控制权,只有用户操作是个例外(比如,用户强制结束程序)。

讨论程序的执行和结构时,我们最关心的是控制权如何在程序内部传递。

图2显示了程序获取、释放以及在内部传递控制权的实际情况。

图中的圆圈表示一些小的逻辑上独立的程序片段,圆圈之间的箭头显示控制权如何从一段程序传给另一段程序。

图2图2.程序控制的传递

从客户端获得控制权的程序,开始执行自身算法指定的操作。

程序包含许多行代码,通常它们自顶向下依次执行。

程序里面可以写些什么,写的时候又要遵循那些规则,后面的章节将详细说明。

这里想强调的是,程序的每一个独立片段——执行数学计算,在屏幕上显示消息,生成订单,以及其他操作——都会得到执行机会。

在程序的当前片段运行期间,它保持控制权,运行结束后,将控制权交给其他片段。

这样,在程序内部,一个逻辑上独立的片段执行之后,将控制权交接给另一个逻辑上独立的片段。

一旦最后一个片段执行完毕,控制权就从程序转移到客户端。

注释的概念

程序由两部分组成:

一部分是组成程序的代码,另一部分是对这些代码的说明。

注释是程序可选的、不可执行的部分。

注释是程序可选的部分,这意味着,一个可以执行的程序,会依照它的代码运行,和是否有注释无关。

但是,注释非常有助于理解代码的意图。

注释分单行注释和多行注释两种,单行注释以双斜线开头(//),到行尾结束,多行注释以/*开头,以*/结束(见图3)

注释用来说明代码的意图。

良好的程序应该永远带有注释。

图3.注释的例子

写程序时经常要添加注释,它们通常在代码中通常显示为灰色。

我们当然也会使用注释,这能使我们的代码更易于理解。

常量和变量

因为常量和变量这两个概念紧密关联,所以放在一个章章节中讲解。

常量的概念

程序当中的常量是一个带数值的对象。

程序当中常量的概念,和数学等式里面常量的概念类似。

是一个不可改变的数值。

为了尽可能详尽的说明算法语言当中常量的性质,我们从读者熟知的物理学和数学的常量入手。

人类发现了诸多常量,它们的数值不以我们的意志为转移。

比如物理学当中,自由落体加速度等于9.8m/s/s;

而数学里面,Pi=3.14。

这类常量和算法语言当中的常量不具可比性。

数学等式当中也用到了常量的概念。

例如,等式Y=3*X+7,数字3和7都是常量。

这类常量的数值完全有构造等式的人决定。

这个最接近于MQL4编程里常量的用法。

常量(作为数值)是程序员在开发阶段放置到代码当中的。

常量被其自身的数值唯一标示,所以“常量”和“常量的数值”完全等价。

常量的例子:

37,3.14,true,"

Kazan"

图4.位于计算机内存中的常量

常量的属性

常量的属性是在程序运行期间,能够保持编程者设置的数值,并在程序需要时把该数值返回给程序(图5)。

程序中的每一个常量,计算机都会为其分配一块内存空间。

在程序运行期间,无论编程者还是计算机,都不能改变常量的数值(图6)。

常量的数值总是保持不变。

图5.设定常数值时程序存储单元的状态

常量的数值在程序运行期间无法改变

图6.程序运行过程中常量的值不能改变。

变量的概念

变量在程序中既有名称又有数值。

MQL4当中变量的概念和数学中所采用的概念的类似。

两者唯一的区别在于,数学变量其数值是隐含的,而程序运行期间变量的数值保存在计算机的内存当中。

名词“变量标识符”和“变量名字”是同义词。

变量由程序作者在编码阶段以变量名的形式写入代码当中。

变量的名字(标识符)可以由字母、数字、下划线组成。

但是必须以字符起始。

MQL4是大小写敏感的,S和s并不相同。

变量名字的例子:

Alpha,alFa,beta,NuMbEr,Num,A_37,A37,qwerty_123。

后面的变量标识符代表了不同变量的名称;

a_22和A_22;

Massa和MASSA。

变量值的例子:

37,3.14,true,“Kazan”。

变量的属性

变量的属性在于它可以容纳程序所赋予的数值,在程序运行期间保有该数值,并在程序需要时把该数值返回给程序。

对程序中的每个变量,计算机都要为其分配一块内存空间。

让我们参考图7来学习变量的构成。

图7.位于计算机内存中的变量

计算机的内存块当中保存着变量的数值。

在需要的时候,程序可以获取该数值或者修改该数值。

变量的名字不能被修改。

编码时,程序员可以随便给变量起名字。

但是,一旦程序运行,程序员、计算机、或者程序自身,都没有技术手段来修改变量名字。

如果运行中的程序遇到了变量的名字,程序会查找变量获取对应的数值以便处理。

如果程序找到了变量,后者把数值交给程序使用。

从那时起,变量的数值将保持不变,而程序从内存中获得变量数值的拷贝(图8)。

程序拿到了变量的数值后,该数值保持不变。

变量名则永远不会改变。

图8.获取变量数值时程序存储单元的状态

会有一段时间变量没有和运行的程序关联起来,在这段时间里,程序可能在处理其他变量或者执行一些必要的计算。

在两个和程序通信的session之间,变量的数值不会改变。

根据程序的算法,有时需要修改变量的数值。

在这种场景中,程序赋予变量一个新的数值,也就是,变量从程序里得到了新的数值。

所有必要的修改都是在内存块里进行的。

这导致变量原有的数值被删除,程序赋予的新数值生效(图9)。

程序可以改变变量的数值,却无法改变变量的名字。

图9.设定变量数值时程序存储单元的状态

程序当中常量和变量的示例

在程序的语句里面可以找到常量和变量的例子。

下面的代码中,A和B是变量,7和3是常量:

A=7;

//行1

B=A+3;

//行2

我们来研讨程序如何处理常量和变量。

执行上面的代码,各步骤如下:

第一行

1.常量7把它的数值赋予程序。

2. 

变量A从程序中得到数值7。

第二行

1.程序遇到了等号右边的表达式,试图计算其数值。

常量3把它的数值赋予程序。

3.程序查找名字为A的变量。

4.变量A把它的数值(7)赋予程序。

5. 

程序计算(7+3)。

6. 

变量B从程序中得到数值10。

变量的数值在程序运行期间是可变的。

比如下面这行代码:

В=33;

//行3

在这个例子中,程序运行时会执行下面的步骤:

1.常量33把它的数值赋予程序。

变量B从程序中得到(新的)数值33。

不难发现变量B在程序运行的某个阶段得到了数值10,然后又得到了数值33。

但是变量名B不会随之改变,只有数值在变。

图10标明了代码中的常量和变量:

图10.程序中的变量(Variable)和常量(Constant)示意

数据类型

众所周知,只有类型相同的数值才能相加减。

比如,苹果可以和苹果相加,但不能和平方米或者温度相加。

大多数现代算法语言都有这个限制。

如同生活中常见的物件有颜色(红、蓝、黄、绿),味道(苦、酸、甜),数量(一个半、两个、七个)等类型的特征一样,MQL4也使用不同类型的数据。

说到数据类型,我们说的是常量、变量、函数返回值这些数值的类型(函数的概念会在函数一节中讲解)。

MQL4使用下面几种类型(针对常量、变量、函数返回值的数值):

int-整型;

double-实数;

bool-布尔值(逻辑);

string-字符串类型;

color-颜色类型;

datetime-时间和日期值。

整型(int)

int类型的数值是整数。

这种类型包含具有整数特征的数值,后文的数值都是整数,比如,报价窗口中的栅格(共16000个栅格),已成交和未成交的手数(3手),订单价格和报价窗口当前报价的点差(15点),要描述上述对象对应的事件也只能用整数,比如,开立仓位的尝试次数不能是1次半,只能是1次2次3次等等。

有两种整型数值:

十进制数由数字0到9组成,可以是正数也可以是负数:

10、11、12、1、5、-379、25、-12345、-1、2。

十六进制数由字符A到F或者a到f,数字0到9组成。

必须以0x或0X开头,可以是正数也可以是负数:

0x1a7b,0xff340,0xAC30X2DF23,0X13AAB,0X1。

整型的取值范围从-2147483648到2147483647。

如果常量或变量的数值超过了这个范围,程序操作的结果是空。

整型的常量变量占用四个字节的内存空间。

使用整型变量的例子:

intArt 

=10;

//整型变量示意

intB_27=-1;

intNum 

=21;

intMax 

=2147483647;

intMin 

=-2147483648;

双精度类型(double)

双精度类型的数值是带小数的实数。

双精度类型的例子可以是任何有小数部分的数值:

支撑线的趋势,商品价格,一天里开仓的手数。

在编码阶段,有时会遇到标明变量类型的问题,即,对程序员来说,一个变量应该属于哪种类型(int或double),并不总是十分清楚的。

让我们考虑下面这个例子:

一个程序一周内建仓12手。

用来计算每日平均开仓手数的变量A应该是什么类型?

答案十分清楚:

A=12手/5天。

这意味着A=2.4,由于有小数部分,A在程序里应该是双精度类型。

如果一周开仓10手,同样的变量A应该是什么类型?

你可能会想,2(10手/5天)没有小数部分,A应该是整型(int)。

但是,这个回答是错的。

可以认为A的值包含了全零的小数部分。

重点在于该变量本质上就是实数。

在本例中,变量A依然是双精度类型。

程序里的常量也一定要包含小数点:

A=2.0。

双精度类型的常量变量由三部分组成:

整数部分,小数点,小数部分。

数值可为正值或负值。

整数部分和小数部分由数字0到9组成。

小数点后面最多可以有15位。

举例:

27.12-1.02.5001-765456.0198732.070.123456789012345

双精度类型的数值,其取值范围从-1.7*e-308到1.7*e308。

在计算机内存中,双精度常量变量占用8个字节。

代码中使用double类型变量的例子:

doubleArt 

=10.123;

//双精度变量示意

doubleB_27 

=-1.0;

doubleNum 

=0.5;

doubleMMM 

=-12.07;

doublePrice_1=1.2756;

布尔类型(bool)

bool类型的数值是布尔(逻辑的)数值,可以为真或者为假。

学习bool类型的概念,从一个日常生活的简单例子入手。

比如说,老师要统计教材,会把学生的名字列在纸上,在右面标注是否有教材,比如,在表格里打钩或者画短线:

学生名单

物理教科书

生物教科书

化学教科书

1

Smith

V

-

2

Jones

3

Brown

...

25

Thompson

表格右面的数值只能是二选其一:

真或假。

这类数值不能用上面的任何一种类型来描述。

它们不是颜色、味道、总和等数值。

但是,它们在MQL4当中有十分重要的作用。

在MQL4当中,这样的数值被命名为布尔(bool)或逻辑类型的数值。

Bool类型的常量变量,其数值只能二选其一,真(True,TRUE,1)或假(False,FALSE,0)。

布尔类型的常量和变量占用四字节的内存。

程序中bool类型变量的示例:

boolaa 

=True;

//布尔变量示意

boolB17 

=TRUE;

boolHamma=1;

boolAsd 

=False;

boolNol 

=FALSE;

boolPrim 

=0;

字符串类型

字符串类型的值可以表示为一组ASCII字符。

在我们的日常生活中,比较相似的是商店、汽车制造的名称,字符串类型的值被双引号括起来(不要与单引号混淆!

)。

引号只用来确定字符串常量的开始和结束,字符串常量是用引号组织起来的一组字符。

如果有必要引入一个双引号(“),你应该把反向斜线(\)放在它的前面。

反向斜线(\)之后的任何特殊字符常量都表示其原义。

字符串常量的长度范围是0到255个字符。

如果一个字符串常量的长度超过其最大值,过多的字符将被截断,且编译器会给出相应的警告。

两个字符的组合方案的首字符是反向斜线(\),这是被大多数程序语言普遍接受和认可的方案,用来表达特定的文本格式。

这种组合不会显示在文本中。

例如,\n表示换行,\t表示制表符,等等。

字符串类型的值表示为用双引号括起来的一组字符:

"

MetaTrader4"

"

StopLoss"

Ssssstop_Loss"

stoploss"

10pips"

这就是一组字符,引号仅用于标记字符串边界。

字符串常量占用8个字节的内存空间。

其中第一部分为长整型,存储字符串缓冲区的长度,第二部分是存储字符串缓冲区的32位地址。

程序中字符串类型变量的示例:

stringPrefix 

="

;

//字符串变量示例

stringPostfix 

_of_my_progr.OK"

stringName_Mass="

History"

stringtext 

="

UpperLine\nLowerLine"

//文本包含有换行符

颜色类型

颜色类型的值表示为色差值。

“颜色”(蓝色,红色,白色,黄色,绿色等)的含义众所周知。

理解颜色类型的变量或常量所表达的意思很容易,就是一个变量或常量,它的值表示一种颜色。

这可能看起来有点不寻常,但却是最简洁的方法。

像整型常量的值表示数字一样,颜色常量的值表示颜色。

颜色常量和变量可以用三种方法表示:

用字符表示

用字符表示的方法是用三个数字来表示三种主要颜色分量的比例:

红、绿、蓝(RGB)。

颜色常量以C开头,并用单引号括起来。

每种颜色分量所占的比例在0~255之间,并可用十进制或十六进制表示。

示例:

C'

128,128,128'

(灰),C'

0x00,0x00,0xFF'

(蓝),C'

0xFF,0x33,0x00'

(红).

用整数表示

用整数表示的方法是以十六进制或十进制数字的形式写出颜色值。

十六进制数字看起来像OxOORRGGBB这样,其中RR是红色分量的比例,GG是绿色分量的比例,BB是蓝色分量的比例。

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

用整数和十六进制数表示颜色对用户非常友好,大多数现代的文本和图形编辑器提供所选颜色的红、绿、蓝的成分信息。

你只需要在编辑器中选择一种颜色,并复制从中找到的值到你的代码里。

示例:

0xFFFFFF(白),0x008000(绿),16777215(白),32768(绿).

图11.在现代编辑器中可以获取文字的恒定色度值的整数形式。

用颜色名表示

设置颜色最简单的方法是根据Web颜色表指定其名称。

在这种情况下,一种颜色的值被表示为颜色对应的名称,例如Red-红色。

Black

DarkGreen

DarkSlateGray

Olive

Green

Teal

Navy

Purple

Maroon

Indigo

MidnightBlue

DarkBlue

DarkOliveGreen

SaddleBrown

ForestGreen

OliveDrab

SeaGreen

DarkGoldenrod

DarkSlateBlue

Sienna

MediumBlue

DarkTurquoise

DimGray

LightSeaGreen

DarkViolet

FireBrick

MediumVioletRed

MediumSeaGreen

Chocolate

Crimson

SteelBlue

Goldenrod

MediumSpringGreen

LawnGreen

CadetBlue

DarkOrchid

YellowGreen

LimeGreen

OrangeRed

DarkOrange

Orange

Gold

Yellow

Chartreuse

Lime

SpringGreen

Aqua

DeepSkyBlue

Blue

Magenta

Red

Gray

SlateGray

Peru

BlueViolet

LightSlateGray

DeepPink

MediumTurquoise

DodgerBlue

Turquoise

Ro

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

当前位置:首页 > 考试认证 > 公务员考试

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

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