首页 MT4编程入门教程

MT4编程入门教程

举报
开通vip

MT4编程入门教程 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 MT4 编程入门培训教程 MT4 编程入门教程目录 MT4 编程入门 1:MT4自定义指标的基本操作 MT4 编程入门 2:指标源码中的常用符号说明 MT4 编程入门 3:自定义变量 MT4 编程入门 4:自定义函数 MT4 编程入门 5:自定义数组 MT4 编程入门 6:市场数据取值 MT4 编程入门 7:判断语句 MT4 编程入门 8:循环 MT4 编程入门 9:MT4自定义指标的结...

MT4编程入门教程
www.chaopanshou.com 超盘手俱乐部 QQ:95501883 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 编程入门 11:MT4 的报警 MT4 编程入门 1:MT4 自定义指标的基本操作 MT4 自定义指标的保存目录、指标编缉器与指标调用 一、MT4 自定义指标保存在 C:\Program Files\MetaTrader 4\experts\indicators 这个目 录中,该目录中主要有二种类型的文件,一种是 mq4 文件,这是 MT4自定义指标的源码文件, 是一种高级语言文件,可以人工编写修改,机器不能直接执行,但能在 MT4 启动时自动编译 为 ex4 可执行文件。另一种就是 ex4 文件,这是 MT4自定义指标的可执行文件,由 mq4文件 编译得到。mq4 文件必须编译为 ex4 文件才能被 MT4执行。但 ex4文件是机器码文件,人工 不可修改 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 另外还有一个文件是 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、还有很重要的一点,就是要把源码文件保存到正确的目录 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 保存后,再点一下编写。 到此,源码保存完成。 当然,我们也还有另的办法: 可以打开一个原已存在的 mq4文件,然后另存为你需要的文件名,再删除文件中的所有内容 成为空文件,把网页上的源贴到文件中保存即可 也可以在记事本中新建一个文件,把网页上的源码贴进记事本,然后取个文件名保存到上面 提到的目录,不过文件后缀必须输入 mq4,保存类型选择“所以文件” 四、mt4 程序调用自定义指标 这非常简单 MT4 编程入门 2:指标源码中的常用符号说明 一、注释符:单行注释“//”、多行注释“/* */” 程序不执行注释,注释内容仅供阅读或保留不用的语句 在 MQ 语言编辑器中,注释内容以灰色显示 二、分号“;” 表示一个语句结束 三、逗号“,” 表示一个语句内部间隔,不结束语句。 四、等于号“=” 赋值语句,把等号后面的值赋给等号前的变量中 五、加号“+” 整数或小数,则表示值相加;字符串,则表示前后连接。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 六、加加“++” 表示把符号前的变量值加 1,例如:“i++;” 这实际上就是:“i=i+1;”的简写,表示 i 的值加 1 七、加等于“+=” 表示把符号后的值加到符号前的变量中。例如“i+=2;”,实际上就是“i=i+2;”的简写, 表示 i 的值加 2 八、双等号“==” 等于号。用于逻辑判断,双等号前后值相等,则返回逻辑值“真 true”;双等号前后值不 相等,则返回逻辑值“假 false” 九、叹号等号“!=” 不等于号。用于逻辑判断,不等号前后值不相等,则返回逻辑值“真 true”;不等号前后 值相等,则返回逻辑值“假 false” 十、“&&” 逻辑符“并且” 十一、“||” 逻辑符“或者” 十二、大括号“{}” 表示函数体。 {}内部为函数体语句。 MT4 编程入门 3:自定义变量 一、自定义变量在使用前,必须先创建(定义),设定变量的类型和名称。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 创建时可同时赋值,也可以不赋值。名称可以使用中文字符。 例: int mark; 创建一个整型变量,变量名为“mark”。 bool 是否报警=true; 创建一个逻辑型变量,变量名为“是否报警”,同时,赋初值“t rue” 二、类型和类型定义词 自定义变量的基本类型有: 1、整形(int):就是整数,包括负整数 2、双精度小数(double):可以简单地理解为带小数位的数 3、字符串型(string)。 4、逻辑型(bool):其值分别为“true、false”,即“真、假”,也可以写成“1、0”(1 真,0 假)。 类型定义词仅在创建变量时使用,后面使用变量时,就不能再加类型定义词了 三、附加变量 附加变量就是在程序投入使用后,变量值允许用户自由更改的变量,一般用作程序参数。 一般指标,例如 MACD(12,26,9)参数输入就是通过附加变量实现,(12,26,9)分别为三个附 加变量的默认值。 定义附加变量只需在变量定义语句前加“extern” 例: extern int 周期=9; 创建一个整型附加变量,变量名为“周期”,默认值为 9,允许用 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 户在程序外部修改参数值 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 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 第二句,计算 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后继续 执行主程序。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 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个元素赋初值 三、数组使用时的赋值 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外,数组元素必须一个 一个赋值 例如: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 有几个预定义数组: www.chaopanshou.com 超盘手俱乐部 QQ:95501883 开盘价 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 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 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 线周期为:1 分钟图(PERIOD_M1)、5 分钟图(PERIOD_M5)、15分钟图(PERIOD_M15)、30分 钟图(PERIOD_M30)、 1 小时图(PERIOD_H1)、4 小时图(PERIOD_H4)、日线图(PERIOD_D1)、周线图(PERIOD_W1)、 周线图(PERIOD_W1)、月线图(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 线周期,用在谁就是谁,用在哪 就是哪 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 2、移动平均值。双精度 double 型 iMA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift) 参数共 7 个,分别为:商品名称、K 线周期、均线周期、均线偏移、平均模式、价格种类、 位置 均线周期:10 天平均线的均线周期为 10,20 天均线的均线周期为 20 均线偏移:均线位置整体左右移动的位置偏移量 平均模式:简单移动平均(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(天)指数移动平均线 第 3 根 K 线所对应位置的值 其他如 MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似 3、在数组中求元素的移动平均值。双精度 double 型 iMAOnArray(数组名, 总数, 平均周期, 均线偏移, 平均模式, 位置) 这也与 iMA函数差不多,不过数据源变为数组 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 从数组中不但可以求得移动平均值,还可以求得 RSI等指标值 4、求自定义指标的值 我们经常自己编一些自定义指标,可用 iCustom 函数来取得自定义函数的值 iCustom(商品名,K线周期,自定义指标名称,自定义指标参数1,参数2,参数3,,,自定义指标 线编号,位置) 如果自定义指标只有一根指标线,则自定义指标线的编号为 0。 如果自定义指标有多根指标线,则第一条自定义指标线的编号为 0,第二条为 1,第三条为 2。。。 例如: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; } www.chaopanshou.com 超盘手俱乐部 QQ:95501883 我们在编写报警指标的时候,就经常用到这一语句: 如果“价格向上达到指定价位”,则“报警” 如果“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 线最高价小于 1.0000,并且最新 K 线最高价大等于 1.0000 下穿报警条件:当第二根 K 线最低价大于 1.0000,并且最新 K 线最低价小等于 1.0000 这里,mark 是用作报警标记,mark 的初值是 0, 当上穿报警后,mark的值就改为 1;当下穿报警后,mark 的值就改为 2; www.chaopanshou.com 超盘手俱乐部 QQ:95501883 当 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 等指标值。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 面对海量数据,我们必须用循环来实现数据的取值和赋值。 一、while 循环 while(条件) { 语句 1 语句 2 。。。 } 规则:当小括号中的条件成立时,就执行大括号中的语句,执行完了再判断条件是否成立, 如果条件成立就继续执行大括号中的语句。 只要条件成立,程序就不停地运行大括号中的语句(循环体),直到小括号中的条件不再成立 时结束循环。 它与 if 语句的区别是:if语句是当条件为真时运行一次;而 while 语句则是只要条件为真, 循环体语句就不停地运行,直到条件为假时结束循环。 例: extern int 快线=12; extern int 慢线=26; double buffer[]; int i=0; while(i<1000) { www.chaopanshou.com 超盘手俱乐部 QQ:95501883 buffer= iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,慢线,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 循环在原理上是一致的,只是书写 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 上有所区别 把上面的例子改成 for 语句: extern int 快线=12; extern int 慢线=26; double buffer[]; for(int i=0; i<1000; i++) { buffer= iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i); } 与前面相比,我们注意到: “int i=0;”语句从“while(i<1000)”上方移到循环条件“i<1000”的前面; “i++;”语句从循环体中移到了循环条件“i<1000”的后面; www.chaopanshou.com 超盘手俱乐部 QQ:95501883 循环执行顺序与 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 等类指标用到此语句 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 2、#property indicator_separate_window 把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句 3、#property indicator_buffers 3 显示 3 根指标线 4、#property indicator_color1 Red 第 1 根指标线的颜色为 Red 5、#property indicator_width1 1 第 1 根指标线的粗细分别为 1 6、#property indicator_level1 0.00 在 0.00 值位置横划 1条虚线 二、参数、变量和数组的定义 全局性的参数、变量、数组在此定义,局部变量可在 start()函数中定义 三、初始化函数 init() init()在自定义指标加载时运行一次。 初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数 四、主函数 start() 当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。 自定义指标的编程主要依靠此函数进行。 start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 另外,还有一个反初始化函数 deinit() deinit()在自定义卸载时运行一次,可用以去除指标加载时 init()所做的初始化操作。 MT4 编程入门 10:画一条指标线 要画指标线,只要在程序中写明以下几点就可以了: 第一、明确指标线所在窗口,是主图还是副图 第二、要建立数组,用以保存指标线在各个位置的值。 第三、要建立指标线与数组的对应关系,哪个数组对应哪条指标线 第四、要明确指标线的线型,是曲线还是柱线或者是箭头 第五、如果指标线是箭头,还要说明是哪种箭头 第六、给数组赋值 其中: 第一、二条写在文件头部中, 第三、四、五条写在 init()函数中(init 函数仅在指标加载时运行一次) 第六条写在 start()函数中(start 函数在数据发动变动时运行,变动一次运行一次) 下面以 MACD为例说明 我们知道,MACD 指标由二条曲线和一组红绿柱线组成。(下图一) 其中: 白线是二根均线的差; 紫线是白线的移动平均线; 红绿柱线则是白线和紫线的差,白线上穿紫线,出现红柱,下穿则出现绿柱。 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 我们从简单入手,先去除紫线和红绿柱线,仅保留其中的那根白线,来看白线是怎样画出来 的。 下面是全部语句: #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 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 ,则邮件报警的内容会即时转发到手机上。 1、弹出窗口报警: 当(条件达到)执行此语句时,以弹出窗口警告。 格式:Alert(内容 1,内容 2,内容 3,内容 4); www.chaopanshou.com 超盘手俱乐部 QQ:95501883 报警内容为字符串型,内容之间加逗号 例如: Alert( Symbol(),"4 小时图 MACD 上穿零轴"); 2、音乐报警: 当(条件达到)执行此语句时,播放一段音乐。 格式:PlaySound("音乐文件名.wav"); 文件类型为 wav 格式,并且保存在 C:\Program Files\MetaTrader4\sounds 目录中 文件名加引号 3、邮件报警: 当(条件达到)执行此语句时,发送一个邮件。 格式:SendMail(标题 1+标题 2, 内容 1+内容 2); 标题之间以加号连接,内容之间也以加号连接 邮件标题和邮件内容以逗号间隔 下面是《价格穿越某均线报警》举例 +--------------------------------- #property indicator_chart_window extern int 警戒均线=20; int mark=0; int start() { if( iHigh(0,0,0) >= iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,0) && iHigh(0,0,1) < iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,1) www.chaopanshou.com 超盘手俱乐部 QQ:95501883 && mark != 1 ) { Alert(Symbol(),"向上触及 30 均线"); mark = 1; } if( iLow(0,0,0) <= iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,0) && iLow(0,0,1) > iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,1) && mark != 2 ) { Alert(Symbol(),"向下触及",警戒均线,"均线"); mark = 2; } return(0); } +--------------------------------- 部分语句说明: #property indicator_chart_window 此句是把程序放在主图,当然这此例中放在副图也一样 extern int 定义一个外部参数变量,整数型,允许外部值修改 int 定义一个整数型变量 int start() 定义触发函数 www.chaopanshou.com 超盘手俱乐部 QQ:95501883 if() 判断 iHigh() 最高价值函数 iLow() 最低价值函数 iMA() 移动平均线值函数 Alert() 报警函数 Symbol() 商品名称函数 && 逻辑运算符“并且” != 逻辑运算符“不等于” MODE_SMA 简单移动平均模式 PRICE_CLOSE 以收盘价计算 再说一下自定义变量 mark 的作用: mark 的初值是 0,当上穿报警时给 mark赋值 1,当下穿报警时给 mark 赋值 2。 这样当 mark的值为 1时,说明已经对上穿报过警了,就不能再次对上穿报警; 当 mark 的值为 2 时,说明已经对下穿报过警了,就不能再次对下穿报警。 这样就起到了消除重复报警的作用。
本文档为【MT4编程入门教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_368339
暂无简介~
格式:pdf
大小:236KB
软件:PDF阅读器
页数:27
分类:金融/投资/证券
上传时间:2013-01-19
浏览量:342