mt4编程入门4.docx

上传人:b****6 文档编号:7085012 上传时间:2023-01-17 格式:DOCX 页数:15 大小:193.92KB
下载 相关 举报
mt4编程入门4.docx_第1页
第1页 / 共15页
mt4编程入门4.docx_第2页
第2页 / 共15页
mt4编程入门4.docx_第3页
第3页 / 共15页
mt4编程入门4.docx_第4页
第4页 / 共15页
mt4编程入门4.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

mt4编程入门4.docx

《mt4编程入门4.docx》由会员分享,可在线阅读,更多相关《mt4编程入门4.docx(15页珍藏版)》请在冰豆网上搜索。

mt4编程入门4.docx

mt4编程入门4

dfd34343434343MT4编程入门教程

MT4编程入门教程目录

MT4编程入门1:

MT4自定义指标的基本操作

MT4编程入门2:

指标源码中的常用符号说明

MT4编程入门3:

自定义变量

MT4编程入门4:

自定义函数dfdfsf

MT4编程入门5:

自定义数组

MT4编程入门6:

市场数据取值

dfdfdf

MT4编程入门7:

判断语句

dfd

MT4编程入门8:

循环

MT4编程入门9:

MT4自定义指标的结构

MT4编程入门10:

画一条指标线

MT4编程入门11:

MT4的报警

Fxsol环亚汇市、Alpari艾福瑞客户每标准手返5~6美金。

详询QQ

MT4编程入门1:

MT4自定义指标的基本操作

MT4自定义指标的保存目录、指标编缉器与指标调用

一、MT4自定义指标保存在C:

\ProgramFiles\MetaTrader4\experts\indicators这个目录中,

dfdfdsfds

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

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

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

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

三、将源码保存为源码文件

在论坛上,我们也经常能看到指标源码贴在网页上,但没有mq4、ex4等文件可以下载,只能复制源码。

此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。

1、打开MQ语言编辑器

2、在MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。

3、删除新文件里面的所有内容,成为一个空文件,

4、接着我们就可以将网页上源码复制粘贴进来

试着点一下“编写”,如果左下角出现“0错误,0警告”,那说明源码没问题,编译通过了,成功生成了ex4可执行文件

5、还有很重要的一点,就是要把源码文件保存到正确的目录中

保存后,再点一下编写。

到此,源码保存完成。

当然,我们也还有另的办法:

可以打开一个原已存在的mq4文件,然后另存为你需要的文件名,再删除文件中的所有内容成为空文件,把网页上的源贴到文件中保存即可

也可以在记事本中新建一个文件,把网页上的源码贴进记事本,然后取个文件名保存到上面提到的目录,不过文件后缀必须输入mq4,保存类型选择“所以文件”

四、mt4程序调用自定义指标

这非常简单

dfdsfdsfdsfdsfdfd

五、加号“+”

整数或小数,则表示值相加;字符串,则表示前后连接。

六、加加“++”

表示把符号前的变量值加1,例如:

“i++;”这实际上就是:

“i=i+1;”的简写,表示i的值加1

七、加等于“+=”

表示把符号后的值加到符号前的变量中。

例如“i+=2;”,实际上就是“i=i+2;”的简写,表示i的值加2

八、双等号“==”

等于号。

用于逻辑判断,双等号前后值相等,则返回逻辑值“真true”;双等号前后值不相等,则返回逻辑值“假false”

九、叹号等号“!

=”

不等于号。

用于逻辑判断,不等号前后值不相等,则返回逻辑值“真true”;不等号前后值相等,则返回逻辑值“假false”

十、“&&”

逻辑符“并且”

十一、“||”

逻辑符“或者”

十二、大括号“{}”

fdsfdsfdsf

return语句为函数结束语句,return后面括号中的值为函数返回值,即函数运算结果。

上例中,int为函数类型,表示该函数的返回值(运算结果)是整数;

(x,y)为参数,由于自定义变量使用之前都必须先创建,所以要加上类型定义词int

