EA编程教程第二讲-数据类型

EA编程教程第二讲-数据类型
EA编程教程第二讲-数据类型

EA编程教程第一讲-MQL语法

什么是MQL?MetaQuotes Language 4 (MQL4)语言是MT4软件为了编写出执行交易策略的内置编程语言。我们可以通过编写EA(Expert Advisors)来控制MT4客户端按照我们的预先定义好的交易策略来执行外汇交易。另外,我们可以使用mql来编写技术分析指标,脚本和库。

1)MQL的语法

MQL的语法与我们平时见到的C语言语法极其类似,但仍然有以下不一致的地方:

一:没有地址运算符。

二:没有do while操作语句

三:没有goto语句。

四:没有?::语句。

五:没有结构体。

六:不支持复杂的赋值语句,比如 val1=val2=0; arr[i++]=val; cond=(cnt=OrdersTotal)>0;这种复杂语句不被支持。

2)注释

多行注释从/*开始并以*/结束。注释符不能嵌套,只能头尾各一个。单行注释符为//,仅注释一行。我们写程序的时候要养成注释的习惯,可以让程序更好理解,同时MQL编译器自动忽略掉注释的内容。注释的内容只给我们人看,不是给机器看的。比如:

// 这个是单行注释

/* 这个是多行注释

int i = 0;

注释里面爱写什么都行

*/

3)标识符

标识符是程序里面变量,函数,数据类型的名称,长度不能超过31个字符,标识符可以由数字,大小写字母a到z和A到Z,下划线(_),其中第一个符号不能是数字,并且标识符

不能与保留字一样。什么是保留字请看下文。

4)保留字

保留字是MQL语言定义好的单词,每个单词都有这特殊的意义。

保留字如下:

数据类型:bool,color,datetime,double,int,string,void

存储类型: extern,static

操作符:break,case,continue,default,else,for,if,return,switch,while

其他:false,true

课程简介:

什么是MQL?MetaQuotes Language 4 (MQL4)语言是MT4软件为了编写出执行交易策略的内置编程语言。我们可以通过编写EA(Expert Advisors)来控制MT4客户端按照我们的预先定义好的交易策略来执行外汇交易。另外,我们可以使用mq

本课程知识点:

MT4:MT4是一个被广泛使用的外汇交易平台,内含4大类29种常用技术指标。我认为我们只需要了解这些指标就足够了,如果你精力过剩,也可以研究网上近千种技术指标。成交量类指标对外汇市场特点影响,判断趋势的效率不高。

EA:EA就是Expert Adviser的缩写,也就是我们俗称的智能交易,我们可以利用MQL语言来编写EA来实现机器自动交易的目的,它是外汇市场是唯一一个可以进行24小时交易的市场,以我们的作息时间来看我们无法做到24小时连续的交易,因此我们错过了很多好的进场机会。

技术分析:所谓技术分析,泛指利用某些历史资料来判断整个汇市或个别外汇币种价格未来变动的方向和程度的各种分析方法。汇市的基础因素分析和技术分析既相互联系,又相互独立,共同构成对外汇投资的完整的分析。

EA编程教程第二讲-数据类型

所有的程序就是对数据进行操作,我们根据不同的需求对数据定义不同的类型,比如数字类型的数据用于操作数组。价格数据使用浮点型类型数据,MQL本身没有货币类型的数据类型。

不同的数据类型有着不同的处理速度,其中整形处理的最快,double类型的需要特殊处理,所以比整形要慢,string也就是字符串类型处理起来最慢,因为处理字符串需要动态的分

配和释放内存,对内存的操作比较频繁。

以下是常用的数据类型

1)int,整型,它就是我们常见的整数,入1,-100,908等等。它的范围为

-2147483648 to 2147483647,如果超出这个范围,则会程序会提示异常。

2)bool,布尔型。它的值只有两个,true或false。Bool型其实就是个int类型,不过它的值被限定为1:true和0:false。例如:

bool a = true;

bool b = 0; //b的值为false

