版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如何将技术指标转化为智能交易系统(EA)时间:2011-02-2211:17:12来源:作者:第一部分:指标为了能赚钱而不是亏损,无论是专业的交易商还是个体,都在研究各和总结各种种的规律,并做成指标,我们经常会发现一些指标图线看起来很完美,于是都会想到要根据指标的变化进行交易。但这样做会赚钱吗?能否赚钱,我们就要看这些指标有没有作弊。即确定指标是否有未来函数的计算,也就是说指标会不会根据现在的K线,计算后将指标在历史K线上标示做更改。比如原来是卖的提示,改为买(恐怖吧)。(当然还有一些EA特有的环节也会影响盈利问题,在这里不讲)确定是否有未来函数的方法有两种:1 .白盒校验(即查看源码)直接看
2、源码中的循环部分,如果有修改历史曲线数组的行为,则可以立刻断定有未来函数。2 .黑盒观察当没有源码的时候,可以将指标加载到1分钟的图线上,连续不断观察其标示的变化,尤其注意与当前K线状态最接近的历史K线标示的变化。如果随着当前K线的变化出现过历史变化更改,则也可以确定有未来函数。指标EA化之前必须要确认的事情:如果一个指标含有未来函数,那么这个指标是没有多大意义的。也就是说,我们要将指标改为EA前,必须确认这个指标是不含未来函数的,这样指标EA化才有意义。第二部分指标EA化接下来将指标EA化大致的做法是:在EA中通过函数iCustom读取这个指标的当前K线输出值,得出当前的状态,来决定是否入场
3、或者平仓并反向入场。iCustom的具体用法:指标一般都是曲线或者箭头两种。在这里我们要把曲线和箭头都看成是数组就容易理解了。对于指标来说每一条曲线或者箭头都是写在与每个K线对应的数组中的,也就是说一条曲线对应一个数组,一个方向的箭头也是对应一个数组(有箭头的数组值是当时的价格,没箭头地方的数组值是空”)iCustomMT4的帮助里说的是:计算指定的客户指标并且退回它的值”,即这个函数可以让你获取指定指标的第几个数组对应第几根K线上的计算数值。具体如下:doubleiCustom(stringsymbol,inttimeframe,stringname,.,intmode,intshift)计
4、算指定的客户指标并且退回它的值。必须在terminal_directoryexpertsindicators目录内编写客户指标(*.EX4文件)。分事参事:symbol-计算指标数据上的货币对名称。NULL表示当前货币对。timeframe-时间周期。可以时间周期列举任意值。0表示当前图表的时间周期。name-客户指标完整的程序名称。.-参量设置(如果需要)。通过的参量和他们的顺序必须与desclaration命令和客户指标的外部可变物的种类对应。mode-索引行。从0到7并且必须对应以其中一个使用的索引的SetIndexBuffer函数。shift-从显示缓冲采取的值的索引(转移相对当前柱特
5、定相当数量期间前)。示例:doubleval=iCustom(NULL,0,"示例Ind”,13,1,0);doubleva2=iCustom(NULL,0,"示例Ind",13,0,1);例如:一个指标,画了两条曲线,则可以用iCustom取得这个指标在第4根K线上对应的第一条曲线的数值。我们现在已经可以根据自己的想法去获得一个指定指标的任何K线上的状态数值了。那么下一步我们就要开始EA的概念。因为EA只针对当前价格状态下的动作进行控制。所以一般而言我们就取指定指标在当前K线下的计算数值用于EA的条件判断。如果你认为当前K线没有结束,其数值始终在变化,有可能一会
6、有讯号一会没讯号,那麽你可以采用取前一K线的指标数值的方式作为基础。(如果用当前K线指标数值作为条件会有不确定的结果,但如果用前一K线数值做条件则有错过最佳入场点”的问题。这是需要程序设计者权衡的问题。)另外的一个问题,就是怎末去判断指标输出的数值与我们肉眼看到的讯号一致起来的问题。如果参考的指标是一种变色线,则一定是一种颜色一个数组的方式叠加起来显示的。我们在取其数值的时候只需要看看不同颜色的数组的数值比较一下就知道其结果是哪种颜色,并作为EA的条件进行动作就行了。如果是箭头的方式,则一样是去取其数值,无箭头的K线上指标对应的数值是空”,有箭头的地方数组对应的数值肯定不是空。用这个来判断是否
7、发生了讯号就行了。比如双色线,就一定是两个数组分别显示不同颜色,当指标认为应该显示其中一种颜色的时候就将这个颜色对应的数组在当前K线中的数值设成当前价。反之则设为空”。这样循环一遍后,你肉眼看到的就是变色线了。现在我们可以轻松获得指标的当前讯号状态了!下一步就是结合进EA中,就是把指标中的数组值拿过来。第三部分EA编程逻辑EA就是一个循环往复的过程。每来一个价格就运行一次。EA是电脑,并不知道你现在的仓位情况也不知道指标的情况,除了计算什么都不知道,一切都是编程者赋予的。因此,编程者脑子里一定要建立一种综合状态的概念。EA的一开始一定要先进行仓位的情况检查。大致的逻辑如下:1 .先查出持仓情况
8、和持仓单的方向。2 .然后获得指标的数值。3 .判断并操作。如果发生则平仓并持仓状态下:根据持仓单的方向进行对应来判断反向讯号是否发生。反向入场。如果没发生则直接返回,等待下一次价格的而到来。空仓状态下:则两个方向的讯号都做判断,哪边发生了就按那边的方向入场。4 .其他的的细节不论入场还是出场都要在发出动作后马上判断是否正确执行的判断。如果没有执行成功则一定要立刻放弃后面的操作直接返回。等待下一个价格来的时候在此发出同样的动作。另外说明的是数据是自动更新的。MT4新编:简单三线交叉EA时间:2011-03-0911:29:56来源:作者:MT4编程入门教程目录MT4编程入门1MT4编程入门2M
9、T4编程入门3MT4编程入门4MT4编程入门5MT4编程入门6MT4编程入门7MT4编程入门8MT4编程入门9MT4自定义指标的基本操作指标源码中的常用符号说明自定义变量自定义函数自定义数组市场数据取值判断语句循环MT4自定义指标的结构MT4编程入门10:画一条指标线MT4编程入门11:MT4的报警MT4编程入门1:MT4自定义指标的基本操作MT4自定义指标的保存目录、指标编缉器与指标调用一、MT4自定义指标保存在C:ProgramFilesMetaTrader4expertsindicators这个目录中,该目录中主要有二种类型的文件,一种是mq4文件,这是MT4自定义指标的源码文件,是一种
10、高级语言文件,可以人工编写修改,机器不能直接执行,但能在MT4启动时自动编译为ex4可执行文件。另一种就是ex4文件,这是MT4自定义指标的可执行文件,由mq4文件编译得到。mq4文件必须编译为ex4文件才能被MT4执行。但ex4文件是机器码文件,人工不可修改另外还有一个文件是mqlcache.dat,它用来保存目录中的文件信息,如果MT4无法自动编译,只要删除此文件即可解决问题mq4文件编译为ex4可执行文件有两种方法:1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。2、用MQ语言编辑器打开mq4文件,点一下编写"按钮,即可生成ex4文件二、下载保存mq4文件、ex
11、4文件在论坛上我们经常看到有mq4文件、ex4文件可供下载,我们只要把它们保存到C:rogramFilesMetaTrader4expertsindicators这个目录,也就是下面这个目录中,就可以了。如果下载的是ex4文件,那可以直接调用;如果是mq4文件,则需要重启动MT4,让系统自动生成ex4可执行文件。如果下载的是ranzip等类型的压缩文件,还必须下载后解压到此目录下才能使用。三、将源码保存为源码文件在论坛上,我们也经常能看到指标源码贴在网页上,但没有mq4、ex4等文件可以下载,只能复制源码。此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。1
12、、打开MQ语言编辑器2、在MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。3、删除新文件里面的所有内容,成为一个空文件,4、接着我们就可以将网页上源码复制粘贴进来试着点一下编写”,如果左下角出现“错误,0警告”,那说明源码没问题,编译通过了,成功生成了ex4可执行文件5、还有很重要的一点,就是要把源码文件保存到正确的目录中保存后,再点一下编写。到此,源码保存完成。当然,我们也还有另的办法:可以打开一个原已存在的mq4文件,然后另存为你需要的文件名,再删除文件中的所有内容成为空文件,把网页上的源贴到文件中保存即可也可以在记事本中新建一个文件,把网页上的源码贴进记事本,然后取个
13、文件名保存到上面提到的目录,不过文件后缀必须输入mq4,保存类型选择所以文件”四、mt4程序调用自定义指标这非常简单MT4编程入门2:指标源码中的常用符号说明一、注释符:单行注释“/、”多行注释“/*/”程序不执行注释,注释内容仅供阅读或保留不用的语句在MQ语言编辑器中,注释内容以灰色显示二、分号”表示一个语句结束三、逗号;”表示一个语句内部间隔,不结束语句。四、等于号“=”赋值语句,把等号后面的值赋给等号前的变量中五、加号“+”整数或小数,则表示值相加;字符串,则表示前后连接。六、加加“+”表示把符号前的变量值加1,例如:“i+;”这实际上就是:"i=i+1;的简写,表示i的值加1
14、“i+=2;实际上就是“i=i+2;的简写,表示i七、加等于“+=”表示把符号后的值加到符号前的变量中。例如的值加2八、双等号“="等于号。用于逻辑判断,双等号前后值相等,则返回逻辑值真true双等号前后值不相等,则返回逻辑值假false”真true不等号前后值相九、叹号等号"!="不等于号。用于逻辑判断,不等号前后值不相等,则返回逻辑值等,则返回逻辑值假false”十、“&&逻辑符并且”十一、“|”逻辑符或者”十二、大括号“”表示函数体。内部为函数体语句。MT4编程入门3:自定义变量一、自定义变量在使用前,必须先创建(定义),设定变量的类型和名称
15、。创建时可同时赋值,也可以不赋值。名称可以使用中文字符。例:intmark;创建一个整型变量,变量名为"mark。"bool是否报警=true;创建一个逻辑型变量,变量名为是否报警”,同时,赋初值“true”二、类型和类型定义词自定义变量的基本类型有:1、整形(int):就是整数,包括负整数2、双精度小数(double):可以简单地理解为带小数位的数3、字符串型(string)。4、逻辑型(bool):其值分别为类型定义词仅在创建变量时使用,三、附加变量附加变量就是在程序投入使用后,“truefalse,"即真、假”,也可以写成“T0”(1真,0假)。后面使用变量
16、时,就不能再加类型定义词了变量值允许用户自由更改的变量,一般指标,例如MACD(12,26,9)参数输入就是通过附加变量实现,变量的默认值。定义附加变量只需在变量定义语句前加“extern”例:般用作程序参数。(12,26,9)分别为三个附加externint周期=9;创建一个整型附加变量,变量名为周期”,默认值为9,允许用户在程序外部修改参数值MT4编程入门4:自定义函数自定义函数与数学函数在本质上是一致的例如:数学函数ft(x,y)=3x+2y(x,y为正整数)写成程序语句就是:intft(intx,inty)inttemp;temp=3*x+2*y;return(temp);)一、和自定
17、义变量一样,自定义函数在使用前,也必须先设立,以定义其类型、名称、参数和运算语句。函数类型、名称、参数位于函数头部(参数间以逗号分隔),大括号中的是运算语句,也就是函数体部分。return语句为函数结束语句,return后面括号中的值为函数返回值,即函数运算结果。上例中,int为函数类型,表示该函数的返回值(运算结果)是整数;(x,y)为参数,由于自定义变量使用之前都必须先创建,所以要加上类型定义词intft为函数名,有了函数名,我们就可以在别处用ft(2,1)的形式来调用此函数;函数体部分有三句:第一句,定义一个整形变量temp第二句,计算temp的值第三句,函数结束,返回调用点,以temp
18、的值作为本函数返回值。此函数也可以简写为:intft(intx,inty)return(3*x+2*y);二、函数类型与类型符函数类型就是函数返回值(运算结果)的类型,与自定义变量类型差不多有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,还有一种函数是以函数运行为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以写成void(无值型)三、函数中如果定义了自定义变量,那么此变量仅在本函数内部存在,函数运行结束时,自定义变量也就自动注销。上例中,有x、y、temp三个自定义变量,在函数运行时创建,在函数运行结束时自动消失,仅在函数内部有效,与函数
19、外部无关。四、函数的调用函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用如我们前面创建了ft(x,y)函数,则别处我们可以用ft(4,5)等样式来调用ft(x,y)函数求值。调用时,传递参数值给ft(x,y)函数(按顺序把4传给x,把5传给y),返回结果23后继续执行主程序。MT4编程入门5:自定义数组一、数组是一系列同类型变量的集合,可以同时存储多个数值。例:intaa4=4,3,2,1;这是一个数据名为aa包含了4个元素的整数型数组(即数组长度为4),可以同时存储4个数值。二、自定义数组也必须先建立,后使用”创建(定义)时,必须设定类型和名称。创建(定义)时,数组的元素
20、个数也可以设定,也可以不设定数组中第一个元素的编号为0,第二个为1,以此类推。编号使用方括号括起来在这上例中aa0的值为4、aa1的值为3、aa2的值为2、aa3的值为1创建(定义)数组的同时,可以赋初值,也可以不赋初值。例:intbb;创建数组bb,不设定数组元素个数intcc8;创建数组cc,设定数组元素为8个,不赋初值intdd3=9,8,7);创建数组dd,设定数组元素为4个,并赋初值赋值后,dd0的值为9、dd1的值为8、dd2的值为7intee9=0,1,2,3);创建数组ee,设定数组元素为9个,但只给前4个元素赋初值三、数组使用时的赋值数组的赋值必须指定明确的赋值对象,除了新建
21、数组时可以批量赋值外,数组元素必须一个一个赋值例如:dd2=1;这是对数组dd的第3个元素dd2(0是第1个,2表示第3个)重新赋值为1在这里,没有整数型变量定义符int,这样,数组dd原有三个值9,8,7就变为9,8,1四、数组的引用数组只是一系列变量的集合,所以每次只能使用数组中的一个元素。数组的引用必须指定明确的引用对象,一次只能引用一个。如果需要使用整列数组,则必须逐个使用。例如:数组aa4的值为4,3,2,1我们用aa来引用数组aa中的值当i=0时,aai的值为4当i=1时,aai的值为3当i=2时,aai的值为2当i=3时,aai的值为1MT4编程入门6:市场数据取值一、预定义数组
22、(MT4已经定义好的,可以直接使用)K线蜡烛都各有一个,所以开盘价、最高价、最低价、收盘价、成交量等历史数据,每根必须用数组来解决问题,MT4有几个预定义数组:开盘价Open口、最高价High、最低价Low口、收盘价close口、成交量Volume口、所属时间Time口类型为双精度double型(即精确小数)这里有一个位置的问题,右边第一根K线蜡烛(即最新的蜡烛)的编号为0,第二根蜡烛编号1,第三根蜡烛编号2,Open0、Open1、盘价High0、High1、也就是说从右向左倒着数过去。Low0、Close0,表示最新的开盘价、最高价、最低价、收盘价Low1、close1,表布第2根K线蜡烛
23、的开盘价、最高价、最低价、Open2、盘价High2、Low2、close2,表布第3根K线蜡烛的开盘价、最高价、最低价、Open3、盘价High3、Low3、close3,表布第4根K线蜡烛的开盘价、最高价、最低价、最低价、收盘价Open、High、Low、close,表示第i+1根K线蜡烛的开盘价、最高价、以此类推。注意:这些是数组,用的是方括号。二、预定义变量买入价、卖出价是实时价格,MT4用预定义变量Ask和Bid表示,数值类型为double双精度还有一些预定义变量,如:Bars表示图表中的蜡火数,类型为int整数型Digits表示当前货币对的小数位,类型为int整数型,无日元币对为4
24、,有日元币对为2,黄金石油等一般也为2Point表示当前货币对的点值,类型为双精度double型,无日元币对为0.0001,有日元币对为0.01。与Digits正好相反。三、指标函数1、价格、成交量、时间它们都有三个参数:货币对名、K线周期、位置序号双精度double型双精度double型双精度double型双精度double型双精度double型日期时间datetime型开盘价:iOpen(symbol,timeframe,shift)收盘价:iClose(symbol,timeframe,shift)最高价:iHigh(symbol,timeframe,shift)最低价:iLow(sym
25、bol,timeframe,shift)成交量:iVolume(symbol,timeframe,shift)所属时间:iTime(symbol,timeframe,shift)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)例:表示美元兑日元1小时图最新K线蜡烛的开盘价表示欧元兑美元4小时图第3根K线蜡烛的收盘价表
26、示英磅兑美元1小时图第i+1根K线蜡烛的收盘价既不指定商品,也不指定K线周期,用在谁就是谁,用在哪就iOpen("USDJPY”,PERIOD_H1,0)iClose("EURUSD”,PERIOD_H4,2)iClose("GBPUSD”,PERIOD_H1,i)iHigh(NULL,0,0)是哪2、移动平均值。双精度double型iMA(symbol,timeframe,period,ma_shift,ma_method,applied_price,shift)参数共7个,分别为:商品名称、K线周期、均线周期、均线偏移、平均模式、价格种类、位置均线周期:10天
27、平均线的均线周期为10,20天均线的均线周期为20均线偏移:均线位置整体左右移动的位置偏移量平均模式:简单移动平均(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_CLOS
28、E,0)表示:欧元1小时图上,以收盘价计算的,20小时简单移动平均线,最新K线所对应位置的值例2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)表示:在当前商品、当前K线周期图表上,以U盘价计算的,20(天)指数移动平均线第3根K线所对应位置的值其他如MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似3、在数组中求元素的移动平均值。双精度double型iMAOnArray(数组名,总数,平均周期,均线偏移,平均模式,位置)这也与iMA函数差不多,不过数据源变为数组从数组中不但可以求得移动平均值,还可以求得RSI等指标值4、求自定义指
29、标的值我们经常自己编一些自定义指标,可用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条指标线在最新位置的值抛砖引玉,这里只是有代表性地列了几个函数,详细
30、请查阅MT4编程手册MT4编程入门7:判断语句一、if语句if语句很常用,也比较简单。规则:如果小括号中的条件成立,则执行大括号中的语句;如果不成立,则跳过大括号。例如:if(a=1)b=c+1;我们在编写报警指标的时候,就经常用到这一语句:如果价格向上达到指定价位",则报警”如果“MACD上穿“,则报警”如果均线金叉",则报警”。等等例:intmark=0;if(High1<1.0000&&High0>=1.0000&&mark!=1)Alert(symbol(),"价格向上触及1.0000");mark=1
31、;if(Low1>1.0000&&Low0<=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;当mark=0时,说明从未报过警,上、
32、下穿都能报警当mark=1时,说明已经上穿报过警了,不能再上穿报警了,但仍可下穿报警当mark=2时,说明已经下穿报过警了,不能再下穿报警了,但仍可上穿报警。二、if.else语句规则:如果小括号中的条件成立,则执行if下大括号中的语句1;如果不成立,则执行else下大括号中的语句2。if(条件)(语句1;)else(语句2;)三、注意事项1、只有语句后面才用到语句结束符;”条件、大、小括号后面都不用”2、语句用大括号括起来,但如果只有一行语句,则大括号可以省略if(条件)语句1;MT4编程入门8:循环一幅K线图有几千上万条K线,每根K线又各有开收盘价、最高低价等数值,而且还有很多移动平均线、
33、MACD、RSI等指标值。面对海量数据,我们必须用循环来实现数据的取值和赋值。一、while循环while(条件)(语句1语句2oOO)规则:当小括号中的条件成立时,就执行大括号中的语句,执行完了再判断条件是否成立,如果条件成立就继续执行大括号中的语句。只要条件成立,程序就不停地运行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环。它与if语句的区别是:if语句是当条件为真时运行一次;而while语句则是只要条件为真,循环体语句就不停地运行,直到条件为假时结束循环。例:externint快线=12;externint慢线=26;doublebuffer口;inti=0;while
34、(i<1000)(buffer=iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);i+;)这里,循环执行条件是i<1000,循环体中有两个语句,一句是把两条均线的差值赋给数组buffer,另一句"i+;是每运行一次,i的值在原有基础上增加1。这样,随着循环的不断运行,i的值逐渐增加,循环1000次后,i的值也就从0变为1000,此时“i<1000就不再成立,循环结束。这样,数组buffer口中也就有了1000个值。二、for循环for循环与while循环在原
35、理上是一致的,只是书写格式上有所区别把上面的例子改成for语句:externint快线=12;externint慢线=26;doublebuffer;for(inti=0;i<1000;i+)buffer=iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);)与前面相比,我们注意到:"inti=0;语句'从"while(i<1000)上方移到循环条件"i<1000的前面;“i+;语句从循环体中移到了循环条件"i<10
36、00的后面;循环执行顺序与while循环一致:第一步、先执行小括号中的第1句:inti=0;(此语句用来定义初始变量,在循环中仅执行一次,可以为没有任何表达式的空操作符;第二步、再判断小括号中的第2句是否成立:i<1000;如果不成立,则循环结束;如果成立,则循环继续运行,执行第三步第三步、按顺序执行大括号中的语句第四步、执行小括号中的第1句:i+(此语句即:每执行一次,i的值增加1)然后回到第二步继续执行循环。再补充一点:如果循环体中(大括号中)只有一行语句,大括号可以省略MT4编程入门9:MT4自定义指标的结构MT4自定义指标一般由四个部分构成:(1)文件头部(2)参数、变量和数组的
37、定义(3)初始化函数init()(4)主函数start()一、文件头部,也称为预处理程序预处理程序以“#开头,行尾无语句结束符二”常用的预处理程序有:1、#propertyindicator_chart_window把指标显示在主图。如:均线、SRA等类指标用到此语句2、#propertyindicator_separate_window把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句3、#propertyindicator_buffers3显示3根指标线4、#propertyindicator_color1Red第1根指标线的颜色为Red5、#propertyindicator
38、_width11第1根指标线的粗细分别丢16、#propertyindicator_level10.00在0.00值位置横划1条虚线二、参数、变量和数组的定义全局性的参数、变量、数组在此定义,局部变量可在start()函数中定义三、初始化函数init()init()在自定义指标加载时运行一次。初始化函数的功能是设置”。如果自定义指标需要划线,则必然用到此函数四、主函数start()当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。自定义指标的编程主要依靠此函数进行。start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。另外,还有一个反初始化函数d
39、einit()deinit()在自定义卸载时运行一次,可用以去除指标加载时init()所做的初始化操作。MT4编程入门10:画一条指标线要画指标线,只要在程序中写明以下几点就可以了:第一、明确指标线所在窗口,是主图还是副图第二、要建立数组,用以保存指标线在各个位置的值。第三、要建立指标线与数组的对应关系,哪个数组对应哪条指标线第四、要明确指标线的线型,是曲线还是柱线或者是箭头第五、如果指标线是箭头,还要说明是哪种箭头第六、给数组赋值其中:第一、二条写在文件头部中,第三、四、五条写在init()函数中(init函数仅在指标加载时运行一次)第六条写在start()函数中(start函数在数据发动变
40、动时运行,变动一次运行一次)下面以MACD为例说明我们知道,MACD指标由二条曲线和一组红绿柱线组成。(下图一)其中:白线是二根均线的差;紫线是白线的移动平均线;红绿柱线则是白线和紫线的差,白线上穿紫线,出现红柱,下穿则出现绿柱。我们从简单入手,先去除紫线和红绿柱线,仅保留其中的那根白线,来看白线是怎样画出来的。下面是全部语句:#propertyindicator_separate_window#propertyindicator_color1White#propertyindicator_level10externintFMA=12;externintSMA=26;doublebuf口;in
41、tinit()SetIndexBuffer(0,buf);SetIndexStyle(0,DRAW_LINE);return(0);intstart()intlimit=Bars-IndicatorCounted();for(inti=0;i<limit;i+)buf=iMA(NULL,0,FMA,0,1,0,i)-iMA(NULL,0,SMA,0,1,0,i);)return(0);)说明如下:以下为上述语句的简要说明#propertyindicator_separate_window指标放在副图#propertyindicator_color1White第一条指标线为白色#prope
42、rtyindicator_level10在副图中零值位置上画一条水平横线,externintFMA=12;externintSMA=26;设立二个整数型变量,默认值为12和26,允许外部修改值doublebuf口;设立一个数组intinit()初始化函数。该函数在指标加载时只运行一次。init是系统默认的函数名,但使用时仍需要进行创设,所以要加定义符int(SetIndexBuffer(0,buf);设置数组buf为第一条指标线SetIndexStyle(0,DRAW_LINE);设置第一条指标线线型为连续曲线return(0);函数结束语句intstart()指标触发函数。与init函数不同
43、,该函数在有数据变化时被触发,如果数据被不断更新,则该函数将不断执行。start也是系统默认的函数名,但使用时也仍然需要进行创设,所以也要加定义符int(intlimit=Bars-IndicatorCounted();自定义一个变量limit,并赋值Bars是图表中的柱数IndicatorCounted()缓存中的柱数,就是已经计算过的有值的柱数这样limit的值就是未经计算的柱数,这样就可以起到优化程序的作用。for(inti=0;i<limit;i+)循环语句。循环从i=0开始,每循环一次i值增加1,一直循环到i<limit不满足时结束循环由于循环变量i为一个新变量,所以要先定义,加上整型变量定义符int下面大括中为循环体,此例中只一条语句(buf=iMA(NULL,0,FMA,0,1,0,i)-iMA(NULL,0,SMA,0,1,0,i);给数组buf赋值,其值分别为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年江西省赣州市上犹大余崇义三县高一10月月考语文试题(解析版)
- 2025-2026年海洋生态保护与海洋环境保护模拟试卷
- 2025-2026年人力资源管理师考试专项训练题库
- 2025-2026年广东省苏教版九年级语文上册第8单元现代文阅读测试卷
- 2026年青少年演讲与口才训练课件
- 电子商务求职个人自我介绍
- 伟诚员工职业生涯规划管理制度最终版样本
- 2026年事业单位招聘考试人力资源管理与实务培训试卷
- 外汇专员业务知识考试题集及答案
- 危化品储存与运输安全考核试卷及答案
- EN IEC 62477-1-2024 中文版(欧盟光伏储能变流器并网安全限值规范)深度解析
- 2026年新教科版科学三年级上册第3课时 测量气温同步练习及参考答案
- 2026年西安邮电大学西邮伦敦城大国际项目中心招聘(2人)笔试参考题库及答案详解
- 2026秋季七年级新生入学分班考试英语试卷5套(含答案解析)
- 抗感染文献阅读汇报
- 第5课 古代希腊 课件 统编版(新教材)历史九年级上册
- 失能老年人健康评估服务工作细则
- 学校食堂留样柜双人双锁工作制度
- 水厂安全保卫工作制度
- 从零开始学量价分析(短线操盘-盘口分析与A股买卖点实战)
- 2026年湖南省高职单招职业适应性测试考试题库及答案解析
评论
0/150
提交评论