ft为函数名,有了函数名,我们就可以在别处用ft(2,1)的形式来调用此函数;

函数体部分有三句:

第一句,定义一个整形变量temp

第二句,计算temp的值

第三句,函数结束,返回调用点,以temp的值作为本函数返回值。

此函数也可以简写为:

intft(intx,inty){return(3*x+2*y);}

二、函数类型与类型符

函数类型就是函数返回值(运算结果)的类型,与自定义变量类型差不多

有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,

还有一种函数是以函数运行为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以写成void(无值型)

三、函数中如果定义了自定义变量,那么此变量仅在本函数内部存在,函数运行结束时,自定义变量也就自动注销。

上例中,有x、y、temp三个自定义变量,在函数运行时创建,在函数运行结束时自动消失,仅在函数内部有效,与函数外部无关。

四、函数的调用

函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用

如我们前面创建了ft(x,y)函数,则别处我们可以用ft(4,5)等样式来调用ft(x,y)函数求值。

调用时,传递参数值给ft(x,y)函数(按顺序把4传给x,把5传给y),返回结果23后继续执行主程序。

MT4编程入门5:

自定义数组

一、数组是一系列同类型变量的集合,可以同时存储多个数值。

例:

intaa[4]={4,3,2,1};

这是一个数据名为aa、包含了4个元素的整数型数组(即数组长度为4),可以同时存储4个数值。

fdsfsdfs三、数组使用时的赋值

数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外,数组元素必须一个一个赋值

例如:

dd[2]=1;

这是对数组dd的第3个元素dd[2]([0]是第1个,[2]表示第3个)重新赋值为1

在这里,没有整数型变量定义符int,

这样,数组dd原有三个值{9,8,7}就变为{9,8,1}

四、数组的引用

数组只是一系列变量的集合,所以每次只能使用数组中的一个元素。

数组的引用必须指定明确的引用对象,一次只能引用一个。

如果需要使用整列数组,则必须逐个使用。

例如:

数组aa[4]的值为{4,3,2,1}

我们用aa来引用数组aa中的值

当i=0时,aa[i]的值为4

当i=1时,aa[i]的值为3

当i=2时,aa[i]的值为2

当i=3时,aa[i]的值为1

MT4编程入门6:

市场数据取值

一、预定义数组(MT4已经定义好的,可以直接使用)

开盘价、最高价、最低价、收盘价、成交量等历史数据,每根K线蜡烛都各有一个,所以必须用数组来解决问题,MT4有几个预定义数组:

开盘价Open[]、最高价High[]、最低价Low[]、收盘价close[]、成交量Volume[]、所属时间Time[]

类型为双精度double型(即精确小数)

这里有一个位置的问题,右边第一根K线蜡烛(即最新的蜡烛)的编号为0,第二根蜡烛编号1,第三根蜡烛编号2,也就是说从右向左倒着数过去。

Open[0]、High[0]、Low[0]、Close[0],表示最新的开盘价、最高价、最低价、收盘价

Open[1]、High[1]、Low[1]、close[1],表示第2根K线蜡烛的开盘价、最高价、最低价、收盘价

Open[2]、High[2]、Low[2]、close[2],表示第3根K线蜡烛的开盘价、最高价、最低价、收盘价

Open[3]、High[3]、Low[3]、close[3],表示第4根K线蜡烛的开盘价、最高价、最低价、收盘价

Open、High、Low、close,表示第i+1根K线蜡烛的开盘价、最高价、最低价、收盘价

以此类推。

注意:

这些是数组,用的是方括号。

二、预定义变量

买入价、卖出价是实时价格,MT4用预定义变量Ask和Bid表示,数值类型为double双精度

还有一些预定义变量,如:

Bars表示图表中的蜡烛数,类型为int整数型

Digits表示当前货币对的小数位,类型为int整数型,无日元币对为4,有日元币对为2,黄金石油等一般也为2

Point表示当前货币对的点值,类型为双精度double型,无日元币对为0.0001,有日元币对为0.01。

与Digits正好相反。

三、指标函数

