收藏 分享(赏)

MT4编程入门.doc

上传人:eco 文档编号:8150148 上传时间:2019-06-11 格式:DOC 页数:148 大小:900KB
下载 相关 举报
MT4编程入门.doc_第1页
第1页 / 共148页
MT4编程入门.doc_第2页
第2页 / 共148页
MT4编程入门.doc_第3页
第3页 / 共148页
MT4编程入门.doc_第4页
第4页 / 共148页
MT4编程入门.doc_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、MT4编程入门编程入门 1:MT4 自定义指标的保存目录、指标编缉一、MT4 自定义指标保存在 C:Program FilesMetaTrader 4expertsindicators这个目录中,该目录中主要有二种类型的文件,一种是 mq4文件,这是 MT4自定义指标的源码文件,是一种高级语言文件,可以人工编写修改,机器不能直接执行,但能在 MT4启动时自动编译为 ex4可执行文件。另一种就是 ex4文件,这是 MT4自定义指标的可执行文件,由 mq4文件编译得到。mq4文件必须编译为 ex4文件才能被 MT4执行。但 ex4文件是机器码文件,人工不可修改另外还有一个文件是 mqlcache.

2、dat,它用来保存目录中的文件信息,如果 MT4无法自动编译,只要删除此文件即可解决问题mq4文件编译为 ex4可执行文件有两种方法:1、MT4 启动时,会自动把此目录中的 mq4文件编译为 ex4文件。2、用 MQ语言编辑器打开 mq4文件,点一下“编写”按钮,即可生成 ex4文件二、下载保存 mq4文件、ex4 文件在论坛上我们经常看到有 mq4文件、ex4 文件可供下载,我们只要把它们保存到 C:Program FilesMetaTrader 4expertsindicators这个目录,也就是下面这个目录中,就可以了。如果下载的是 ex4文件,那可以直接调用;如果是mq4文件,则需要重

3、启动 MT4,让系统自动编译生成 ex4可执行文件。如果下载的是 rar、zip 等类型的压缩文件,还必须下载后解压到此目录才能使用。三、将源码保存为源码文件在论坛上,我们也经常能看到指标源码贴在网页上,但没有 mq4、ex4 等文件可以下载,只能复制源码。此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。1、打开 MQ语言编辑器2、在 MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。3、删除新文件里面的所有内容,成为一个空文件,4、接着我们就可以将网页上源码复制粘贴进来试着点一下“编写”,如果左下角出现“0 错误,0 警告”,那说明源码

4、没问题,编译通过了,成功生成了 ex4可执行文件5、还有很重要的一点,就是要把源码文件保存到正确的目录中。保存后,再点一下编写。到此,源码保存完成。当然,我们也还有另的办法:可以打开一个原已存在的 mq4文件,然后另存为你需要的文件名,再删除文件中的所有内容成为空文件,把网页上的源贴到文件中保存即可也可以在记事本中新建一个文件,把网页上的源码贴进记事本,然后取个文件名保存到上面提到的目录,不过文件后缀必须输入 mq4,保存类型选择“所以文件”四、mt4 程序调用自定义指标这非常简单MT4 编程入门 2:自定义变量MT4编程入门 3:自定义变量一、自定义变量在使用前,必须先创建(定义),设定变量

5、的类型和名称。创建时可同时赋值,也可以不赋值。名称可以使用中文字符。例:int mark; 创建一个整型变量,变量名为“mark”。bool 是否报警=true; 创建一个逻辑型变量,变量名为“是否报警”,同时,赋初值“true” 二、类型和类型定义词自定义变量的基本类型有:1、整形(int):就是整数,包括负整数2、双精度小数(double):可以简单地理解为带小数位的数3、字符串型(string)。4、逻辑型(bool):其值分别为“true、false”,即“真、假”,也可以写成“1、0”(1 真,0 假)。类型定义词仅在创建变量时使用,后面使用变量时,就不能再加类型定义词了三、附加变量

