MT4精讲MT4编程入门全集Word文件下载.docx

上传人:b****5 文档编号:17534475 上传时间:2022-12-07 格式:DOCX 页数:24 大小:238.13KB
下载 相关 举报
MT4精讲MT4编程入门全集Word文件下载.docx_第1页
第1页 / 共24页
MT4精讲MT4编程入门全集Word文件下载.docx_第2页
第2页 / 共24页
MT4精讲MT4编程入门全集Word文件下载.docx_第3页
第3页 / 共24页
MT4精讲MT4编程入门全集Word文件下载.docx_第4页
第4页 / 共24页
MT4精讲MT4编程入门全集Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

MT4精讲MT4编程入门全集Word文件下载.docx

《MT4精讲MT4编程入门全集Word文件下载.docx》由会员分享,可在线阅读,更多相关《MT4精讲MT4编程入门全集Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

MT4精讲MT4编程入门全集Word文件下载.docx

程序不执行注释,注释容仅供阅读或保留不用的语句

在MQ语言编辑器中,注释容以灰色显示

二、分号“;

表示一个语句结束

三、逗号“,”

表示一个语句部间隔,不结束语句。

四、等于号“=”

赋值语句,把等号后面的值赋给等号前的变量中

五、加号“+”

整数或小数,则表示值相加;

字符串,则表示前后连接。

六、加加“++”

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

“i++;

” 

这实际上就是:

“i=i+1;

”的简写,表示i的值加1

七、加等于“+=”

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

例如“i+=2;

”,实际上就是“i=i+2;

”的简写,表示i的值加2

八、双等号“==”

等于号。

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

双等号前后值不相等,则返回逻辑值“假false”

九、叹号等号“!

=”

不等于号。

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

不等号前后值相等,则返回逻辑值“假false”

十、“&

&

逻辑符“并且”

十一、“||”

逻辑符“或者”

十二、大括号“{}”

表示函数体。

{}部为函数体语句。

MT4编程入门3:

自定义变量

一、自定义变量在使用前,必须先创建(定义),设定变量的类型和名称。

创建时可同时赋值,也可以不赋值。

名称可以使用中文字符。

例:

int 

mark;

 

创建一个整型变量,变量名为“mark”。

bool是否报警=true;

创建一个逻辑型变量,变量名为“是否报警”,同时,赋初值“true”

二、类型和类型定义词

自定义变量的基本类型有:

1、整形(int):

就是整数,包括负整数

2、双精度小数(double):

可以简单地理解为带小数位的数

3、字符串型(string)。

4、逻辑型(bool):

其值分别为“true、false”,即“真、假”,也可以写成“1、0”(1真,0假)。

类型定义词仅在创建变量时使用,后面使用变量时,就不能再加类型定义词了

三、附加变量

附加变量就是在程序投入使用后,变量值允许用户自由更改的变量,一般用作程序参数。

一般指标,例如MACD(12,26,9)参数输入就是通过附加变量实现,(12,26,9)分别为三个附加变量的默认值。

定义附加变量只需在变量定义语句前加“extern”

externint周期=9;

创建一个整型附加变量,变量名为“周期”,默认值为9,允许用户在程序外部修改参数值

MT4编程入门4:

自定义函数

自定义函数与数学函数在本质上是一致的

例如:

数学函数ft(x,y)=3x+2y(x,y为正整数)写成程序语句就是:

intft(intx,inty)

{

inttemp;

temp=3*x+2*y;

return(temp);

}

一、和自定义变量一样,自定义函数在使用前,也必须先设立,以定义其类型、名称、参数和运算语句。

函数类型、名称、参数位于函数头部(参数间以逗号分隔),

大括号中的是运算语句,也就是函数体部分。

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个数值。

二、自定义数组也必须“先建立,后使用”

创建(定义)时,必须设定类型和名称。

创建(定义)时,数组的元素个数也可以设定,也可以不设定

数组中第一个元素的编号为0,第二个为1,以此类推。

编号使用方括号括起来

在这上例中aa[0]的值为4、aa[1]的值为3、aa[2]的值为2、aa[3]的值为1

创建(定义)数组的同时,可以赋初值,也可以不赋初值。

intbb[];

创建数组bb,不设定数组元素个数

intcc[8];

创建数组cc,设定数组元素为8个,不赋初值

intdd[3]={9,8,7};

创建数组dd,设定数组元素为4个,并赋初值

赋值后,dd[0]的值为9、dd[1]的值为8、dd[2]的值为7

intee[9]={0,1,2,3};

创建数组ee,设定数组元素为9个,但只给前4个元素赋初值

三、数组使用时的赋值

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

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) 

最高价:

iHigh(symbol,timeframe,shift) 

最低价:

iLow(symbol,timeframe,shift) 

成交量:

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线蜡烛的收盘价

GBPUSD"

PERIOD_H1,i) 

表示英磅兑美元1小时图第i+1根K线蜡烛的收盘价

iHigh(NULL,0,0) 

既不指定商品,也不指定K线周期,用在谁就是谁,用在哪就是哪

