MT4精讲:MT4编程入门全集1-11该目次中厉重有二品种型的文献, 一种是 mq4 文献,这是 MT4 自界说目标的源码文献,是一种高级道话文献,可 以人工编写改正,机械不行直接履行,但能正在 MT4 启动时自愿编译为 ex4 可执 行文献。 另一种即是 ex4 文献,这是 MT4 自界说目标的可履行文献,由 mq4 文献编译得 到。 mq4 文献必需编译为 ex4 文献才智被 MT4 履行。 但 ex4 文献是机械码文献,人工不成改正 其余另有一个文献是 mqlcache.dat,它用来存储目次中的文献讯息,假若 MT4 无法自愿编译,只须删除此文献即可管理题目 mq4 文献编译为 ex4 可履行文献有两种本领: 1、MT4 启动时,会自愿把此目次中的 mq4 文献编译为 ex4 文献。 2、用 MQ 道话编辑器翻开 mq4 文献,点一下“编写”按钮,即可天生 ex4 文献
二、下载存储 mq4 文献、ex4 文献 正在论坛上咱们往往看到有 mq4 文献、ex4 文献可供下载,咱们只须把它们存储 到 C:\Program Files\MetaTrader 4\experts\indicators 这个目次,也即是 下面这个目次中,就能够了。假若下载的是 ex4 文献,那能够直接挪用;假若 是 mq4 文献,则必要重启动 MT4,让编制自愿编译天生 ex4 可履行文献。假若 下载的是 rar、zip 等类型的压缩文献,还必需下载后解压到此目次才智应用。
三、将源码存储为源码文献 正在论坛上,咱们也往往能看到目标源码贴正在网页上,但没有 mq4、ex4 等文献 能够下载,只可复制源码。此时必要咱们己方入手将源码存储为源码文献,那 也不要紧,十分地轻易,众点几下鼠标就搞定。 1、翻开 MQ 道话编辑器
2、正在 MQ 道话编辑器中新修一个文献,文献名肯定要输,其余敷衍操作都没闭
4、接着咱们就能够将网页上源码复制粘贴进来 试着点一下“编写”,假若左下角显露“0 缺点,0 警觉”,那注明源码没问 题,编译通过了,得胜天生了 ex4 可履行文献
能够翻开一个原已存正在的 mq4 文献,然后另存为你必要的文献名,再删除文献 中的扫数实质成为空文献,把网页上的源贴到文献中存储即可
也能够正在记事本中新修一个文献,把网页上的源码贴进记事本,然后取个文献 名存储到上面提到的目次,不外文献后缀必需输入 mq4,存储类型采选“因此 文献”
一、解释符:单行解释“//”、众行解释“” 顺序不履行解释,解释实质仅供阅读或保存不必的语句 正在 MQ 道话编辑器中,解释实质以灰色显示
五、加号“” 整数或小数,则示意值相加;字符串,则示意前后结合。
示意把符号前的变量值加 1,比如:“i;” 简写,示意 i 的值加 1
七、加等于“=” 示意把符号后的值加到符号前的变量中。比如“i=2;”,本质上即是“i=i2;” 的简写,示意 i 的值加 2
八、双等号“==” 等于号。用于逻辑判决,双等号前后值相称,则返回逻辑值“真 true”;双等 号前后值不相称,则返回逻辑值“假 false”
九、叹号等号“!=” 不等于号。用于逻辑判决,不等号前后值不相称,则返回逻辑值“真 true”; 不等号前后值相称,则返回逻辑值“假 false”
bool 是否报警=true; 创修一个逻辑型变量,变量名为“是否报警”,同时,
二、类型和类型界说词 自界说变量的根本类型有: 1、整形(int):即是整数,蕴涵负整数 2、双精度小数(double):能够轻易地判辨为带小数位的数 3、字符串型(string)。 4、逻辑型(bool):其值诀别为“true、false”,即“线 线 假)。 类型界说词仅正在创修变量时应用,后面应用变量时,就不行再加类型界说词了
三、附加变量 附加变量即是正在顺序参加应用后,变量值首肯用户自正在更改的变量,通常用作程 序参数。 通常目标,比如 MACD(12,26,9)参数输入即是通过附加变量完成,(12,26,9)分 别为三个附加变量的默认值。 界说附加变量只需正在变量界说语句前加“extern” 例: extern int 周期=9; 创修一个整型附加变量,变量名为“周期”,默认值 为 9,首肯用户正在顺序外部改正参数值
一、和自界说变量相似,自界说函数正在应用前,也必需先设立,以界说其类型、 名称、参数和运算语句。 函数类型、名称、参数位于函数头部(参数间以逗号隔离), 大括号中的是运算语句,也即是函数体一面。 return 语句为函数已矣语句,return 后面括号中的值为函数返回值,即函数运 算结果。
上例中,int 为函数类型,示意该函数的返回值(运算结果)是整数; (x,y)为参数,因为自界说变量应用之前都必需先创修,因此要加上类型界说词 int ft 为函数名,有了函数名,咱们就能够正在别处用 ft(2,1)的事势来挪用此函数; 函数体一面有三句: 第一句,界说一个整形变量 temp 第二句,策动 temp 的值 第三句,函数已矣,返回挪用点,以 temp 的值举动本函数返回值。 此函数也能够简写为:int ft(int x,int y) {return(3*x2*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 后不断履行主顺序。
一、数组是一系列同类型变量的调集,能够同时存储众个数值。 例:int aa[4]={4,3,2,1}; 这是一个数据名为 aa、包括了 4 个元素的整数型数组(即数组长度为 4),能够同 时存储 4 个数值。
二、自界说数组也必需“先创修,后应用” 创修(界说)时,必需设定类型和名称。 创修(界说)时,数组的元素个数也能够设定,也能够不设定 数组中第一个元素的编号为 0,第二个为 1,以此类推。编号应用方括号括起来 正在这上例中 aa[0]的值为 4、aa[1]的值为 3、aa[2]的值为 2、aa[3]的值为 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 仍旧界说好的,能够直策应用) 开盘价、最高价、最低价、收盘价、成交量等史书数据,每根 K 线烛炬都各有一 个,因此必需用数组来管理题目,MT4 有几个预订义数组: 开盘价 Open[]、最高价 High[]、最低价 Low[]、收盘价 close[]、成交量 Volume[]、 所属岁月 Time[] 类型为双精度 double 型(即正确小数)
这里有一个职位的题目,右边第一根 K 线烛炬(即最新的烛炬)的编号为 0,第二 根烛炬编号 1,第三根烛炬编号 2,也即是说从右向左倒着数过去。
二、预订义变量 买入价、卖出价是及时代价,MT4 用预订义变量 Ask 和 Bid 示意,数值类型为 double 双精度 另有极少预订义变量,如: Bars 示意图外中的烛炬数,类型为 int 整数型 Digits 示意眼前钱币对的小数位,类型为 int 整数型,无日元币对为 4,有日 元币对为 2,黄金石油等通常也为 2 Point 示意眼前钱币对的点值,类型为双精度 double 型,无日元币对为 0.0001, 有日元币对为 0.01。与 Digits 正好相反。
示意美元兑日元 1 小时图最新 K 线烛炬的开 示意欧元兑美元 4 小时图第 3 根 K 线烛炬的 示意英磅兑美元 1 小时图第 i1 根 K 线烛炬
其他如 MACD 目标、威廉目标、RSI、SAR、布林线等目标取值都与搬动均匀线、正在数组中求元素的搬动均匀值。双精度 double 型 iMAOnArray(数组名, 总数, 均匀周期, 均线偏移, 均匀形式, 职位) 这也与 iMA 函数差不众,不外数据源变为数组
4、求自界说目标的值 咱们往往己方编极少自界说目标,可用 iCustom 函数来获得自界说函数的值 iCustom(商品名,K 线周期,自界说目标名称,自界说目标参数 1,参数 2,参数 3,,, 自界说目标线编号,职位) 假若自界说目标只要一根目标线,则自界说目标线。 假若自界说目标有众根目标线,则第一条自界说目标线。。。 比如:iCustom(NULL,0,mymacd,12,26,9,2,0) (12,26,9)为自界说目标 mymacd 的三个参数 示意:求眼前图外中,自界说目标 mymacd(12,26,9)的第 3 条款标线正在最新职位 的值
扔砖引玉,这里只是有代外性地列了几个函数,详明请查阅《MT4 编程手册》
法例:假若小括号中的条款树立,则履行大括号中的语句;假若不树立,则跳过 大括号。 比如: if(a==1)
} 咱们正在编写报警目标的时辰,就往往用到这一语句: 假若“代价向上抵达指订价位”,则“报警” 假若“MACD 上穿”,则“报警” 假若“均线金叉”,则“报警”。等等
这是一个代价上、下穿 1.0000 时报警的判决语句: 上穿报警条款:当第二根 K 线,而且最新 K 线 下穿报警条款:当第二根 K 线,而且最新 K 线
这里,mark 是用作报警符号,mark 的初值是 0, 当上穿报警后,mark 的值就改为 1;当下穿报警后,mark 的值就改为 2;
当 mark=0 时,注明从未报过警,上、下穿都能报警; 当 mark=1 时,注明仍旧上穿报过警了,不行再上穿报警了,但仍可下穿报警; 当 mark=2 时,注明仍旧下穿报过警了,不行再下穿报警了,但仍可上穿报警。
法例:假若小括号中的条款树立,则履行 if 下大括号中的语句 1;假若不树立, 则履行 else 下大括号中的语句 2。 if(条款)
三、注视事项 1、只要语句后面才用到语句已矣符“;” 条款、大、小括号后面都不必“;” 2、语句用大括号括起来,但假若只要一行语句,则大括号能够省略
一幅 K 线图有几千上万条 K 线,每根 K 线又各有开收盘价、最上下价等数值,而 且另有良众搬动均匀线、MACD、RSI 等目标值。 面临海量数据,咱们必需用轮回来完成数据的取值和赋值。
{ 语句 1 语句 2 。。。 } 法例:当小括号中的条款树立时,就履行大括号中的语句,履行完了再判决条款 是否树立,假若条款树立就不断履行大括号中的语句。
只须条款树立,顺序就不息地运转大括号中的语句(轮回体),直到小括号中的条 件不再树立时已矣轮回。
它与 if 语句的区别是:if 语句是当条款为真时运转一次;而 while 语句则是只 要条款为真,轮回体语句就不息地运转,直到条款为假时已矣轮回。
这里,轮回履行条款是 i1000,轮回体中有两个语句,一句是把两条均线的差 值赋给数组 buffer,另一句“i;”是每运转一次,i 的值正在原有本原上添加 1。 如此,跟着轮回的不停运转,i 的值逐步添加,轮回 1000 次后,i 的值也就从 0 变为 1000,此时“i1000”就不再树立,轮回已矣。如此,数组 buffer[]中也 就有了 1000 个值。
二、for 轮回 for 轮回与 while 轮回正在道理上是一概的,只是书写式样上有所区别
第一步、先履行小括号中的第 1 句:int i=0; (此语句用来界说初始变量,正在轮回中仅履行一次,可认为没有任何外达式的空
操作符“;”) 第二步、再判决小括号中的第 2 句是否树立:i1000; 假若不树立,则轮回已矣;假若树立,则轮回不断运转,履行第三步 第三步、按依序履行大括号中的语句 第四步、履行小括号中的第 1 句:i (此语句即:每履行一次,i 的值添加 1) 然后回到第二步不断履行轮回。
MT4 自界说目标通常由四个一面组成: (1)文献头部 (2)参数、变量和数组的界说 (3)初始化函数 init() (4)主函数 start()
一、文献头部,也称为预处置顺序 预处置顺序以“#”起首,行尾无语句已矣符“;” 常用的预处置顺序有: 1、#property indicator_chart_window 把目标显示正在主图。如:均线、SRA 等类目标用到此语句
二、参数、变量和数组的界说 全部性的参数、变量、数组正在此界说,个别变量可正在 start()函数中界说
当数据有更正时,start()就被触发。数据更正一次,start()就运转一次。 自界说目标的编程厉重依托此函数举办。
start()函数的效力厉重是取值和给目标线赋值,报警也正在此函数内倡始。
其余,另有一个反初始化函数 deinit() deinit()正在自界说卸载时运转一次,可用以去除目标加载时 init()所做的初始 化操作。
要画目标线,只须正在顺序中写明以下几点就能够了: 第一、明晰目标线所正在窗口,是主图依旧副图
第二、要创修数组,用以存储目标线正在各个职位的值。 第三、要创修目标线与数组的对应相闭,哪个数组对应哪条款标线 第四、要明晰目标线的线型,是弧线依旧柱线或者是箭头 第五、假若目标线是箭头,还要注明是哪种箭头 第六、给数组赋值 个中: 第一、二条写正在文献头部中, 第三、四、五条写正在 init()函数中(init 函数仅正在目标加载时运转一次) 第六条写正在 start()函数中(start 函数正在数据策划更正时运转,更正一次运转 一次) 下面以 MACD 为例注明 咱们大白,MACD 目标由二条弧线和一组红绿柱线构成。(下图一) 个中: 白线是二根均线的差; 紫线是白线的搬动均匀线; 红绿柱线则是白线和紫线的差,白线上穿紫线,显露红柱,下穿则显露绿柱。
咱们从轻易入手,先去除紫线和红绿柱线,仅保存个中的那根白线,来看白线是 若何画出来的。 下面是扫数语句: #property indicator_separate_window
int init() 初始化函数。该函数正在目标加载时只运转一次。init 是编制默认的函数名,但 应用时仍必要举办创设,因此要加界说符 int
int start() 目标触发函数。与 init 函数差别,该函数正在少有据蜕变时被触发,假若数据被 不停更新,则该函数将不停履行。start 也是编制默认的函数名,但应用时也仍 然必要举办创设,因此也要加界说符 int
for(int i=0; ilimit; i) 轮回语句。 轮回从 i=0 发端,每轮回一次 i 值添加 1,平素轮回到 ilimit 不知足时 已矣轮回 因为轮回变量 i 为一个新变量,因此要先界说,加上整型变量界说符 int 下面大括中为轮回体,此例中只一条语句 { buf=
i 是水准职位序号值,即烛柱从右到左的序号,右边第一个烛柱序号为 0 return(0); start 函数已矣 }
与目标画线比拟,报警句句显得十分轻易, 只须正在判决语句中加一个报警句句即可 报警式样有:弹出窗口报警、音乐报警、邮件报警等。 假若邮箱开通了手机短信报告,则邮件报警的实质会即时转发得手机上。 1、弹出窗口报警: 当(条款抵达)履行此语句时,以弹出窗口警觉。 式样:Alert(实质 1,实质 2,实质 3,实质 4); 报警实质为字符串型,实质之间加逗号 比如:
3、邮件报警: 当(条款抵达)履行此语句时,发送一个邮件。 (收发件人所在正在 MT4 编制中设备详睹《MT4 编程实例 1:一个轻易的小顺序, 让你的手机摇身形成外汇行情接纳机》) 式样:SendMail(题目 1题目 2, 实质 1实质 2); 题目之间以加号结合,实质之间也以加号结合 邮件题目和邮件实质以逗号间隔
mark 的初值是 0,当上穿报警时给 mark 赋值 1,当下穿报警时给 mark 赋值 2。
如此当 mark 的值为 1 时,注明仍旧对上穿报过警了,就不行再次对上穿报警;
当 mark 的值为 2 时,注明仍旧对下穿报过警了,就不行再次对下穿报警。
转载请注明出处:MT4平台下载
本文标题网址:MT4精讲:MT4编程入门全集1-11