FXCG中文官网为全球投资者在金融市场的提供交易服务!

MT4编程入门详解

MT4教程 2022-01-09 02:0751未知admin

  MT4编程入门详解目次 MT4 编程初学(一) :MT4 自界说目标的基础操作 MT4 编程初学(二):目标源码中的常用符号证据 MT4 编程初学(三):自界说变量 MT4 编程初学(四):自界说函数 MT4 编程初学(五):自界说数组 MT4 编程初学(六):墟市数据取值 MT4 编程初学(七):判决语句 MT4 编程初学(八):轮回 MT4 编程初学(九):MT4 自界说目标的构造 MT4 编程初学(十):画一条件标线 编程初学(十一):MT4 的报警 MT4 编程初学(一) :MT4 自界说目标的基础操作 MT4 自界说目标的留存目次、目标编缉器与目标移用 一、MT4 自界说目标留存正在 C:\Program Files\MetaTrader 4\experts\indicators 这个目次中, 该目次中紧要有二品种型的文献, 一种是 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 说话编辑器中新筑一个文献,文献名肯定要输,另外随意操作都不要紧。 3、删除新文献内部的悉数实质,成为一个空文献, 4、接着咱们就能够将网页上源码复制粘贴进来 试着点一下“编写” ,假如左下角映现“0 舛误,0 警戒” ,那证据源码没题目,编译通过了,告捷天生了 ex4 可实行文 件 5、另有很首要的一点,便是要把源码文献留存到确切的目次中 留存后,再点一下编写。 到此,源码留存达成。 当然,咱们也另有另的宗旨: 能够翻开一个原已存正在的 mq4 文献,然后另存为你必要的文献名,再删除文献中的悉数实质成为空文献,把网页上的 源贴到文献中留存即可 也能够正在记事本中新筑一个文献,把网页上的源码贴进记事本,然后取个文献名留存到上面提到的目次,然而文献后 缀务必输入 mq4,留存类型采用“因而文献” 四、mt4 步骤移用自界说目标 这格外纯粹 MT4 编程初学(二):目标源码中的常用符号证据 一、诠释符:单行诠释“//” 、众行诠释“/* */” 步骤不实行诠释,诠释实质仅供阅读或保存无须的语句 正在 MQ 说话编辑器中,诠释实质以灰色显示 二、分号“; ” 外现一个语句已矣 三、逗号“, ” 外现一个语句内部间隔,不已矣语句。 四、等于号“=” 赋值语句,把等号后面的值赋给等号前的变量中 五、加号“+” 整数或小数,则外现值相加;字符串,则外现前后贯串。 六、加加“++” 外现把符号前的变量值加 1,比方: “i++;” 这现实上便是: “i=i+1;”的简写,外现 i 的值加 1 七、加等于“+=” 外现把符号后的值加到符号前的变量中。比方“i+=2;” ,现实上便是“i=i+2;”的简写,外现 i 的值加 2 八、双等号“==” 等于号。用于逻辑判决,双等号前后值相当,则返回逻辑值“真 true” ;双等号前后值不相当,则返回逻辑值“假 false” 九、叹号等号“!=” 不等于号。 用于逻辑判决, 不等号前后值不相当, 则返回逻辑值 “真 true” ; 不等号前后值相当, 则返回逻辑值 “假 false” 十、 “&&” 逻辑符“而且” 十一、 “” 逻辑符“或者” 十二、大括号“{}” 外现函数体。 {}内部为函数体语句。 MT4 编程初学(三):自界说变量 一、自界说变量正在行使前,务必先创筑(界说),设定变量的类型和名称。 创筑时可同时赋值,也能够不赋值。名称能够行使中文字符。 例: 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,愿意用户正在步骤外部窜改参数值 MT4 编程初学(四):自界说函数 自界说函数与数学函数正在实质上是一概的 比方:数学函数 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),返回结果 22 后赓续实行主步骤。 MT4 编程初学(五):自界说数组 一、数组是一系列同类型变量的集中,能够同时存储众个数值。 例: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 编程初学(六):墟市数据取值 一、预订义数组(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 线烛炬的开盘价、最高价、最低价、收盘价 以此类推。 。 。 。 。 。 谨慎:这些是数组,用的是方括号。 二、预订义变量 买入价、卖出价是及时价钱,MT4 用预订义变量 Ask 和 Bid 外现,数值类型为 double 双精度 另有极少预订义变量,如: Bars 外现图外中的烛炬数,类型为 int 整数型 Digits 外现而今钱银对的小数位,类型为 int 整数型,无日元币对为 4,有日元币对为 2,黄金石油等平常也为 2 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)、日线)、周线)、周线)、月线 图(PERIOD_W1) 例: 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 线周期,用正在谁便是谁,用正在哪便是哪 2、转移均匀值。双精度 double 型 iMA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift) 参数共 7 个,区分为:商品名称、K 线周期、均线周期、均线偏移、均匀形式、价钱品种、地点 均线 天均匀线 天均线 均线偏移:均线地点集体安排转移的地点偏移量 均匀形式:纯粹转移均匀(MODE_SMA)、指数转移均匀(MODE_EMA)、滑腻转移均匀线(MODE_SMMA)、线性加权转移 均匀线(MODE_LWMA) 价钱品种: 收盘价(PRICE_CLOSE)、 开盘价(PRICE_OPEN)、 最高价(PRICE_HIGH)、 最低价(PRICE_LOW)、 中值(PRICE_MEDIAN)、 5(PRICE_TYPICAL)、6(PRICE_WEIGHTED) 例 1:iMA(EURUSD,PERIOD_H1,20,0,MODE_SMA,PRICE_CLOSE,0) 外现:欧元 1 小时图上,以收盘价算计的,20 小时纯粹转移均匀线,MODE_EMA,PRICE_CLOSE,2) 外现:正在而今商品、而今 K 线周期图外上,以收盘价算计的,20(天)指数转移均匀线 根 K 线所对应地点的值 其他如 MACD 目标、威廉目标、RSI、SAR、布林线等目标取值都与转移均匀线、正在数组中求元素的转移均匀值。双精度 double 型 iMAOnArray(数组名, 总数, 均匀周期, 均线偏移, 均匀形式, 地点) 这也与 iMA 函数差不众,然而数据源变为数组 从数组中不仅能够求得转移均匀值,还能够求得 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 编程手册》 MT4 编程初学(七):判决语句 一、if 语句 if 语句很常用,也比力纯粹。 法则:假如小括号中的条目建设,则实行大括号中的语句;假如不建设,则跳过大括号。 比方: if(a==1) { b=c+1; } 咱们正在编写报警目标的岁月,就往往用到这一语句: 假如“价钱向上到达指订价位” ,则“报警” 假如“MACD 上穿” ,则“报警” 假如“均线金叉” ,则“报警” 。等等 例: int mark=0; if( High[1]1.0000 && High[0]=1.0000 && mark!=1) { Alert(symbol(),价钱向上触及 1.0000); mark=1; } if( Low[1]1.0000 && Low[0]=1.0000 && mark!=2) { Alert(symbol(),价钱向下触及 1.0000); mark=2; } 这是一个价钱上、下穿 1.0000 时报警的判决语句: 上穿报警条目:当第二根 K 线,而且最新 K 线 下穿报警条目:当第二根 K 线,而且最新 K 线 这里,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(条目) MT4 编程初学(八):轮回 语句 1; 一幅 K 线图有几千上万条 K 线,每根 K 线又各有开收盘价、最凹凸价等数值,况且另有许众转移均匀线、MACD、RSI 等目标值。 面临海量数据,咱们务必用轮回来完毕数据的取值和赋值。 一、while 轮回 while(条目) { 语句 1 语句 2 。 。 。 } 法则:当小括号中的条目建设时,就实行大括号中的语句,实行完了再判决条目是否建设,假如条目建设就赓续实行 大括号中的语句。 只消条目建设,步骤就一直地运转大括号中的语句(轮回体),直到小括号中的条目不再建设时已矣轮回。 它与 if 语句的区别是:if 语句是当条目为真时运转一次;而 while 语句则是只消条目为真,轮回体语句就一直地运转, 直到条目为假时已矣轮回。 例: extern int 速线; extern int 慢线; double buffer[]; int i=0; while(i1000) { buffer= iMA(NULL,0,速线,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,慢线,MODE_EMA,PRICE_CLOSE,i); i++; } 这里,轮回实行条目是 i1000,轮回体中有两个语句,一句是把两条均线的差值赋给数组 buffer,另一句“i++;”是每 运转一次,i 的值正在原有根源上扩大 1。云云,跟着轮回的持续运转,i 的值渐渐扩大,轮回 1000 次后,i 的值也就从 0 变为 1000,此时“i1000”就不再建设,轮回已矣。云云,数组 buffer[]中也就有了 1000 个值。 二、for 轮回 for 轮回与 while 轮回正在道理上是一概的,只是书写体式上有所区别 把上面的例子改成 for 语句: extern int 速线; extern int 慢线; double buffer[]; for(int i=0; i1000; i++) { buffer= iMA(NULL,0,速线,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,慢线,MODE_EMA,PRICE_CLOSE,i); } 与前面比拟,咱们谨慎到: “int i=0;”语句从“while(i1000)”上方移到轮回条目“i1000”的前面; “i++;”语句从轮回体中移到了轮回条目“i1000”的后面; 轮回实行按次与 while 轮回一概: 第一步、先实行小括号中的第 1 句:int i=0; (此语句用来界说初始变量,正在轮回中仅实行一次,可认为没有任何外达式的空操作符“; ”) 第二步、再判决小括号中的第 2 句是否建设:i1000; 假如不建设,则轮回已矣;假如建设,则轮回赓续运转,实行第三步 第三步、按按次实行大括号中的语句 第四步、实行小括号中的第 1 句:i++ (此语句即:每实行一次,i 的值扩大 1) 然后回到第二步赓续实行轮回。 再填补一点:假如轮回体中(大括号中)惟有一行语句,大括号能够省略 MT4 编程初学(九):MT4 自界说目标的构造 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 值地点横划 1 条虚线 二、参数、变量和数组的界说 全体性的参数、变量、数组正在此界说,片面变量可正在 start()函数中界说 三、初始化函数 init() init()正在自界说目标加载时运转一次。 初始化函数的成效是“扶植” 。假如自界说目标必要划线,则必定用到此函数 四、主函数 start() 当数据有改换时,start()就被触发。数据改换一次,start()就运转一次。 自界说目标的编程紧要仰仗此函数实行。 start()函数的功用紧要是取值和给目标线赋值,报警也正在此函数内首倡。 此外,另有一个反初始化函数 deinit() deinit()正在自界说卸载时运转一次,可用以去除目标加载时 init()所做的初始化操作。 MT4 编程初学(十):画一条件标线 要画目标线,只消正在步骤中写明以下几点就能够了: 第一、清楚目标线所正在窗口,是主图依旧副图 第二、要设立筑设数组,用以留存目标线正在各个地点的值。 第三、要设立筑设目标线与数组的对应闭联,哪个数组对应哪条件标线 第四、要清楚目标线的线型,是弧线依旧柱线或者是箭头 第五、假如目标线是箭头,还要证据是哪种箭头 第六、给数组赋值 此中: 第一、二条写正在文献头部中, 第三、四、五条写正在 init()函数中(init 函数仅正在目标加载时运转一次) 第六条写正在 start()函数中(start 函数正在数据煽动改换时运转,改换一次运转一次) 下面以 MACD 为例证据 咱们领略,MACD 目标由二条弧线和一组红绿柱线构成。 (下图一) 此中: 白线是二根均线的差; 紫线是白线的转移均匀线; 红绿柱线则是白线和紫线的差,白线上穿紫线,映现红柱,下穿则映现绿柱。 咱们从纯粹入手,先去除紫线和红绿柱线,仅保存此中的那根白线,来看白线是奈何画出来的。 下面是完全语句: #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; ilimit; i++) { buf= iMA(NULL,0,FMA,0,1,0,i) -iMA(NULL,0,SMA,0,1,0,i); } return(0); } 证据如下: ============================================== ============================================== 以下为上述语句的扼要证据 #property indicator_separate_window 目标放正在副图 #property indicator_color1 White 第一条件标线为白色 #property indicator_level1 0 正在副图中零值地点上画一条水准横线, extern int FMA=12; 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= iMA(NULL,0,FMA,0,1,0,i) -iMA(NULL,0,SMA,0,1,0,i); } 给数组 buf 赋值,其值区分为相应地点上两条均线的差 i 是水准地点序号值,即烛柱从右到左的序号,右边第一个烛柱序号为 0 return(0); start 函数已矣 } MT4 编程初学(十一):MT4 的报警 报警成效是 MT4 的一大特质。它能够正在预订的条目到达时,发出警报。 与目标画线比拟,报警句句显得格外纯粹, 只消正在判决语句中加一个报警句句即可 报警格式有:弹出窗口报警、音乐报警、邮件报警等。 假如邮箱开通了手机短信告诉,则邮件报警的实质会即时转发得手机上。 1、弹出窗口报警: 当(条目到达)实行此语句时,以弹出窗口警戒。 体式:Alert(实质 1,实质 2,实质 3,实质 4); 报警实质为字符串型,实质之间加逗号 比方: Alert( Symbol(),4 小时图 MACD 上穿零轴); 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 mark=0; int start() { if( iHigh(0,0,0) = iMA(0,0,鉴戒均线,MODE_SMA,PRICE_CLOSE,0) && iHigh(0,0,1) iMA(0,0,鉴戒均线,MODE_SMA,PRICE_CLOSE,1) && mark != 1 ) { Alert(Symbol(),向上触及 30 均线); mark = 1; } if( iLow(0,0,0) = iMA(0,0,鉴戒均线,MODE_SMA,PRICE_CLOSE,0) && iLow(0,0,1) iMA(0,0,鉴戒均线,MODE_SMA,PRICE_CLOSE,1) && mark != 2 ) { Alert(Symbol(),向下触及,鉴戒均线,均线); mark = 2; } return(0); } +--------------------------------个人语句证据: #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 时,证据仍旧对下穿报过警了,就不行再次对下穿报警。 云云就起到了祛除反复报警的功用。

FXCG中文官网 Copyright @ 2011-2018FXCG中文官网 All Rights Reserved. 版权所有 备案号:FXCG中文官网

联系QQ: 邮箱地址: