MT4编程初级手册.doc

上传人:豆**** 文档编号:33569032 上传时间:2022-08-11 格式:DOC 页数:10 大小:34.50KB
返回 下载 相关 举报
MT4编程初级手册.doc_第1页
第1页 / 共10页
MT4编程初级手册.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《MT4编程初级手册.doc》由会员分享,可在线阅读,更多相关《MT4编程初级手册.doc(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、MT4编程初级手册(2):指标源码中常用符号的说明 一、注释符:行注释:单行的注释使用“/”;块注释:多行的注释使用“/* */”程序不执行注释,注释内容仅供阅读或保留不用的语句,编译时不进行编译。在MQ语言编辑器中,注释内容以灰色显示。 二、分号“;”语句结束符,表示一个语句结束。 三、逗号“,”分隔符,表示一个语句内部间隔,不结束语句,通常用于变量与变量之间,参数之间。 四、等于号“=”赋值运算符,作用为把等号后面的值赋给等号前的变量中。 五、加号“+”运算符。对于整数或小数,则表示值相加;对于字符串,则表示前后连接。 六、加加“+”自增运算符,表示把符号前的变量值加1,例如:“i+;”

2、实际上进行的运算就是:“i=i+1;”的简写,表示把i的值加1。 七、加等于“+=”表示把符号后的值加到符号前的变量中。例如“i+=2;”,实际进行的运算就是“i=i+2;”的简写,表示i的值加2。 八、双等号“=”逻辑判断符,等于号。用于逻辑判断,双等号两边值相等,则返回布尔值“真-true”;双等号两边值不相等,则返回布尔值“假-false”。 九、叹号等号“!=”逻辑判断符,不等于号。用于逻辑判断,不等号两边值不相等,则返回布尔值“真-true”;不等号两边值相等,则返回布尔值“假-false”。 十、“&”逻辑判断符“与”,“并且”。 十一、“|”逻辑判断符“或者”。 十二、大括号“”

3、用以表示函数体,在其中写函数的语句。内部为函数体语句。MT4编程初级手册(3):自定义变量一、自定义变量在使用前,必须先声明(定义),向系统声明变量的类型和名称。 创建时可同时进行赋值(赋默认值),也可以不赋值。MQ语法中自定义变量的名称可以使用中文字符。 例子: int flag; 创建一个整型变量,变量名为“flag”。 bool 是否报警=flase; 创建一个布尔型变量,变量名为“是否报警”,同时,赋初值“flase” 二、变量类型和类型定义关键词 自定义变量的基本类型有: 1、整形(int):就是整数,包括负整数; 2、双精度浮点数(double):可以简单地理解为带小数位的数; 3

4、、字符串型(string); 4、布尔型(bool):其值分别为“true、false”,即“真、假”,也可以写成“1、0”(1真,0假)。 类型定义词仅在创建和声明变量时时候使用,后面使用再变量时,如进行运算时,就不能再加这些类型定义词了。 三、附加变量(参数) 附加变量就是在程序完善后投入使用时,变量值允许用户自由更改的变量,一般用作程序参数。 一般指标,例如MACD(12,26,9)参数输入就是通过附加变量实现的,(12,26,9)分别为三个附加变量值。 定义附加变量只需在变量定义语句前加“extern” 例: extern int 时间框架=9; 创建一个整型附加变量,变量名为“时间框

5、架”,默认值为9,允许用户在程序外部修改参数值,或进行参数优化。MT4编程初级手册(4):自定义函数大家可以将自定义函数与数学函数在本质上看作是是一致的,在程序中需要用到的地方直接以函数名来调用。 例如:数学函数fuc(x,y)=5x+6y (x,y为正整数) 写成程序语句就是: double fuc(double x,double y) double temp; temp=5*x+6*y; return(temp); 一、同自定义变量一样,自定义函数在付诸使用前,也必须先声明设立,应定义其返回值类型、名称、参数和函数体(运算处理语句)。 函数返回值类型、名称、参数位于的函数头部(参数间以逗号

6、分隔), 大括号中的是运算语句或者处理语句,也就是函数体部分。 return语句为函数结束语句,return后面的括号中的值为函数返回值,即函数运算处理结果。 在上面例子中,double为函数类型,表示该函数的返回值(运算结果)是小数; x,y为参数,由于自定义变量使用之前都必须先声明,否则函数不知道参数的类型,所以要加上类型定义关键词double; fa为函数名,有了函数名,我们就可以在需要使用的地方用fa(2,1)的格式来调用此函数; 函数体部分有三个语句: 第一句,定义一个整形变量temp(函数内部使用的变量); 第二句,用我们设定的规则计算temp的值; 第三句,函数结束,返回调用点,

7、以temp的值作为本函数返回值。 此函数也可以简写为:double fa(double x,double y) return(5*x+6*y); 二、函数的类型与类型符 函数的类型就是函数返回值(运算结果)的类型,与自定义变量类型一致。 包括整型(int)、双精度浮点型(double)、字符串型(string)、布尔型(bool)等, 还有一种函数是以函数运行或进行一定的处理为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以在声明中写成void(无值型) 三、函数中如果需要定义自定义变量,那么此变量作用域仅在本函数内部,函数运行结束时,这个自定义变量也就自动注销了。 上例中,有x、y

8、、temp三个自定义变量,在函数运行时被声明创建,在函数运行结束的时侯自动消失,仅在函数内部有效,与函数外部无关,外部不可使用这些变量,需要注意的是外部可以使用与内部同名的变量但不影响内部的变量,不过为了程序的清晰性,不建议大家这么做。 四、函数的调用 函数调用非常便捷,只要函数名正确,参数个数一致,类型相同就能够正确的调用。 如我们前面创建了一个fa(x,y)函数,在程序的别处我们可以用ft(4,5)等样式来调用fa(x,y)函数运算求值。 调用时,传递参数值给fa(x,y)函数(按次序把4传给x,把5传给y),返回结果22后继续向下执行主程序。MT4编程初级手册(5):自定义数组一、数组是

9、一组同类型变量的集合,可以以一个名称同时存储多个数值,由索引来调用,在实现我们EA的算法时是一个非常重要的工具。 例:int arrai5=5,4,3,2,1; 这是一个数组名为arrai、包含了5个元素的整数型数组(即数组长度length为5),可以同时存储5个数据。 二、自定义数组也必须遵循“先声明,后使用”原则 声明(创建)时,必须设置类型与名称; 声明(创建)时,数组的数据元素个数可以设定也可以不设定; 数组中第一个元素的索引编号为0,第二个为1,以此类推。编号使用方括号跟在数组的后面; 在这上例中arrai0的值为5、aa1的值为4、aa2的值为3、aa3的值为2、aa4的值为1.

10、声明(创建)数组的同时,可以赋初始值,也可以不赋初始值。 例: int aa; 创建数组aa,不指定数据元素的个数; int bb10; 创建数组bb,设定数据元素为10个,不赋给这些数据元素初始值; int cc3=3,4,5; 创建数组cc,设定数组元素为2个,并赋给初始值; 赋值后,cc0的值为3、cc1的值为4、cc2的值为5; int dd7=5,6,7; 创建数组dd,设定数组元素为7个,但只给前3个元素赋初始值。 三、数组使用时的赋值 数组的赋值必须指定明确的将要赋值对象的索引,除新建数组时可以批量赋值以外,数组元素必须一个一个地赋值。 例如:cc1=5; 这个是对数组cc的第2

11、个元素cc1(0是第1个,1表示第2个)重新赋值为5。 在这里,不需要整数型变量定义符int, 这样,数组cc原有三个值3,4,5就变为3,5,5 四、数组的引用 数组是一系列相同类型的变量的集合,所以每次只能使用数组中的一个元素。 数组的引用必须指定明确的引用对象索引值,一次只能引用一个。如果需要使用整列数组,则必须逐个使用。在程序中经常使用循环与数组相互配合来完成相应的功能。 例如:数组arrai5的值为5,4,3,2,1 我们用数组名称arrai加索引值来引用数组arrai中的值: 当i=0时,aai的值为5; 当i=1时,aai的值为4; 当i=2时,aai的值为3; 当i=3时,aa

12、i的值为2;当i=4时,aai的值为1;MT4编程初级手册(6):市场数据取值一、预定义数组(MT4已经预先定义好了的,可直接调用) 开盘价、最高价、最低价、收盘价、成交量等市场历史数据,每根K线实体都各自有一个,所以必须使用数组来调用,MT4有几个预定义数组,预定义的意思就是这些数据都是被准备好了的,EA的开发者可以直接使用: 预定义数组:开盘价Open、最高价High、最低价Low、收盘价close、成交量Volume、K线所属时间Time 类型为双精度浮点double型(即精确小数) 这里有一个引用顺序或位置的问题,从右边起第一根K线实体(即最新的K线)的索引为0,第二根K线索引1,第三

13、根K线索引3,以此类推,也就是说从右向左倒着数过去,最近的数值小,而越远的数值越大。 Open0、High0、Low0、Close0,表示最新的开盘价、最高价、最低价、收盘价; Open1、High1、Low1、close1,表示第2根K线蜡烛的开盘价、最高价、最低价、收盘价(也就是昨天); Open2、High2、Low2、close2,表示第3根K线蜡烛的开盘价、最高价、最低价、收盘价; Open3、High3、Low3、close3,表示第4根K线蜡烛的开盘价、最高价、最低价、收盘价; Open、High、Low、close,表示第i+1根K线蜡烛的开盘价、最高价、最低价、收盘价 以此类

14、推 说明:这些是数组,用的是方括号来制定索引值。 二、预定义变量 买入价、卖出价是行情数据,MT4用预定义变量Ask和Bid表示,数值类型为double双精度浮点类型。 还有一些预定义变量,如: Bars 表示图表中的K线数,类型为int整数型; Digits 表示当前货币对的小数位数,类型为int整数型,无日元币对为4(位),有日元币对为2(位),黄金石油等一般也为2(位); Point 表示当前货币对的点值(相当于最小变动价位),类型为双精度浮点double型,无日元币对为0.0001,有日元币对为0.01。与Digits正好相反。 三、指标函数 1、价格、成交量、时间 它们都有三个参数:

15、货币对名(相当于品种名)、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,shif

16、t) 日期时间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(EURUSD,PERIOD_H1,0) 表示欧元兑美元1小时图最新K线实体的开盘价; iClose(USDJPY,PERIOD_H4,2) 表示美元兑日元4小时图第3根K线实体的收盘价; iClose(GBP

17、USD,PERIOD_H1,i) 表示英磅兑美元1小时图第i+1根K线实体的收盘价; iHigh(NULL,0,0) 既不指定商品,也不指定K线周期,用在谁就是谁,用在哪就是哪; MT4编程初级手册(7):条件判断语句一、if判断语句 if判断语句很常用,使用起来也比较简单。 规则:如果小括号中的条件成立则执行大括号中的语句;如果不成立则跳过大括号,执行后面的语句。 例如: if(condition=1) a=b+1; 我们在编写报警指标的时候,就经常要使用到这一语句: 如果“价格向上达到指定价位”,则“报警”; 如果“MACD指标上穿”,则“报警”; 如果“均线指标金叉”,则“报警”。等等

