MT4编程入门教程

外汇软件下载

  MT4编程入门教程该目次中重要有二品种型的文献,一种是 mq4 文献,这是 MT4 自界说目标的源码文献,是 一种高级讲话文献,可能人工编写改正,呆板不行直接践诺,但能正在 MT4 启动时自愿编译为 ex4 可践诺文献。

  另一种即是 ex4 文献,这是 MT4 自界说目标的可践诺文献,由 mq4 文献编译获得。

  mq4 文献务必编译为 ex4 文献才 能被 MT4 践诺。但 ex4 文献是呆板 码文献,人工不成改正

  别的又有一个文献是 mqlcache.dat,它用来生存目次中的 文献音讯,即使 MT4 无法自愿编译, 只须删除此文献即可处理题目。

  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=i+1;”的简写,外现 i

  外现把符号后的值加到符号前的变量中。比方“i+=2;”,现实上即是“i=i+2;”的简写, 外现 i 的值加 2 八、双等号“==”

  等于号。用于逻辑占定,双等号前后值相当,则返回逻辑值“真 true”;双等号前后值不 相当,则返回逻辑值“假 false” 九、叹号等号“!=”

  不等于号。用于逻辑占定,不等号前后值不相当,则返回逻辑值“真 true”;不等号前后 值相当,则返回逻辑值“假 false” 十、“&&”

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

  4、逻辑型(bool):其值区分为“true、false”,即“线 线 假)。

  附加变量即是正在圭外加入操纵后,变量值容许用户自正在更改的变量,大凡用作圭外参数。 大凡目标,比方 MACD(12,26,9)参数输入即是通过附加变量杀青,(12,26,9)区分为三个附 加变量的默认值。 界说附加变量只需正在变量界说语句前加“extern” 例: extern int 周期=9; 创修一个整型附加变量,变量名为“周期”,默认值为 9,容许用户 正在圭外外部改正参数值

  { 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、High、Low、close,外现第 i+1 根 K 线烛炬的开盘价、最高价、最低价、收盘价

  买入价、卖出价是及时代价,MT4 用预订义变量 Ask 和 Bid 外现,数值类型为 double

  Digits 外现而今泉币对的小数位,类型为 int 整数型,无日元币对为 4,有日元币对为 2,

  Point 外现而今泉币对的点值,类型为双精度 double 型,无日元币对为 0.0001,有日元

  类、职位 均线 天均匀线 天均线 均线偏移:均线职位合座支配搬动的职位偏移量 均匀形式:纯洁搬动均匀(MODE_SMA)、指数搬动均匀(MODE_EMA)、滑润搬动均匀线

  置的值 例 2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2) 外现:正在而今商品、而今 K 线周期图外上,以收盘价盘算的,20(天)指数搬动均匀线 根 K 线所对应职位的值 其他如 MACD 目标、威廉目标、RSI、SAR、布林线等目标取值都与搬动均匀线、正在数组中求元素的搬动均匀值。双精度 double 型 iMAOnArray(数组名, 总数, 均匀周期, 均线偏移, 均匀形式, 职位) 这也与 iMA 函数差不众,只是数据源变为数组 从数组中不光可能求得搬动均匀值,还可能求得 RSI 等目标值 4、求自界说目标的值 咱们常常我方编少许自界说目标,可用 iCustom 函数来得到自界说函数的值 iCustom(商品名,K 线周期,自界说目标名称,自界说目标参数 1,参数 2,参数 3,,,自界说目标

  外现:求而今图外中,自界说目标 mymacd(12,26,9)的第 3 条款标线正在最新职位的值 掷砖引玉,这里只是有代外性地列了几个函数,详明请查阅《MT4 编程手册》

  一、if 语句 if 语句很常用,也斗劲纯洁。 规定:即使小括号中的要求树立,则践诺大括号中的语句;即使不树立,则跳过大括号。 比方: if(a==1)

  这里,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、语句用大括号括起来,但即使只要一行语句,则大括号可能省略

  一幅 K 线图有几千上万条 K 线,每根 K 线又各有开收盘价、最凹凸价等数值,并且还 有许众搬动均匀线、MACD、RSI 等目标值。

  面临海量数据,咱们务必用轮回来杀青数据的取值和赋值。 一、while 轮回 while(要求)

  } 规定:当小括号中的要求树立时,就践诺大括号中的语句,践诺完了再占定要求是否成 立,即使要求树立就不绝践诺大括号中的语句。 只须要求树立,圭外就不休地运转大括号中的语句(轮回体),直到小括号中的要求不再 树立时了结轮回。 它与 if 语句的区别是:if 语句是当要求为真时运转一次;而 while 语句则是只须要求为 真,轮回体语句就不休地运转,直到要求为假时了结轮回。 例:

  } 与前面比拟,咱们注意到: “int i=0;”语句从“while(i1000)”上方移到轮回要求“i1000”的前面; “i++;”语句从轮回体中移到了轮回要求“i1000”的后面; 轮回践诺按序与 while 轮回一概: 第一步、先践诺小括号中的第 1 句:int i=0; (此语句用来界说初始变量,正在轮回中仅践诺一次,可认为没有任何外达式的空操作符 “;”) 第二步、再占定小括号中的第 2 句是否树立:i1000; 即使不树立,则轮回了结;即使树立,则轮回不绝运转,践诺第三步 第三步、按按序践诺大括号中的语句 第四步、践诺小括号中的第 1 句:i++ (此语句即:每践诺一次,i 的值扩张 1) 然后回到第二步不绝践诺轮回。 再增加一点:即使轮回体中(大括号中)只要一行语句,大括号可能省略

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

  一、文献头部,也称为预治理圭外 预治理圭外以“#”起源,行尾无语句了结符“;” 常用的预治理圭外有: 1、#property indicator_chart_window 把目标显示正在主图。如:均线、SRA 等类目标用到此语句 2、#property indicator_separate_window 把目标显示正在副图。如:MACD、RSI、威廉等类目标用到此语句

  3、#property indicator_buffers 3 显示 3 根目标线、#property indicator_color1 Red 第 1 根目标线、#property indicator_width1 1 第 1 根目标线、#property indicator_level1 0.00 正在 0.00 值职位横划 1 条虚线 二、参数、变量和数组的界说 全部性的参数、变量、数组正在此界说,个别变量可正在 start()函数中界说 三、初始化函数 init() init()正在自界说目标加载时运转一次。 初始化函数的功效是“修树”。即使自界说目标需求划线,则必定用到此函数 四、主函数 start() 当数据有转变时,start()就被触发。数据转变一次,start()就运转一次。 自界说目标的编程重要寄托此函数举办。 start()函数的效率重要是取值和给目标线赋值,报警也正在此函数内发动。 别的,又有一个反初始化函数 deinit() deinit()正在自界说卸载时运转一次,可用以去除目标加载时 init()所做的初始化操作。

  要画目标线,只须正在圭外中写明以下几点就可能了: 第一、了了目标线所正在窗口,是主图仍是副图 第二、要开发数组,用以生存目标线正在各个职位的值。 第三、要开发目标线与数组的对应闭连,哪个数组对应哪条款标线 第四、要了了目标线的线型,是弧线仍是柱线或者是箭头 第五、即使目标线是箭头,还要阐述是哪种箭头 第六、给数组赋值 此中: 第一、二条写正在文献头部中, 第三、四、五条写正在 init()函数中(init 函数仅正在目标加载时运转一次)

  第六条写正在 start()函数中(start 函数正在数据动员转变时运转,转变一次运转一次) 下面以 MACD 为例阐述 咱们晓得,MACD 目标由二条弧线和一组红绿柱线构成。(下图一) 此中: 白线是二根均线的差; 紫线是白线的搬动均匀线; 红绿柱线则是白线和紫线的差,白线上穿紫线,显示红柱,下穿则显示绿柱。

  咱们从纯洁入手,先去除紫线和红绿柱线,仅保存此中的那根白线,来看白线是如何画 出来的。

  设立一个数组 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=

  给数组 buf 赋值,其值区分为相应职位上两条均线的差 i 是水准职位序号值,即烛柱从右到左的序号,右边第一个烛柱序号为 0 return(0); start 函数了结 }

  与目标画线比拟,报警句句显得特别纯洁, 只须正在占定语句中加一个报警句句即可 报警式样有:弹出窗口报警、音乐报警、邮件报警等。 即使邮箱开通了手机短信报告,则邮件报警的实质会即时转发得手机上。 1、弹出窗口报警: 当(要求抵达)践诺此语句时,以弹出窗口警觉。 式样:Alert(实质 1,实质 2,实质 3,实质 4); 报警实质为字符串型,实质之间加逗号

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

  如许当 mark 的值为 1 时,阐述仍旧对上穿报过警了,就不行再次对上穿报警;

  当 mark 的值为 2 时,阐述仍旧对下穿报过警了,就不行再次对下穿报警。

相关文章
评论留言