3)char, 字符型:它的内部也是int型,范围为0到255。如果超过这个范围,则程序会提示异常。我们不直接使用char,而是使用int,如:

int a = 'a';

int b = 'c';

4)string 字符型,字符型可以保存字符串如:

string a = "这是一个字符串";

5)double 浮点型,用于保存含有小数的数字如:

double a = "1.23";

double b = "-90.98";

6)color 颜色类型,颜色类型的内部实现,其实也是一个int型。

7)datetime 时间类型,时间类型的内部其实也是个int型,它的实际值为1970-1-1到指定时间的秒数。时间类型的赋值如:

datetime d = D'2010.1.1 12:3:4'

datetime c = D'2010.2.3 3:56';

课程简介:

所有的程序就是对数据进行操作,我们根据不同的需求对数据定义不同的类型,比如数字类型的数据用于操作数组。价格数据使用浮点型类型数据,MQL本身没有货币类型的数据类型。

本课程知识点:

MT4:MT4是一个被广泛使用的外汇交易平台,内含4大类29种常用技术指标。我认为我们只需要了解这些指标就足够了,如果你精力过剩,也可以研究网上近千种技术指标。成交量类指标对外汇市场特点影响,判断趋势的效率不高。

EA:EA就是Expert Adviser的缩写,也就是我们俗称的智能交易,我们可以利用MQL语言来编写EA来实现机器自动交易的目的,它是外汇市场是唯一一个可以进行24小时交易的市场,以我们的作息时间来看我们无法做到24小时连续的交易,因此我们错过了很多好的进场机会。

技术分析:所谓技术分析,泛指利用某些历史资料来判断整个汇市或个别外汇币种价格未来变动的方向和程度的各种分析方法。汇市的基础因素分析和技术分析既相互联系,又相互独立,共同构成对外汇投资的完整的分析

EA编程教程第三讲-数据类型转换

MQL语言目前仅支持隐式转换,MQL目前可以做一下数据类型自动转换。

int(bool, color, datetime) 可转换成 double 或 string

double 可转换成 string,除了以上两种转换外,不能进行其他的数据类型转换,如:

int i = 1 / 2; //不进行数据转换,注意结果为0,而不是0.5,因为分子和分母都是整形,就不进行转换。

int i = 1 / 2.0; //表达式已经转换成double类型了,算出来的结果为0.5,但是由于变量i定义为int型,所以取整部分0,最终结果还是整数0。

课程简介:

MT4是一个被广泛使用的外汇交易平台,内含4大类29种常用技术指标。我认为我们只需要了解这些指标就足够了,如果你精力过剩,也可以研究网上近千种技术指标。成交量类指标对外汇市场特点影响,判断趋势的效率不高。EA:EA就是Expert Adviser的缩写,也就是我们俗称的智能交易,我们可以利用MQL语言来编写EA来实现机器自动交易的目的,它是外汇市场是唯一一个可以进行24小时交易的市场,以我们的作息时间来看我们无法做到24小时连续的交易...

本课程知识点:

MT4:MT4是一个被广泛使用的外汇交易平台,内含4大类29种常用技术指标。我认为我们只需要了解这些指标就足够了,如果你精力过剩,也可以研究网上近千种技术指标。成交量类指标对外汇市场特点影响,判断趋势的效率不高。

EA:EA就是Expert Adviser的缩写,也就是我们俗称的智能交易,我们可以利用MQL语言来编写EA来实现机器自动交易的目的,它是外汇市场是唯一一个可以进行24小时交易的市场,以我们的作息时间来看我们无法做到24小时连续的交易,因此我们错过了很多好的进场机会。

技术分析:所谓技术分析,泛指利用某些历史资料来判断整个汇市或个别外汇币种价格未来变动的方向和程度的各种分析方法。汇市的基础因素分析和技术分析既相互联系,又相互独立,共同构成对外汇投资的完整的分析。

EA编程中【point的解读】

什么是Point?

Point是什么?

为什么叫Point?

为什么要乘以Point?

为什么又除以Point?

Point的英文解释是“点”

MT4系统内定

这个Point字代表一个变化的“点”