6、附加变量就是在程序投入使用后,变量值允许用户自由更改的变量,一般用作程序参数。一般指标,例如 MACD(12,26,9)参数输入就是通过附加变量实现,(12,26,9)分别为三个附加变量的默认值。定义附加变量只需在变量定义语句前加“extern”例:extern int 周期=9; 创建一个整型附加变量,变量名为“周期”,默认值为9,允许用户在程序外部修改参数值MT4编程入门 4:自定义函数自定义函数与数学函数在本质上是一致的例如:数学函数 ft(x,y)=3x+2y (x,y为正整数) 写成程序语句就是:int ft(int x,int y)int temp;temp=3*x+2*y;ret

7、urn(temp);一、和自定义变量一样,自定义函数在使用前,也必须先设立,以定义其类型、名称、参数和运算语句。函数类型、名称、参数位于函数头部(参数间以逗号分隔),大括号中的是运算语句,也就是函数体部分。return语句为函数结束语句,return 后面括号中的值为函数返回值,即函数运算结果。上例中,int 为函数类型,表示该函数的返回值(运算结果)是整数;(x,y)为参数,由于自定义变量使用之前都必须先创建,所以要加上类型定义词intft为函数名,有了函数名,我们就可以在别处用 ft(2,1)的形式来调用此函数;函数体部分有三句:第一句,定义一个整形变量 temp第二句,计算 temp的值

8、第三句,函数结束,返回调用点,以 temp的值作为本函数返回值。此函数也可以简写为:int ft(int x,int y) return(3*x+2*y);二、函数类型与类型符函数类型就是函数返回值(运算结果)的类型,与自定义变量类型差不多有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,还有一种函数是以函数运行为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以写成 void(无值型)三、函数中如果定义了自定义变量,那么此变量仅在本函数内部存在,函数运行结束时,自定义变量也就自动注销。上例中,有 x、y、temp 三个自定义变量,在函数运行时

9、创建,在函数运行结束时自动消失,仅在函数内部有效,与函数外部无关。四、函数的调用函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用如我们前面创建了 ft(x,y)函数,则别处我们可以用 ft(4,5)等样式来调用ft(x,y)函数求值。调用时,传递参数值给 ft(x,y)函数(按顺序把 4传给 x,把 5传给 y),返回结果 23后继续执行主程序。MT4编程入门 5:自定义数组一、数组是一系列同类型变量的集合,可以同时存储多个数值。例:int aa4=4,3,2,1;这是一个数据名为 aa、包含了 4个元素的整数型数组(即数组长度为 4),可以同时存储 4个数值。二、自定义数

10、组也必须“先建立,后使用”创建(定义)时,必须设定类型和名称。创建(定义)时,数组的元素个数也可以设定,也可以不设定数组中第一个元素的编号为 0,第二个为 1,以此类推。编号使用方括号括起来在这上例中 aa0的值为 4、aa1的值为 3、aa2的值为 2、aa3的值为 1创建(定义)数组的同时,可以赋初值,也可以不赋初值。例:int bb; 创建数组 bb,不设定数组元素个数int cc8; 创建数组 cc,设定数组元素为 8个,不赋初值int dd3=9,8,7; 创建数组 dd,设定数组元素为 4个,并赋初值赋值后,dd0的值为 9、dd1的值为 8、dd2的值为 7int ee9=0,1

11、,2,3; 创建数组 ee,设定数组元素为 9个,但只给前 4个元素赋初值三、数组使用时的赋值数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外,数组元素必须一个一个赋值例如:dd2=1;这是对数组 dd的第 3个元素 dd2(0是第 1个,2表示第 3个)重新赋值为 1在这里,没有整数型变量定义符 int,这样,数组 dd原有三个值9,8,7就变为9,8,1四、数组的引用数组只是一系列变量的集合,所以每次只能使用数组中的一个元素。数组的引用必须指定明确的引用对象,一次只能引用一个。如果需要使用整列数组,则必须逐个使用。例如:数组 aa4的值为4,3,2,1我们用 aai来引用数组