18、例: int flag=0; if( Low11.0000 & Low0=1.0000 & flag!=1) Alert(symbol(),价格向下触及1.0000!);- flag=1; if( High1=1.0000 & flag!=2) Alert(symbol(),价格向上触及1.0000); flag=2; 这是一个价格上、下穿1.0000时进行报警的判断语句: 上穿报警条件:当第二根K线最高价小于1.0000,并且最新K线最高价大等于1.0000; 下穿报警条件:当第二根K线最低价大于1.0000,并且最新K线最低价小等于1.0000。 这里,flag是用作报警标记,flag的初

19、始值是0; 当上穿报警后,flag的值就变为1;当下穿报警后,flag的值就改为2; 当flag=0时,说明从未报过警,上、下穿都能报警; 当flag=1时,说明已经上穿报过警了,不能再上穿报警,但仍可下穿报警; 当flag=2时,说明已经下穿报过警了,不能再下穿报警,但仍可上穿报警。 二、if . else语句 规则:如果小括号中的条件成立则执行if下大括号中的第一部分语句;如果不成立则执行else下大括号中的第二部分语句。 if(判断条件) 第一部分语句; else 第二部分语句; 三、注意事项 1、只有语句后面才用到语句结束符“;” 条件、大、小括号后面都不用语句结束符“;”。 2、语句