1、价格、成交量、时间

它们都有三个参数:

货币对名、K线周期、位置序号

开盘价:

iOpen(symbol,timeframe,shift)双精度double型

收盘价:

iClose(symbol,timeframe,shift)双精度double型

最高价:

iHigh(symbol,timeframe,shift)双精度double型

最低价:

iLow(symbol,timeframe,shift)双精度double型

成交量:

iVolume(symbol,timeframe,shift)双精度double型

所属时间:

iTime(symbol,timeframe,shift)日期时间datetime型

K线周期为:

1分钟图(PERIOD_M1)、5分钟图(PERIOD_M5)、15分钟图(PERIOD_M15)、30分钟图(PERIOD_M30)、

1小时图(PERIOD_H1)、4小时图(PERIOD_H4)、日线图(PERIOD_D1)、周线图(PERIOD_W1)、周线图(PERIOD_W1)、月线图(PERIOD_W1)

例:

iOpen("USDJPY",PERIOD_H1,0)表示美元兑日元1小时图最新K线蜡烛的开盘价

iClose("EURUSD",PERIOD_H4,2)表示欧元兑美元4小时图第3根K线蜡烛的收盘价

iClose("GBPUSD",PERIOD_H1,i)表示英磅兑美元1小时图第i+1根K线蜡烛的收盘价

iHigh(NULL,0,0)既不指定商品,也不指定K线周期,用在谁就是谁,用在哪就是哪

2、移动平均值。

双精度double型

iMA(symbol,timeframe,period,ma_shift,ma_method,applied_price,shift)

参数共7个,分别为:

商品名称、K线周期、均线周期、均线偏移、平均模式、价格种类、位置

均线周期:

10天平均线的均线周期为10,20天均线的均线周期为20

均线偏移:

均线位置整体左右移动的位置偏移量

平均模式:

简单移动平均(MODE_SMA)、指数移动平均(MODE_EMA)、平滑移动平均线(MODE_SMMA)、线性加权移动平均线(MODE_LWMA)

价格种类:

收盘价(PRICE_CLOSE)、开盘价(PRICE_OPEN)、最高价(PRICE_HIGH)、最低价(PRICE_LOW)、中值(PRICE_MEDIAN)、5(PRICE_TYPICAL)、6(PRICE_WEIGHTED)

例1:

iMA("EURUSD",PERIOD_H1,20,0,MODE_SMA,PRICE_CLOSE,0)

表示:

欧元1小时图上,以收盘价计算的,20小时简单移动平均线,最新K线所对应位置的值

例2:

iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)

表示:

在当前商品、当前K线周期图表上,以收盘价计算的,20(天)指数移动平均线第3根K线所对应位置的值

其他如MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似

3、在数组中求元素的移动平均值。

双精度double型

iMAOnArray(数组名,总数,平均周期,均线偏移,平均模式,位置)

这也与iMA函数差不多,不过数据源变为数组

从数组中不但可以求得移动平均值,还可以求得RSI等指标值

4、求自定义指标的值

我们经常自己编一些自定义指标,可用iCustom函数来取得自定义函数的值

iCustom(商品名,K线周期,自定义指标名称,自定义指标参数1,参数2,参数3,,,自定义指标线编号,位置)

如果自定义指标只有一根指标线,则自定义指标线的编号为0。

==============================================

==============================================

以下为上述语句的简要说明

#propertyindicator_separate_window

指标放在副图

#propertyindicator_color1White

第一条指标线为白色

#propertyindicator_level10

在副图中零值位置上画一条水平横线,

externintFMA=12;

externintSMA=26;

设立二个整数型变量,默认值为12和26,允许外部修改值

doublebuf[];

设立一个数组

intinit()

初始化函数。

该函数在指标加载时只运行一次。

init是系统默认的函数名,但使用时仍需要进行创设,所以要加定义符int

{

SetIndexBuffer(0,buf);

设置数组buf为第一条指标线

SetIndexStyle(0,DRAW_LINE);

设置第一条指标线线型为连续曲线

return(0);

函数结束语句

}

