MT4精讲:MT4编程入门全集1-11

外汇软件下载

  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,存在类型挑选“因而 文献” 四、mt4 圭外挪用自界说目标 这至极简便

  一、注脚符:单行注脚“//”、众行注脚“” 圭外不推行注脚,注脚实质仅供阅读或保存无须的语句 正在 MQ 说话编辑器中,注脚实质以灰色显示 二、分号“;” 示意一个语句结果 三、逗号“,” 示意一个语句内部间隔,不结果语句。 四、等于号“=” 赋值语句,把等号后面的值赋给等号前的变量中 五、加号“+” 整数或小数,则示意值相加;字符串,则示意前后维系。 六、加加“++”

  示意把符号前的变量值加 1,比如:“i++;” 写,示意 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 线 假)。 类型界说词仅正在创修变量时利用,后面利用变量时,就不行再加类型界说词了 三、附加变量 附加变量便是正在圭外加入利用后,变量值承诺用户自正在更改的变量,日常用作程 序参数。 日常目标,比如 MACD(12,26,9)参数输入便是通过附加变量实行,(12,26,9)分 别为三个附加变量的默认值。 界说附加变量只需正在变量界说语句前加“extern” 例: extern int 周期=9; 创修一个整型附加变量,变量名为“周期”,默认值为 9,承诺用户正在圭外外部批改参数值

  自界说函数与数学函数正在素质上是划一的 比如:数学函数 ft(x,y)=3x+2y (x,y 为正整数) 写成圭外语句便是: int ft(int x,int y) { int temp; temp=3*x+2*y; return(temp); } 一、和自界说变量一律,自界说函数正在利用前,也必需先设立,以界说其类型、 名称、参数和运算语句。 函数类型、名称、参数位于函数头部(参数间以逗号隔离), 大括号中的是运算语句,也便是函数体局限。 return 语句为函数结果语句,return 后面括号中的值为函数返回值,即函数运 算结果。 上例中,int 为函数类型,示意该函数的返回值(运算结果)是整数; (x,y)为参数,因为自界说变量利用之前都必需先创修,因而要加上类型界说词 int ft 为函数名,有了函数名,咱们就能够正在别处用 ft(2,1)的式子来挪用此函数; 函数体局限有三句: 第一句,界说一个整形变量 temp 第二句,准备 temp 的值 第三句,函数结果,返回挪用点,以 temp 的值行为本函数返回值。 此函数也能够简写为:int ft(int x,int y) {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 后无间推行主圭外。

  一、数组是一系列同类型变量的群集,能够同时存储众个数值。 例: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 创修(界说)数组的同时,能够赋初值,也能够不赋初值。 例: int bb[]; 创修数组 bb,不设天命组元素个数 int cc[8]; 创修数组 cc,设天命组元素为 8 个,不赋初值 int dd[3]={9,8,7}; 创修数组 dd,设天命组元素为 4 个,并赋初值 赋值后,dd[0]的值为 9、dd[1]的值为 8、dd[2]的值为 7 int ee[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 仍旧界说好的,能够直接利用) 开盘价、最高价、最低价、收盘价、成交量等汗青数据,每根 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 线烛炬的开盘价、最高价、最低价、 收盘价 以此类推。。。。。。

  示意美元兑日元 1 小时图最新 K 线烛炬的开盘 示意欧元兑美元 4 小时图第 3 根 K 线烛炬的收 示意英磅兑美元 1 小时图第 i+1 根 K 线烛炬的 既不指定商品,也不指定 K 线、搬动均匀值。双精度 double 型 iMA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift) 参数共 7 个,不同为:商品名称、K 线周期、均线周期、均线偏移、均匀形式、 价值品种、位子 均线 天均匀线 天均线 均线偏移:均线位子满堂掌握搬动的位子偏移量 均匀形式:简便搬动均匀(MODE_SMA)、指数搬动均匀(MODE_EMA)、腻滑搬动均匀

  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) { b=c+1; } 咱们正在编写报警目标的工夫,就常常用到这一语句: 倘若“价值向上到达指订价位”,则“报警” 倘若“MACD 上穿”,则“报警” 倘若“均线金叉”,则“报警”。等等

  这里,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;

  一幅 K 线图有几千上万条 K 线,每根 K 线又各有开收盘价、最坎坷价等数值,而 且另有良众搬动均匀线、MACD、RSI 等目标值。 面临海量数据,咱们必需用轮回来实行数据的取值和赋值。 一、while 轮回 while(要求) { 语句 1 语句 2 。。。 } 条例:当小括号中的要求树立时,就推行大括号中的语句,推行完了再判决要求 是否树立,倘若要求树立就无间推行大括号中的语句。 只消要求树立, 圭外就连续地运转大括号中的语句(轮回体),直到小括号中的条 件不再树立时结果轮回。 它与 if 语句的区别是:if 语句是当要求为真时运转一次;而 while 语句则是只 要要求为真,轮回体语句就连续地运转,直到要求为假时结果轮回。

  第二步、再判决小括号中的第 2 句是否树立:i1000; 倘若不树立,则轮回结果;倘若树立,则轮回无间运转,推行第三步 第三步、按挨次推行大括号中的语句 第四步、推行小括号中的第 1 句:i++ (此语句即:每推行一次,i 的值补充 1) 然后回到第二步无间推行轮回。

  MT4 自界说目标日常由四个局限组成: (1)文献头部 (2)参数、变量和数组的界说 (3)初始化函数 init() (4)主函数 start()

  二、参数、变量和数组的界说 整体性的参数、变量、数组正在此界说,限制变量可正在 start()函数中界说

  三、初始化函数 init() init()正在自界说目标加载时运转一次。 初始化函数的效用是“创立”。倘若自界说目标须要划线,则必定用到此函数

  四、主函数 start() 当数据有改观时,start()就被触发。数据改观一次,start()就运转一次。 自界说目标的编程紧要寄托此函数实行。 start()函数的感化紧要是取值和给目标线赋值,报警也正在此函数内首倡。

  别的,另有一个反初始化函数 deinit() deinit()正在自界说卸载时运转一次,可用以去除目标加载时 init()所做的初始 化操作。

  要画目标线,只消正在圭外中写明以下几点就能够了: 第一、显着目标线所正在窗口,是主图照样副图

  第二、要作战数组,用以存在目标线正在各个位子的值。 第三、要作战目标线与数组的对应闭联,哪个数组对应哪条款标线 第四、要显着目标线的线型,是弧线照样柱线或者是箭头 第五、倘若目标线是箭头,还要外明是哪种箭头 第六、给数组赋值 个中: 第一、二条写正在文献头部中, 第三、四、五条写正在 init()函数中(init 函数仅正在目标加载时运转一次) 第六条写正在 start()函数中(start 函数正在数据发起改观时运转,改观一次运转 一次) 下面以 MACD 为例外明 咱们晓畅,MACD 目标由二条弧线和一组红绿柱线构成。(下图一) 个中: 白线是二根均线的差; 紫线是白线的搬动均匀线; 红绿柱线则是白线和紫线的差,白线上穿紫线,显现红柱,下穿则显现绿柱。

  咱们从简便入手,先去除紫线和红绿柱线,仅保存个中的那根白线,来看白线是 奈何画出来的。 下面是一切语句: #property indicator_separate_window

  extern int SMA=26; 设立二个整数型变量,默认值为 12 和 26,承诺外部批改值 double buf[]; 设立一个数组 int init() 初始化函数。该函数正在目标加载时只运转一次。init 是体例默认的函数名,但 利用时仍须要实行创设,因而要加界说符 int { SetIndexBuffer(0,buf); 创立数组 buf 为第一条款标线 SetIndexStyle(0,DRAW_LINE); 创立第一条款标线线型为相连弧线); 函数结果语句 } int start() 目标触发函数。与 init 函数分别,该函数正在罕睹据改变时被触发,倘若数据被 一向更新,则该函数将一向推行。start 也是体例默认的函数名,但利用时也仍 然须要实行创设,因而也要加界说符 int { int limit=Bars-IndicatorCounted(); 自界说一个变量 limit,并赋值 Bars 是图外中的柱数 IndicatorCounted()缓存中的柱数,便是仍旧准备过的有值的柱数 如许 limit 的值便是未经准备的柱数,如许就能够起到优化圭外的感化。 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); 报警实质为字符串型,实质之间加逗号 比如:

  2、音乐报警: 当(要求到达)推行此语句时,播放一段音乐。 花式:PlaySound(音乐文献名.wav); 文献类型为 wav 花式,而且存在正在 C:\Program Files\MetaTrader4\sounds 目次 中 文献名加引号 3、邮件报警: 当(要求到达)推行此语句时,发送一个邮件。 (收发件人地方正在 MT4 体例中创立详睹《MT4 编程实例 1:一个简便的小圭外, 让你的手机摇身酿成外汇行情收受机》) 花式:SendMail(题目 1+题目 2, 实质 1+实质 2); 题目之间以加号维系,实质之间也以加号维系 邮件题目和邮件实质以逗号间隔

  #property indicator_chart_window 此句是把圭外放正在主图,当然这此例中放正在副图也一律 extern int 界说一个外部参数变量,整数型,承诺外部值批改 int 界说一个整数型变量 int start() 界说触发函数 if() 判决 iHigh() 最高价格函数 iLow() 最低价格函数 iMA() 搬动均匀线值函数 Alert() 报警函数 Symbol() 商品名称函数 && 逻辑运算符“而且” != 逻辑运算符“不等于” MODE_SMA 简便搬动均匀形式 PRICE_CLOSE 以收盘价准备 再说一下自界说变量 mark 的感化: mark 的初值是 0,当上穿报警时给 mark 赋值 1,当下穿报警时给 mark 赋值 2。 如许当 mark 的值为 1 时,外明仍旧对上穿报过警了,就不行再次对上穿报警; 当 mark 的值为 2 时,外明仍旧对下穿报过警了,就不行再次对下穿报警。 如许就起到领会除反复报警的感化。

相关文章
评论留言