比如:欧元的计算

1.9356 / Point = 19356

又比如:日元的计算

132.66 / Point = 13266

注意:Point是会自动变化的

好处是当你编写程式的时候

不会因为欧元对美元欧元对日元

就会出错

那么Point有什么用呢?

再比如:High的值减Low的值

或者关盘减开盘

if(Close[0]-Open[0]/Point > 10){buyme();}

他的值可能是

1.3100-1.3270=-170

-170 是没有大过 10

因为是下降,所以没有成交交易

再比如:macd1_0的值减macd1_1的值

再比如:ma1now的值减ma2now的值

总之是计算“点”用的

Point 没有固定的值

碰到 GU 可能是 0.0001

碰到 EJ 可能是 0.001

使用的目的就是要把他们变成“整数”

你可以了解为除 /Point与乘 *point

/Point小數點往後移

小數變成整數

*Point小數點往前移

整數變成小數

例子:EU小數點有4位

EU / Point小數點往后移4位

小數變成整數

JY小數點有2位

JY / Point小數點往后移2位

也是小數点變成整數

JY 的 high[0]-low[0]=小數点 /Point =整數

EU 的 high[0]-low[0]=小數点 /Point =整數

例子:

JY 的 if( high[0]-low[0] > 10 *Point){buyme()}; JY 的高盘减低盘大过10点就买上

EU 的 if (high[0]-low[0]> 10 *Point ){buyme()}; EU 的高盘减低盘大过10点就买上

这两个答案一样

if (high[0]-low[0]> 10 *Point ){buyme()};

if ( (high[0]-low[0]) / Point > 10){buyme()}; 注意:Point 的 P 是大写的

Ask 的 A 也是大写的

Bid 的 B 要大写

颜色Red 的 R 也是大写的

如何解读EA

告诉我以下怎样解读

if(s+b==0

&& ma1now>ma2now

&& (ma1now-ma2now)/point>10

&& macd1now>0

&& macd2now/point>10

&& close[0]>open[0]

&& high[0]-low[0]/point>10 && close[0]-open[0]/point>10 ){buyme();}

解读:

如果(买卖等于零

加上均线1大过均线2

加上均线1减均线2大过10点加上 macd1超过零

加上 macd2超过10点

加上收盘大过开盘

加上高减低大过10点

加上收盘减开盘大过10点

){这样才买上成交}

认识Close[0]和Open[0]

一个K线的开始叫Open[0]

一个K线的结束叫Close[0]

上一个的K线的开始叫Open[1] 上一个K线的结束叫Close[1]

上上一个的K线的开始叫Open[2]

上上一个K线的结束叫Close[2]

所以要判断几时的K线就什么号码

比如:Open[0] Open[1] Open[2] Open[3] Open[4]

比如:Close[0] Close[1] Close[2] Close[3] Close[4] Close[0]>Open[0] 表示上升