20、用大括号括起来(大括号的作用为界定语句块),但如果只有一行语句,则大括号可以省略: 例如: if(条件) 语句1;MT4编程初级手册(8):循环语句一幅K线图有几千上万条K线(Bar,根据设定的样本数),每根K线Bar又各有开收盘价、收盘价、最高低价等数值,而且还有很多移动平均线、MACD、RSI等技术指标数值。 面对大量的数据,我们经常采用循环来实现数据的取值和赋值。下面我们简单来介绍一下MT4中主要用到的循环语句。 一、while循环 while(判断条件) 语句1; 语句2; 。; 规则:当小括号中的判断条件成立时,就执行大括号中的语句,执行完毕后再判断条件是否成立,如果条件成立就再继续

21、执行大括号中的语句。 只要条件成立,程序就不停地执行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环,while循环又叫做“当循环”,意思为当XX条件时执行循环。 它与if语句的区别是:if语句是当条件为真时只运行一次;而while语句则是只要条件为真,循环体语句就不断地运行,直到条件为假时结束循环。所以为了避免造成死循环,循环体内应当对判断的条件进行修改,如进行数值的累加等。 例: extern int fast=12; extern int slow=26; double buffered ; int i=0; while(i1000) buffered= iMA(NULL,

22、0,fast,0,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0slow,0,MODE_EMA,PRICE_CLOSE,i); i+; 这里,循环执行条件是i1000,循环体中有两条语句,一句是把两条均线的差值赋给数组buffer,另一句“i+;”,我们知道“+”是自增运算符,那么每运行一次,i的值在原有基础上增加1。这样,随着循环的不断地运行,i的值逐渐增加,循环到1000次后,i的值也就从0变为了1000,此时“i1000”就不再成立,循环结束。这样,数组buffered 中也就存储了1000个值。 MT4编程初级手册(9):MT4自定义指标的结构MT4自定义指标一