12、 aa中的值当 i=0时,aai的值为 4当 i=1时,aai的值为 3当 i=2时,aai的值为 2当 i=3时,aai的值为 1这样,我们在处理数列的时候,使用数组就能带来极大的方便MT4编程入门 6:市场数据取值一、预定义数组(MT4 已经定义好的,可以直接使用)开盘价、最高价、最低价、收盘价、成交量等历史数据,每根 K线蜡烛都各有一个,所以必须用数组来解决问题,MT4 有几个预定义数组:开盘价 Open、最高价 High、最低价 Low、收盘价 close、成交量Volume、所属时间 Time类型为双精度 double型(即精确小数)这里有一个位置的问题,右边第一根 K线蜡烛(即最新

13、的蜡烛)的编号为 0,第二根蜡烛编号 1,第三根蜡烛编号 2,也就是说从右向左倒着数过去。Open0、High0、Low0、Close0,表示最新的开盘价、最高价、最低价、收盘价Open1、High1、Low1、close1,表示第 2根 K线蜡烛的开盘价、最高价、最低价、收盘价Open2、High2、Low2、close2,表示第 3根 K线蜡烛的开盘价、最高价、最低价、收盘价Open3、High3、Low3、close3,表示第 4根 K线蜡烛的开盘价、最高价、最低价、收盘价Openi、Highi、Lowi、closei,表示第 i+1根 K线蜡烛的开盘价、最高价、最低价、收盘价以此类推。