Close[0

如果你这样编写

if(Close[0]>Open[0]

&& Close[1]>Open[1]

&& Close[2]>Open[2]

&& Close[3]>Open[3]){buyme();}

表示后方有3次上升

然后这一次也是上升

判断就下注上升

也就是买上Buy

反过来就卖下Sell

认识High[0]和Low[0]

一个K线的高点叫High[0]

一个K线的低点叫Low[0]

上一个的K线的高点叫High[1]

上一个K线的低点叫Low[1]

上上一个的K线的高点叫High[2]

上上一个K线的低点叫Low[2]

所以要判断几时K线的高低点就什么号码

比如:High[0] High[1] High[2] High[3] High[4]

比如:Low[0] Low[1] Low[2] Low[3] Low[4]

High[0]-Low[0] 表示我们可以得到他们的差点

High[1]-Low[1] 表示我们可以得到上一回的差点

如果你这样编写

if(Close[0]>Open[0]

&& Close[1]>Open[1]

&& (High[1]-Low[1])/Point>10

&& (High[0]-Low[0])/Point>10

){buyme();}

表示后方有上升超过10点

然后这一次是上升超过10点

判断就下注上升

也就是买上Buy

反过来就卖下Sell

if(Close[0]

&& Close[1]

&& (High[1]-Low[1])/Point>10

&& (High[0]-Low[0])/Point>10

){sellme();}

iCustom()函数在外汇EA中的应用

在mt中编写指标或EA时,iCustom()是一个非常有用的函数,它的功能是调用客户自己编写的的指标,并输出相应的指标值。

它的函数原型是这样的:

symbol:计算指标数据上的货币对名称. NULL表示当前货币对。

timeframe:时间周期。可以时间周期列举任意值. 0表示当前图表的时间周期。

name:客户指标完成程序名称,也就是你的自定义指标的名称了。

…:参量设置(如果需要)。通过的参量和他们的顺序必须与自定义指标声明的外部变量对应。

mode:索引行。从0到7并且必须对应以其中一个使用的索引的SetIndexBuffer函数。

shift:从显示缓存采取的值的索引(转移相对当前柱特定相当数量期间前)。

这里要注意的是,自己的指标名一定要用双引号引起来,因为name参数是sting型。

有了这个功能,我们可以先编一个指标做基础,然后再需要时进行调用,并可以用不同方式,不用时间周期来输出。

实例:

比如我自己先编了一个名叫“my_Ichimoku”的指标,这个指标mt4中有,较热门的“眼镜蛇”交易系统中也用到它,其中的云图有人把它看得很神,其实没什么。另外,它的线条太多,反而看不清,所以。自己编个只带云图的。上图就是它的效果。

现在,我们又编了一个名叫my_Ichimoku_2“的指标,目的是为了可以跨时间周期来查看云图。比如第一幅图是在15分钟线上用的,而如果我想在15分钟图上查看5分钟或1小时图上的云图。除了改编my_Ichimoku之外,也可以再编一个my_Ichimoku_2,在其中调用第一个指标。假如我们想看小时图上的情况,可以用这样的句子来完成。

……

sa1Buffer = iCustom(NULL, PERIOD_H1, “my_ichimoku”, myTK, myKi, mySk, 0, iBarShift(NULL, PERIOD_H1, iTime(NULL, 0, i)));

sb1Buffer = iCustom(NULL, PERIOD_H1, “my_ichimoku”, myTK, myKi, mySk, 1, iBarShift(NULL, PERIOD_H1, iTime(NULL, 0, i)));

//—(其中时间偏移用了函数iBarShift())

/*

—PERIOD_H1是应用的时间周期,”my_ichimoku”表示调用名字为my_ichimoku的指标,即你的自定义指标,注意它是用双引号括起来的。后面三个是my_ichimoku里的指标参数,可以根据你的需要设定,但要注意它们的顺序必须与原指标保持一致。其后的0跟1分别表示调用它的第一个缓存和第二个缓存,也就是指标输出的第一根线与第二根线的值。最后是shift值,K线的偏移量,这里由于是要在15分钟图上看小时图的情况,所以用了iBarShift()函数。它的用法请查看相关资料,我也会另外专门讲到它。

*/

上图就是在15分钟图输出的它的效果(第一个指标中云图用四根线画出。而第二指标调用了其中的两条)。

从上面可以看出,有了iCustom()函数,自定义指标的调用就非常方便,在希望以自定义指标为基础来编写EA时非常有用。

外汇EA自定义指标的基本操作

该目录中主要有二种类型的文件,

一种是mq4文件,这是MT4自定义指标的源码文件,是一种高级语言文件,可以人工编写修改,机器不能直接执行,但能在MT4启动时自动编译为ex4可执行文件。

另一种就是ex4文件,这是MT4自定义指标的可执行文件,由mq4文件编译得到。

mq4文件必须编译为ex4文件才能被MT4执行。

但ex4文件是机器码文件,人工不可修改

另外还有一个文件是mqlcache.dat,它用来保存目录中的文件信息,如果MT4无法自动编译,只要删除此文件即可解决问题

mq4文件编译为ex4可执行文件有两种方法:

1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。

2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮,即可生成ex4文件

相关主题
相关文档
最新文档