2、移动平均值。

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("

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、在数组中求元素的移动平均值。

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

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

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

4、求自定义指标的值

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

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

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

如果自定义指标有多根指标线,则第一条自定义指标线的编号为0,第二条为1,第三条为2。

iCustom(NULL,0,"

mymacd"

12,26,9,2,0) 

(12,26,9)为自定义指标mymacd的三个参数

求当前图表中,自定义指标mymacd(12,26,9)的第3条指标线在最新位置的值

抛砖引玉,这里只是有代表性地列了几个函数,详细请查阅《MT4编程手册》

MT4编程入门7:

判断语句

一、if语句

if语句很常用,也比较简单。

规则:

如果小括号中的条件成立,则执行大括号中的语句;

如果不成立,则跳过大括号。

if(a==1)

b=c+1;

我们在编写报警指标的时候,就经常用到这一语句:

如果“价格向上达到指定价位”,则“报警”

如果“MACD上穿”,则“报警”

如果“均线金叉”,则“报警”。

等等

intmark=0;

if(High[1]<

1.0000&

High[0]>

=1.0000&

mark!

=1)

Alert(symbol(),"

价格向上触及1.0000"

);

mark=1;

if(Low[1]>

Low[0]<

=2)

价格向下触及1.0000"

mark=2;

这是一个价格上、下穿1.0000时报警的判断语句:

上穿报警条件:

当第二根K线最高价小于1.0000,并且最新K线最高价大等于1.0000

下穿报警条件:

当第二根K线最低价大于1.0000,并且最新K线最低价小等于1.0000

这里,mark是用作报警标记,mark的初值是0,

当上穿报警后,mark的值就改为1;

当下穿报警后,mark的值就改为2;

当mark=0时,说明从未报过警,上、下穿都能报警;

当mark=1时,说明已经上穿报过警了,不能再上穿报警了,但仍可下穿报警;

当mark=2时,说明已经下穿报过警了,不能再下穿报警了,但仍可上穿报警。

二、if...else语句

如果小括号中的条件成立,则执行if下大括号中的语句1;

如果不成立,则执行else下大括号中的语句2。

if(条件)

{

语句1;

else

语句2;

三、注意事项

1、只有语句后面才用到语句结束符“;

”条件、大、小括号后面都不用“;

2、语句用大括号括起来,但如果只有一行语句,则大括号可以省略

if(条件) 

语句1;

MT4编程入门8:

循环

一幅K线图有几千上万条K线,每根K线又各有开收盘价、最高低价等数值,而且还有很多移动平均线、MACD、RSI等指标值。

面对海量数据,我们必须用循环来实现数据的取值和赋值。

一、while循环

while(条件)

语句1

语句2

当小括号中的条件成立时,就执行大括号中的语句,执行完了再判断条件是否成立,如果条件成立就继续执行大括号中的语句。

只要条件成立,程序就不停地运行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环。

它与if语句的区别是:

if语句是当条件为真时运行一次;

而while语句则是只要条件为真,循环体语句就不停地运行,直到条件为假时结束循环。

externint快线=12;

externint慢线=26;

doublebuffer[];

inti=0;

while(i<

1000)

buffer= 

iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)

-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);

i++;

这里,循环执行条件是i<

1000,循环体中有两个语句,一句是把两条均线的差值赋给数组buffer,另一句“i++;

”是每运行一次,i的值在原有基础上增加1。

这样,随着循环的不断运行,i的值逐渐增加,循环1000次后,i的值也就从0变为1000,此时“i<

1000”就不再成立,循环结束。

这样,数组buffer[]中也就有了1000个值。

二、for循环

for循环与while循环在原理上是一致的,只是书写格式上有所区别

把上面的例子改成for语句:

for(inti=0;

i<

1000;

i++)

与前面相比,我们注意到:

“inti=0;

”语句从“while(i<

1000)”上方移到循环条件“i<

1000”的前面;

”语句从循环体中移到了循环条件“i<

1000”的后面;

循环执行顺序与while循环一致:

第一步、先执行小括号中的第1句:

(此语句用来定义初始变量,在循环中仅执行一次,可以为没有任何表达式的空操作符“;

”)

第二步、再判断小括号中的第2句是否成立:

i<

如果不成立,则循环结束;

如果成立,则循环继续运行,执行第三步

第三步、按顺序执行大括号中的语句

第四步、执行小括号中的第1句:

i++(此语句即:

每执行一次,i的值增加1)

然后回到第二步继续执行循环。

再补充一点:

如果循环体中(大括号中)只有一行语句,大括号可以省略

MT4编程入门9:

MT4自定义指标的结构

MT4自定义指标一般由四个部分构成:

(1)文件头部

(2)参数、变量和数组的定义

(3)初始化函数init()

(4)主函数start()

一、文件头部,也称为预处理程序

预处理程序以“#”开头,行尾无语句结束符“;

常用的预处理程序有:

1、#property 

indicator_chart_window

把指标显示在主图。

如:

均线、SRA等类指标用到此语句

2、#propertyindicator_separate_window

把指标显示在副图。

MACD、RSI、威廉等类指标用到此语句

3、#propertyindicator_buffers3

显示3根指标线

4、#propertyindicator_color1Red

第1根指标线的颜色为Red

5、#property 

indicator_width1 

1

第1根指标线的粗细分别为1

6、#propertyindicator_level1 

0.00

在0.00值位置横划1条虚线

二、参数、变量和数组的定义

全局性的参数、变量、数组在此定义,局部变量可在start

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

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

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

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