MT4编程入门教程pdf超盘手俱乐部 QQ MT4 编程初学培训教程 MT4 编程初学教程目次 MT4 编程初学 1:MT4自界说目标的根基操作 MT4 编程初学 2:目标源码中的常用符号阐发 MT4 编程初学 3:自界说变量 MT4 编程初学 4:自界说函数 MT4 编程初学 5:自界说数组 MT4 编程初学 6:商场数据取值 MT4 编程初学 7:决断语句 MT4 编程初学 8:轮回 MT4 编程初学 9:MT4自界说目标的组织 MT4 编程初学 10:画一条件标线 自界说目标的根基操作 MT4 自界说目标的留存目次、目标编缉器与目标挪用 一、MT4 自界说目标留存正在 C:\Program Files\MetaTrader 4\experts\indicators 这个目 录中,该目次中紧要有二品种型的文献,一种是 mq4 文献,这是 MT4自界说目标的源码文献, 是一种高级发言文献,可能人工编写修正,呆板不行直接奉行,但能正在 MT4 启动时自愿编译 为 ex4 可奉行文献。另一种即是 ex4 文献,这是 MT4自界说目标的可奉行文献,由 mq4文献 编译获得。mq4 文献务必编译为 ex4 文献本领被 MT4奉行。但 ex4文献是呆板码文献,人工 弗成修正 超盘手俱乐部 QQ 其余尚有一个文献是 mqlcache.dat,它用来留存目次中的文献音讯,假使 MT4 无法自愿编 译,只消删除此文献即可管理题目,mq4 文献编译为 ex4 可奉行文献有两种技巧: 1、MT4 启动时,会自愿把此目次中的 mq4 文献编译为 ex4 文献。 2、用 MQ 发言编辑器翻开 mq4文献,点一下“编写”按钮,即可天生 ex4文献 二、下载留存 mq4 文献、ex4文献 正在论坛上咱们时常看到有 mq4文献、ex4 文献可供下载,咱们只消把它们留存到 C:\Progra m Files\MetaTrader 4\experts\indicators 这个目次,也即是下面这个目次中,就可能了。 假使下载的是 ex4 文献,那可能直接挪用;假使是 mq4 文献,则需求重启动 MT4,让编制自 动编译天生 ex4 可奉行文献。假使下载的是 rar、zip 等类型的压缩文献,还务必下载后解 压到此目次本领应用。 三、将源码留存为源码文献 正在论坛上,咱们也时常能看到目标源码贴正在网页上,但没有 mq4、ex4 等文献可能下载,只 能复制源码。此时需求咱们自身发端将源码留存为源码文献,那也不要紧,卓殊地简易,众 点几下鼠标就搞定。 1、翻开 MQ发言编辑器 2、正在 MQ 发言编辑器中新修一个文献,文献名肯定要输,此外恣意操作都不要紧。 3、删除新文献内中的扫数实质,成为一个空文献, 4、接着咱们就可能将网页上源码复制粘贴进来 试着点一下“编写”,假使左下角显示“0 谬误,0告诫”,那阐发源码没题目,编译通过 了,凯旋天生了 ex4可奉行文献 5、尚有很主要的一点,即是要把源码文献留存到精确的目次 超盘手俱乐部 QQ 留存后,再点一下编写。 到此,源码留存完毕。 当然,咱们也尚有另的门径: 可能翻开一个原已存正在的 mq4文献,然后另存为你需求的文献名,再删除文献中的扫数实质 成为空文献,把网页上的源贴到文献中留存即可 也可能正在记事本中新修一个文献,把网页上的源码贴进记事本,然后取个文献名留存到上面 提到的目次,可是文献后缀务必输入 mq4,留存类型选取“因而文献” 四、mt4 步调挪用自界说目标 这卓殊简易 MT4 编程初学 2:目标源码中的常用符号阐发 一、注解符:单行注解“//”、众行注解“/* */” 步调不奉行注解,注解实质仅供阅读或保存不消的语句 正在 MQ 发言编辑器中,注解实质以灰色显示 二、分号“;” 展现一个语句罢了 三、逗号“,” 展现一个语句内部间隔,不罢了语句。 四、等于号“=” 赋值语句,把等号后面的值赋给等号前的变量中 五、加号“+” 整数或小数,则展现值相加;字符串,则展现前后连合。 超盘手俱乐部 QQ 六、加加“++” 展现把符号前的变量值加 1,比方:“i++;” 这实践上即是:“i=i+1;”的简写,展现 i 的值加 1 七、加等于“+=” 展现把符号后的值加到符号前的变量中。比方“i+=2;”,实践上即是“i=i+2;”的简写, 展现 i 的值加 2 八、双等号“==” 等于号。用于逻辑决断,双等号前后值相称,则返回逻辑值“真 true”;双等号前后值不 相称,则返回逻辑值“假 false” 九、叹号等号“!=” 不等于号。用于逻辑决断,不等号前后值不相称,则返回逻辑值“真 true”;不等号前后 值相称,则返回逻辑值“假 false” 十、“&&” 逻辑符“而且” 十一、“” 逻辑符“或者” 十二、大括号“{}” 展现函数体。 {}内部为函数体语句。 MT4 编程初学 3:自界说变量 一、自界说变量正在应用前,务必先创修(界说),设定变量的类型和名称。 超盘手俱乐部 QQ 创修时可同时赋值,也可能不赋值。名称可能应用中文字符。 例: int mark; 创修一个整型变量,变量名为“mark”。 bool 是否报警=true; 创修一个逻辑型变量,变量名为“是否报警”,同时,赋初值“t rue” 二、类型和类型界说词 自界说变量的根基类型有: 1、整形(int):即是整数,囊括负整数 2、双精度小数(double):可能简易地剖析为带小数位的数 3、字符串型(string)。 4、逻辑型(bool):其值分歧为“true、false”,即“线 线 假)。 类型界说词仅正在创修变量时应用,后面应用变量时,就不行再加类型界说词了 三、附加变量 附加变量即是正在步调加入应用后,变量值应许用户自正在更改的变量,大凡用作步调参数。 大凡目标,比方 MACD(12,26,9)参数输入即是通过附加变量告竣,(12,26,9)分歧为三个附 加变量的默认值。 界说附加变量只需正在变量界说语句前加“extern” 例: extern int 周期=9; 创修一个整型附加变量,变量名为“周期”,默认值为 9,应许用 超盘手俱乐部 QQ 户正在步调外部修正参数值 MT4 编程初学 4:自界说函数 自界说函数与数学函数正在性质上是相仿的 比方:数学函数 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 超盘手俱乐部 QQ 第二句,谋划 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后延续 奉行主步调。 超盘手俱乐部 QQ MT4 编程初学 5:自界说数组 一、数组是一系列同类型变量的汇合,可能同时存储众个数值。 例: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个元素赋初值 三、数组应用时的赋值 超盘手俱乐部 QQ 数组的赋值务必指定明了的赋值对象,除了新修数组时可能批量赋值外,数组元素务必一个 一个赋值 比方: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 有几个预订义数组: 超盘手俱乐部 QQ 开盘价 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 超盘手俱乐部 QQ Point 展现暂时泉币对的点值,类型为双精度 double 型,无日元币对为 0.0001,有日元币 对为 0.01。与 Digits 正好相反。 三、目标函数 1、代价、成交量、功夫 它们都有三个参数:泉币对名、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,shift) 日期功夫 datetime 型 K 线 分钟图(PERIOD_M1)、5 分钟图(PERIOD_M5)、15分钟图(PERIOD_M15)、30分 钟图(PERIOD_M30)、 1 小时图(PERIOD_H1)、4 小时图(PERIOD_H4)、日线)、周线)、 周线)、月线) 例: iOpen(USDJPY,PERIOD_H1,0) 展现美元兑日元 1小时图最新 K 线烛炬的开盘价 iClose(EURUSD,PERIOD_H4,2) 展现欧元兑美元 4小时图第 3根 K 线烛炬的收盘价 iClose(GBPUSD,PERIOD_H1,i) 展现英磅兑美元 1小时图第 i+1 根 K 线烛炬的收盘价 iHigh(NULL,0,0) 既不指定商品,也不指定 K 线周期,用正在谁即是谁,用正在哪 即是哪 超盘手俱乐部 QQ 2、转移均匀值。双精度 double 型 iMA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift) 参数共 7 个,分歧为:商品名称、K 线周期、均线周期、均线偏移、均匀形式、代价品种、 处所 均线 天均匀线 天均线 均线偏移:均线处所集体安排转移的处所偏移量 均匀形式:简易转移均匀(MODE_SMA)、指数转移均匀(MODE_EMA)、光滑转移均匀线(MODE_S MMA)、线性加权转移均匀线(MODE_LWMA) 代价品种:收盘价(PRICE_CLOSE)、开盘价(PRICE_OPEN)、最高价(PRICE_HIGH)、最低价(P RICE_LOW)、中值(PRICE_MEDIAN)、5(PRICE_TYPICAL)、6(PRICE_WEIGHTED) 例 1:iMA(EURUSD,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(天)指数转移均匀线 根 K 线所对应处所的值 其他如 MACD目标、威廉目标、RSI、SAR、布林线等目标取值都与转移均匀线、正在数组中求元素的转移均匀值。双精度 double 型 iMAOnArray(数组名, 总数, 均匀周期, 均线偏移, 均匀形式, 处所) 这也与 iMA函数差不众,可是数据源变为数组 超盘手俱乐部 QQ 从数组中不只可能求得转移均匀值,还可能求得 RSI等目标值 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 编程初学 7:决断语句 一、if 语句 if 语句很常用,也对照简易。 法例:假使小括号中的条目兴办,则奉行大括号中的语句;假使不兴办,则跳过大括号。 比方: if(a==1) { b=c+1; } 超盘手俱乐部 QQ 咱们正在编写报警目标的期间,就时常用到这一语句: 假使“代价向上到达指订价位”,则“报警” 假使“MACD上穿”,则“报警” 假使“均线金叉”,则“报警”。等等 例: int mark=0; if( High[1]
=1.0000 && mark!=1) { Alert(symbol(),代价向上触及 1.0000); mark=1; } if( Low[1]
=1.0000 && mark!=2) { alert(symbol(),代价向下触及 1.0000); mark=2; } 这是一个代价上、下穿 1.0000 时报警的决断语句: 上穿报警条目:当第二根 k 线,而且最新 k 线 下穿报警条目:当第二根 k 线,而且最新 k 线 这里,mark 是用作报警记号,mark 的初值是 0, 当上穿报警后,mark的值就改为 1;当下穿报警后,mark 的值就改为 2; 超盘手俱乐部 qq 当 mark=0 时,阐发从未报过警,上、下穿都能报警; 当 mark=1 时,阐发仍然上穿报过警了,不行再上穿报警了,但仍可下穿报警; 当 mark=2 时,阐发仍然下穿报过警了,不行再下穿报警了,但仍可上穿报警。 二、if ... else 语句 法例:假使小括号中的条目兴办,则奉行 if 下大括号中的语句 1;假使不兴办,则奉行 el se 下大括号中的语句 2。 if(条目) { 语句 1; } else { 语句 2; } 三、防卫事项 1、惟有语句后面才用到语句罢了符“;” 条目、大、小括号后面都不消“;” 2、语句用大括号括起来,但假使惟有一行语句,则大括号可能省略 if(条目) 语句 1; mt4 编程初学 8:轮回 一幅 k 线图有几千上万条 k 线,每根 k 线又各有开收盘价、最崎岖价等数值,况且尚有良众 转移均匀线、macd、rsi 等目标值。 超盘手俱乐部 qq 面临海量数据,咱们务必用轮回来告竣数据的取值和赋值。 一、while 轮回 while(条目) { 语句 1 语句 2 。。。 } 法例:当小括号中的条目兴办时,就奉行大括号中的语句,奉行完了再决断条目是否兴办, 假使条目兴办就延续奉行大括号中的语句。 只消条目兴办,步调就继续地运转大括号中的语句(轮回体),直到小括号中的条目不再兴办 时罢了轮回。 它与 if 语句的区别是:if语句是当条目为真时运转一次;而 while 语句则是只消条目为真, 轮回体语句就继续地运转,直到条目为假时罢了轮回。 例: extern int 速线; extern int 慢线; double buffer[]; int i=0; while(i
1000) { 超盘手俱乐部 qq buffer= ima(null,0,速线,mode_ema,price_close,i) -ima(null,0,慢线,mode_ema,price_close,i); i++; } 这里,轮回奉行条目是 i
1000,轮回体中有两个语句,一句是把两条均线的差值赋给数组 b uffer,另一句“i++;”是每运转一次,i 的值正在原有根蒂上添补 1。如许,跟着轮回的持续 运转,i 的值渐渐添补,轮回 1000 次后,i 的值也就从 0 变为 1000,此时“i
1000”就不 再兴办,轮回罢了。如许,数组 buffer[]中也就有了 1000 个值。 二、for 轮回 for 轮回与 while 轮回正在道理上是相仿的,只是书写方式上有所区别 把上面的例子改成 for 语句: extern int 速线; extern int 慢线; double buffer[]; for(int i=0; i
1000; i++) { buffer= ima(null,0,速线,mode_ema,price_close,i) -ima(null,0,慢线,mode_ema,price_close,i); } 与前面比拟,咱们防卫到: “int i=0;”语句从“while(i
1000”的后面; 超盘手俱乐部 qq 轮回奉行规律与 while 轮回相仿: 第一步、先奉行小括号中的第 1 句:int i=0; (此语句用来界说初始变量,正在轮回中仅奉行一次,可认为没有任何外达式的空操作符“;”) 第二步、再决断小括号中的第 2 句是否兴办:i
1000; 假使不兴办,则轮回罢了;假使兴办,则轮回延续运转,奉行第三步 第三步、按规律奉行大括号中的语句 第四步、奉行小括号中的第 1句:i++ (此语句即:每奉行一次,i 的值添补 1) 然后回到第二步延续奉行轮回。 再填补一点:假使轮回体中(大括号中)惟有一行语句,大括号可能省略 mt4 编程初学 9:mt4 自界说目标的组织 mt4 自界说目标大凡由四个片面组成: (1)文献头部 (2)参数、变量和数组的界说 (3)初始化函数 init() (4)主函数 start() 一、文献头部,也称为预惩罚步调 预惩罚步调以“#”开始,行尾无语句罢了符“;” 常用的预惩罚步调有: 1、#property indicator_chart_window 把目标显示正在主图。如:均线、sra 等类目标用到此语句 超盘手俱乐部 qq 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()函数的功用紧要是取值和给目标线赋值,报警也正在此函数内倡导。 超盘手俱乐部 qq 其余,尚有一个反初始化函数 deinit() deinit()正在自界说卸载时运转一次,可用以去除目标加载时 init()所做的初始化操作。 mt4 编程初学 10:画一条件标线 要画目标线,只消正在步调中写明以下几点就可能了: 第一、明了目标线所正在窗口,是主图照样副图 第二、要竖立数组,用以留存目标线正在各个处所的值。 第三、要竖立目标线与数组的对应合联,哪个数组对应哪条件标线 第四、要明了目标线的线型,是弧线照样柱线或者是箭头 第五、假使目标线是箭头,还要阐发是哪种箭头 第六、给数组赋值 此中: 第一、二条写正在文献头部中, 第三、四、五条写正在 init()函数中(init 函数仅正在目标加载时运转一次) 第六条写正在 start()函数中(start 函数正在数据唆使蜕变时运转,蜕变一次运转一次) 下面以 macd为例阐发 咱们晓畅,macd 目标由二条弧线和一组红绿柱线构成。(下图一) 此中: 白线是二根均线的差; 紫线是白线的转移均匀线; 红绿柱线则是白线和紫线的差,白线上穿紫线,显示红柱,下穿则显示绿柱。 超盘手俱乐部 qq 咱们从简易入手,先去除紫线和红绿柱线,仅保存此中的那根白线,来看白线是何如画出来 的。 下面是完全语句: #property indicator_separate_window #property indicator_color1 white #property indicator_level1 0 extern int fma=12; extern int sma=26; double buf[]; int init() { setindexbuffer(0,buf); setindexstyle(0,draw_line); return(0); } int start() { int limit=bars-indicatorcounted(); for(int i=0; i
GBT287992-2012冷热水用耐热聚乙烯PE-RT管道编制第2片面担材.pdf
MK_深远云谋划MongoDB管制与开拓实战详解_13260597[高清全文].pdf
GBT2951112008电缆和光缆绝缘和护套资料通用尝试技巧.pdf
MSS SP-97-2006 承插焊螺纹和对焊端的集体强化式管座.pdf
陕旅版小学三年级下册英语Unit 3 How do you come to school 第二课时 名师讲课课件.ppt
第七课 局部收入的分拨 课件- 高考政事一轮温习人教版必修曾经济糊口.pptx
第二课 众变的代价 课件- 高考政事一轮温习人教版必修曾经济糊口.pptx
冀教版小学四年级下册英语Unit 4 My favourites Lesson 23 名师讲课课件.ppt
转载请注明出处。