intstart()

指标触发函数。

与init函数不同,该函数在有数据变化时被触发,如果数据被不断更新,则该函数将不断执行。

start也是系统默认的函数名,但使用时也仍然需要进行创设,所以也要加定义符int

{

intlimit=Bars-IndicatorCounted();

自定义一个变量limit,并赋值

Bars是图表中的柱数

IndicatorCounted()缓存中的柱数,就是已经计算过的有值的柱数

这样limit的值就是未经计算的柱数,这样就可以起到优化程序的作用。

for(inti=0;i

循环语句。

循环从i=0开始,每循环一次i值增加1,一直循环到i

由于循环变量i为一个新变量,所以要先定义,加上整型变量定义符int

下面大括中为循环体,此例中只一条语句

{

buf=

iMA(NULL,0,FMA,0,1,0,i)

-iMA(NULL,0,SMA,0,1,0,i);

}

给数组buf赋值,其值分别为相应位置上两条均线的差

i是水平位置序号值,即烛柱从右到左的序号,右边第一个烛柱序号为0

return(0);

start函数结束

}

MT4编程入门11:

MT4的报警

报警功能是MT4的一大特色。

它可以在预定的条件达到时,发出警报。

与指标画线相比,报警语句显得非常简单,

只要在判断语句中加一个报警语句即可

报警方式有:

弹出窗口报警、音乐报警、邮件报警等。

如果邮箱开通了手机短信通知,则邮件报警的内容会即时转发到手机上。

1、弹出窗口报警:

当(条件达到)执行此语句时,以弹出窗口警告。

格式:

Alert(内容1,内容2,内容3,内容4);

报警内容为字符串型,内容之间加逗号

例如:

Alert(Symbol(),"4小时图MACD上穿零轴");

2、音乐报警:

当(条件达到)执行此语句时,播放一段音乐。

格式:

PlaySound("音乐文件名.wav");

文件类型为wav格式,并且保存在C:

\ProgramFiles\MetaTrader4\sounds目录中

文件名加引号

3、邮件报警:

当(条件达到)执行此语句时,发送一个邮件。

(收发件人地址在MT4系统中设置详见《MT4编程实例1:

一个简单的小程序,让你的手机摇身变成外汇行情接收机》)

格式:

SendMail(标题1+标题2,内容1+内容2);

标题之间以加号连接,内容之间也以加号连接

邮件标题和邮件内容以逗号间隔

下面是《价格穿越某均线报警》举例

+---------------------------------

#propertyindicator_chart_window

externint警戒均线=20;

intmark=0;

intstart()

{

if(iHigh(0,0,0)>=iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,0)

&&iHigh(0,0,1)

&&mark!

=1)

{

Alert(Symbol(),"向上触及30均线");

mark=1;

}

if(iLow(0,0,0)<=iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,0)

&&iLow(0,0,1)>iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,1)

&&mark!

=2)

{

Alert(Symbol(),"向下触及",警戒均线,"均线");

mark=2;

}

return(0);

}

+---------------------------------

部分语句说明:

#propertyindicator_chart_window

此句是把程序放在主图,当然这此例中放在副图也一样

externint定义一个外部参数变量,整数型,允许外部值修改

int定义一个整数型变量

intstart()定义触发函数

if()判断

iHigh()最高价值函数

iLow()最低价值函数

iMA()移动平均线值函数

Alert()报警函数

Symbol()商品名称函数

&&逻辑运算符“并且”

!

=逻辑运算符“不等于”

MODE_SMA简单移动平均模式

PRICE_CLOSE以收盘价计算

再说一下自定义变量mark的作用:

mark的初值是0,当上穿报警时给mark赋值1,当下穿报警时给mark赋值2。

这样当mark的值为1时,说明已经对上穿报过警了,就不能再次对上穿报警;

当mark的值为2时,说明已经对下穿报过警了,就不能再次对下穿报警。

这样就起到了消除重复报警的作用。

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

当前位置:首页 > PPT模板 > 中国风

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

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