23、般由四个部分所组成:一、文件头部,也称为预处理程序 预处理程序以“#”开头,行尾无语句结束符“;”. 常用的预处理程序有: 1、#property indicator_chart_window 把指标显示在主图。如:均线、SRA等类指标用到此语句. 2、#property indicator_separate_window 把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句. 3、#property indicator_buffers 3 显示3根指标线. 4、#property indicator_color1 Red 第1根指标线的颜色为Red. 5、#property ind

24、icator_width1 1 第1根指标线的粗细分别为1. 6、#property indicator_level1 0.00 在0.00值位置横划1条虚线. 二、参数、变量和数组的定义 全局性的参数、变量、数组在此定义,局部变量可在start()函数中定义. 三、初始化函数init() init()在自定义指标加载时运行一次。. 初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数. 四、主函数start() 当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。 自定义指标的编程主要依靠此函数进行。 start()函数的作用主要是取值和给指标线赋

25、值,报警也在此函数内发起。 另外,还有一个反初始化函数deinit() deinit()在自定义卸载时运行一次,可用以去除指标加载时init()所做的初始化操作。 MT4编程初级手册(10):一条指标线的实例我们现在以一个简单的实例来给大家讲述如何进行EA的开发。要画指标线,只要在程序中写明以下几点就可以了: 第一、定义指标线所在窗口,是主图还是副图。 第二、创建数组,用以保存指标线在各个位置上的值。 第三、要建立指标线与数组的对应关系(函数关系,运算关系),哪个数组中的数据对应哪条指标线。 第四、要定义指标线的线型,是曲线还是柱线或者是箭头。 第五、如果指标线是箭头,还要定义是哪种类型的箭头

26、。 第六、通过运算,给数组赋值。 其中: 第一、二条写在文件头部中; 第三、四、五条写在init()初始化函数中(init函数仅在指标加载时运行一次); 第六条写在start()函数中(start函数在数据发动变动时运行,变动一次刷新运行一次); 下面我们以MACD为例来说明,我们知道,MACD指标由二条曲线(快线和慢线)和一组红绿柱线组成。(下图一) 其中: 白线是二根均线的差; 紫线是白线的移动平均线; 红绿柱线则是白线和紫线的差,白线上穿紫线,出现红柱,下穿则出现绿柱。MT4编程初级手册(11):使用MT4的报警功能与指标画线相比,报警语句则显得相对简单,只要在判断语句中加一个报警的指令

27、语句即可。 报警方式有:弹出窗口报警、音乐报警、邮件报警等。 如果您的邮箱开通了手机短信通知,则邮件报警的内容则会即时转发到手机上面。 1、弹出窗口报警: 当(预设条件达到)执行此语句时,以弹出窗口进行警告。 语句格式:Alert(内容1,内容2,内容3,内容4); 报警内容为字符串型,内容之间加逗号进行分隔。 如: Alert( Symbol(),1小时图MACD上穿零轴!); 2、音乐报警: 当(预设条件达到)执行此语句时,则播放一段音乐。 语句格式:PlaySound(音乐文件名.wav); 文件类型为wav格式,并且需要保存在C:Program FilesMetaTrader4sounds目录中。 注意:文件名需要加引号。 3、邮件报警: 当(预设条件达到)执行此语句时,发送一封邮件。 收发件人地址在MT4系统中设置我们会在后续的文章里面谈到。 语句格式:SendMail(标题1+标题2, 内容1+内容2); 标题之间以加号进行连接,内容之间也以加号进行连接; 邮件标题和邮件内容以逗号间隔。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com