14、注意:这些是数组,用的是方括号。二、预定义变量买入价、卖出价是实时价格,MT4 用预定义变量 Ask和 Bid表示,数值类型为double双精度还有一些预定义变量,如:Bars 表示图表中的蜡烛数,类型为 int整数型Digits 表示当前货币对的小数位,类型为 int整数型,无日元币对为 4,有日元币对为 2,黄金石油等一般也为 2Point 表示当前货币对的点值,类型为双精度 double型,无日元币对为0.0001,有日元币对为 0.01。与 Digits正好相反。三、指标函数1、价格、成交量、时间它们都有三个参数:货币对名、K 线周期、位置序号开盘价:iOpen(symbol,time

15、frame,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 分钟

16、图(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

17、,0) 既不指定商品,也不指定 K线周期,用在谁就是谁,用在哪就是哪2、移动平均值。双精度 double型iMA(symbol, timeframe, period, ma_shift, ma_method, applied_price, shift)参数共 7个,分别为:商品名称、K 线周期、均线周期、均线偏移、平均模式、价格种类、位置均线周期:10 天平均线的均线周期为 10,20 天均线的均线周期为 20均线偏移:均线位置整体左右移动的位置偏移量平均模式:简单移动平均(MODE_SMA)、指数移动平均(MODE_EMA)、平滑移动平均线(MODE_SMMA)、线性加权移动平均线(MODE

18、_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 小时简单移动平均线,最新 K线所对应位置的值例 2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)表示:在当前商品、当前 K线周期图表上,以收盘价计算的,20

19、(天)指数移动平均线第 3根 K线所对应位置的值其他如 MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似3、在数组中求元素的移动平均值。双精度 double型iMAOnArray(数组名, 总数, 平均周期, 均线偏移, 平均模式, 位置)这也与 iMA函数差不多,不过数据源变为数组从数组中不但可以求得移动平均值,还可以求得 RSI等指标值4、求自定义指标的值我们经常自己编一些自定义指标,可用 iCustom函数来取得自定义函数的值iCustom(商品名,K 线周期,自定义指标名称,自定义指标参数 1,参数 2,参数 3,自定义指标线编号,位置)如果自定义指标只

20、有一根指标线,则自定义指标线的编号为 0。如果自定义指标有多根指标线,则第一条自定义指标线的编号为 0,第二条为1,第三条为 2。例如:iCustom(NULL,0,“mymacd“,12,26,9,2,0) (12,26,9)为自定义指标mymacd的三个参数表示:求当前图表中,自定义指标 mymacd(12,26,9)的第 3条指标线在最新位置的值抛砖引玉,这里只是有代表性地列了几个函数,详细请查阅MT4 编程手册MT4编程入门 7:判断语句一、if 语句if语句很常用,也比较简单。规则:如果小括号中的条件成立,则执行大括号中的语句;如果不成立,则跳过大括号。例如:if(a=1)b=c+1

21、;我们在编写报警指标的时候,就经常用到这一语句:如果“价格向上达到指定价位”,则“报警”如果“MACD 上穿”,则“报警”如果“均线金叉”,则“报警”。等等例:int mark=0;if( High1=1.0000 mark=1;if( Low11.0000 mark = 2;return(0);+-部分语句说明:#property indicator_chart_window此句是把程序放在主图,当然这此例中放在副图也一样extern int 定义一个外部参数变量,整数型,允许外部值修改int 定义一个整数型变量int start() 定义触发函数if() 判断iHigh() 最高价值函数i

22、Low() 最低价值函数iMA() 移动平均线值函数Alert() 报警函数Symbol() 商品名称函数设立一个自定义变量,允许外部值修改,整数形,变量名为“警戒均线“,默认值 20int mark=0;设立一个自定义变量,整数型,变量名为 mark,并赋初值 0此变量在后面用于记录是否报警,设计是这样的:如果 mark=0,则从未报过警如果 mark=1,则已经向上报过警如果 mark=2,则已经向下报过警int start()设立触发函数 start。start 为系统规定函数名,函数内容自定义。当数据变动时,start 函数被触发if( iHigh(0,0,0) = iMA(0,0,警

23、戒均线,0,MODE_SMA,PRICE_CLOSE,0)mark = 2;return(0);start函数结束语句,返回零值MT4编程实例:箭头符号符号是一种断断续续的指标线。在指标线有值区域,指标线显示;在指标线无值区域,指标线隐藏。例如下图:当价格上穿、下穿均线时,均线上出现一个标记符号。 原理也很简单:在上图中,存在二条指标线,一条是均线,另一条是笑脸符号线。均线在任何位置都有值,所以均线是一条连续的曲线;当价格上、下穿均线时,符号线被赋予了均线值;而在其他位置上,符号线被赋了空值。所以只是在价格上、下穿均线的位置上,符号线才有值,才能出现笑脸符号。因为符号线只是个别位置有值,所以符

24、号线仅在个别位置显现。符号也正好落在均线上,因为符号线值=均线值。如果符号线被赋了别的值,例如(符号线=均线+10 点),那么符号水平坐标不变,垂直坐标将是均线上方的10点位置。源码如下:/=#property indicator_chart_window#property indicator_buffers 1 #property indicator_color1 Yellowextern int 均线=10;double mk;double temp0,temp1;int init()IndicatorBuffers(1); SetIndexBuffer(0,mk);SetIndexSty

25、le(0,DRAW_ARROW);SetIndexArrow(0,204);IndicatorDigits(Digits);return(0);int start()int limit;int counted_bars=IndicatorCounted();if(counted_bars0) counted_bars-;limit=Bars-counted_bars-均线;for(int i=0; itemp0 return(0);/源码到此已结束=语句简要解释如下:=#property indicator_chart_window指标放在主图#property indicator_buffe

26、rs 1 设置指标线数为 1条#property indicator_color1 Yellow设置第一条指标线颜色为黄色extern int 均线=10;设立一个自定义变量,允许外部值修改,整数形,变量名为“均线“,默认值 10double mk;设立一个自定义数组,双精度型double temp0,temp1;设立二个自定义变量,双精度型,变量名为 temp0、temp1int init()设立初始化函数 init。init 为系统规定函数名,函数内容自定义。该函数在指标被加载时仅运行一次 IndicatorBuffers(1);指标线数量为 1条SetIndexBuffer(0,mk);第一条指标线的数组为 mkSetIndexStyle(0,DRAW_ARROW);第一条指标线的线型为箭头符号SetIndexArrow(0,204);第一条指标线的箭头符号为第 204种符号,如果换一个编号,那出现的就是另一种符号。箭头符号的编码详见MT4 编程参考IndicatorDigits(Digits);设置指标线的小数位数Digits=当前汇率的小数位数,如日元叉盘 Digits=2,其他币对 Digits=4return(0);函数结束,返回零值int start()设立触发函数 start。start 为系统规定函数名,函数内容自定义。当数据变动时,start 函数被触发

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报