设立一个自定义变量国外客户版权证实:本文档由用户供给并上传,收益归属实质供给方,若实质生计侵权,请实行举报或认领
1、MT4 编程初学(MT4 目标编程初学)编程初学1:MT4自界说目标的存在目次、目标编缉一、MT4自界说目标保生计C:Program FilesMetaTrader 4expertsi ndicators这个目次中,In该目次中关键有二品种型的文献,一种是mq4文献,这是MT4自界说目标的源码文献,是一种高级讲话文献, 可能 人工编写窜改,呆板不行直接奉行,但能正在MT4启动时主动编译为ex4可奉行文 件。另一种即是ex4文献,这是MT4自界说目标的可奉行文献,由mq4文献编译取得。mq4文献必需编译为ex4文献才气被MT4奉行。但ex4文献是呆板码文献,人工不成窜改其它又有一个文献是mqlca
3、动把此目次中的mq4文献编译为ex4文献、下载存在mq4文献、ex4文献 正在论坛上咱们常常看到有mq4文献、ex4文献可供下载,咱们只须把它们存在到C:Program FilesMetaTrader 4expertsi ndicators这个目次,也即是下面这个目次中,就可能了。假若下载的是ex4文献,那可能直接挪用;假若是mq4文献,则需求重启动MT4让体例主动编译天生ex4可奉行文献。假若下载的是rar、zip等类型的压缩文献,还必需下载后解压到此目次才气应用。另存为三、将源码存在为源码文献正在论坛上,咱们也常常能看到目标源码贴正在网页上,但没有mq4 ex4等文献可 以下载,只可复造源码。此
5、ri竺HLT- 1废止454004: MetaTrader - GBPUSD, Hl I外洋I窗口地)匡帮堪鑫选项迪)Ctrl+0GBPUSCMH1 2.0137 2,0144 2HO13) )2,0135MQ讲话編辑器电)F4总史书数据中央00 F2A整体变量00F3立件电)显示电)i I貉I丨卧2、正在MQ言编辑器中新修一个文献,文献名必定要输,其余敷衍操作都不要紧。智能往还创作贅能往还体例O客尸目标O 剧本O 材料O包括(*MQH)O从模板天生任选一个,都可能接续,按下一步接待降临智能往还高手MQL谙遴选您思创逹的智能往还创作豎麺聲目标名称必定李输Copyright裡00:别 白勺不管So
8、心二+i竺HLT- 1存在后,再点一下编写。到此,源码存在完毕。当然,咱们也又有另的举措:可能掀开一个原已生计的mq4文献,然后另存为你需求的文献名,再删除文献中 的整个实质成为空文献,把网页上的源贴到文献中存在即可也可能正在记事本中新修一个文献, 把网页上的源码贴进记事本,然后取个文献名存在到上面提到的目次,不外文献后缀必需输入mq4存在类型遴选“以是文献”四、mt4序次挪用自界说目标 这非凡简便另存为冈保生计d):I Acceler! AccunulltiM : 、Alli gat V.j) )ATB.m14y l Awom&. mq门Eands. m*4,_) iiidi cate
9、rs兹桌面i我的立档d我的电脑当地St盘(CO二)Pregram Tilts _2)MttaTrader斗 口expertsUACD. mq4Qmq4Q M oviage s存在目次、不要搞错人立件名: 存在类型辽): 瑕消0454Q04: KetaTrader - GBPUSDjHl思立件 显示电)插入(!)图外 器械)备MT4编程初学2:自界说变量MT4 编程初学 3:自界说变量一、自界说变量正在应用前,必需先创修(界说),设定变量的类型和名称。 创修时可同时赋值,也可能不赋值。名称可能应用中文字符。例:int mark;创修一个整型变量,变量名为“mark”。bool是否报警=true;创
10、修一个逻辑型变量,变量名为“是否报警”,同时,赋初值“true”二、类型和类型界说词自界说变量的根本类型有:1、整形(int):即是整数,蕴涵负整数2、双精度小数(double):可能简便地意会为带小数位的数3、 字符串型(string)。4、逻辑型(bool):其值永别为“true、false”,即“线线假)。类型界说词仅正在创修变量时应用,后面应用变量时,就不行再加类型界说词了三、附加变量附加变量即是正在序次参加应用后, 变量值应承用户自正在更改的变量, 寻常用作程 序参数。寻常目标,比方MACD(12,26,9)参数输入即是通过附加变量告终,(12,26,9
11、)分 别为三个附加变量的默认值。界说附加变量只需正在变量界说语句前加“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; return(temp);一、和自界说变量雷同,自界说函数正在应用前,也必需先设立,以界说其类型、 名称、参数和运算语句。函数类型、名称、参数位于函数头部(参数间以逗号分
12、隔), 大括号中的是运算语句,也即是函数体局部。return语句为函数下场语句,return后面括号中的值为函数返回值,即函数运 算结果。上例中,int为函数类型,显露该函数的返回值(运算结果)是整数;(x,y)为参数,因为自界说变量应用之前都必需先创修,以是要加上类型界说词intft为函数名,有了函数名,咱们就可能正在别处用ft(2,1)的样子来挪用此函数; 函数体局部有三句:第一句,界说一个整形变量temp第二句,准备temp的值 第三句,函数下场,返回挪用点,以temp的值行动本函数返回值。 此函数也可能简写为:int ft(int x,int y)return(3*x+2*y);二、函数
13、类型与类型符函数类型即是函数返回值(运算结果)的类型,与自界说变量类型差不众 有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,又有一种函数是以函数运转为主意,运转下场后不需求返回值也没有返回值的,则函数类型可能写成void(无值型)三、函数中假若界说了自界说变量, 那么此变量仅正在本函数内部生计, 函数运转 下场时,自界说变量也就主动刊出。上例中,有x、y、temp三个自界说变量,正在函数运转时创修,正在函数运转下场 时主动磨灭,仅正在函数内部有用,与函数外部无闭。四、函数的挪用 函数挪用非凡简便,只须函数名确切、参数个数同等、类型沟通就能确切挪用 如咱们前
14、面创修了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个数值。二、自界说数组也必需“先设立修设,后应用” 创修(界说)时,必需设定类型和名称。创修(界说)时,数组的元素个数也可能设定,也可能不设定 数组中第一个元素的编号为0,第二个为1,以此类推。编
15、号应用方括号括起来 正在这上例中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,2,3;创修数组ee,设定命组元素为9个,但只给前4个元素赋初值三、数组应用时的赋值数组的赋值必需指定真切的赋值对象, 除了新修数组时可能批量赋值外, 数组元 素必需一个一个赋值比方:dd2=1;这是
16、对数组dd的第3个元素dd2(0是第1个,2显露第3个)从头赋值 为1正在这里,没有整数型变量界说符int,云云,数组dd原有三个值9,8,7就变为9,8,1四、数组的援用 数组只是一系列变量的鸠集,以是每次只可应用数组中的一个元素。 数组的援用必需指定真切的援用对象, 一次只可援用一个。 假若需求应用整列数 组,则必需逐一应用。比方:数组aa4的值为4,3,2,1咱们用aai来援用数组aa中的值 当i=0时,aai的值为4当i=1时,aai的值为3当i=2时,aai的值为2当i=3时,aai的值为1云云,咱们正在管理数列的时间,应用数组就能带来极大的便当MT4 编程初学 6:商场数据取值一、预订
17、义数组(MT4曾经界说好的,可能直接应用) 开盘价、最高价、最低价、收盘价、成交量等史书数据,每根K线烛炬都各有一个,以是必需用数组来处分题目,MT4有几个预订义数组:开盘价Open、最高价High、最低价Low、收盘价close、成交量Volume、 所属时代Time类型为双精度double型(即准确小数) 这里有一个位子的题目,右边第一根K线烛炬(即最新的烛炬)的编号为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线烛炬的开盘价、最高价、 最低价、收盘价戒备:这些是数组,用的是方括号 二、预订义变量买入价、卖出价是实市价格,double双精度Openi、Highi、Lowi、closei价、最低价、收盘价 以此类推。,显露第i+1根K线烛炬的开盘价、最咼MT4用预订义变量Ask和Bid显露,数值类型为又有少少预订义变量,如:Bars显露图外中的烛炬数,类型为int整数型Digits显露今朝钱币对的小数位,类型为i
23、D_H1,i)的收盘价iHigh(NULL,0,0)周期,用正在谁即是谁,用正在哪即是哪例2:iMA(NULL,0,20,0,MODE_EMA,PRICE_CLOSE,2)显露:正在今朝商品、今朝K线周期图外上,以收盘价准备的,20(天)指数挪动平 均线根K线所对应位子的值 其他如MAC目标、威廉目标、RSI、SAR布林线等目标取值都与挪动均匀线、正在数组中求元素的挪动均匀值。双精度double型iMAOnArray(数组名,总数,均匀周期,均线偏移,均匀形式,位子)这也与iMA函数差不众,不外数据源变为数组从数组中不只可能求得挪动均匀值,还可能求得RSI等目标值4、求自界说目标的值
24、 咱们常常我方编少少自界说目标,可用iCustom函数来博得自界说函数的值iCustom(商品名,K线周期,自界说目标名称,自界说目标参数1,参数2,参数3,自界说目标线编号,位子)假若自界说目标惟有一根目标线,则自界说目标线。假若自界说目标有众根目标线, 则第一条自界说目标线。 。 。比方:iCustom(NULL,0,mymacd,12,26,9,2,0)(12,26,9)为自界说目标mymacc的 三个参数显露:求今朝图外中,自界说目标mymacd(12,26,9)的第3条目标线正在最新位子 的值掷砖引玉,这里只是有代外性地列了几个函数,细致请
25、查阅MT4编程手册MT4 编程初学 7:推断语句一、if语句if语句很常用,也对比简便。端正:假若小括号中的条款创修,则奉行大括号中的语句;假若不创修,则跳过 大括号。比方:if(a=1) b=c+1;咱们正在编写报警目标的时间,就常常用到这一语句:假若“价值向上抵达指订价位”,则“报警”假若“MACDt穿”,贝报警” 假若“均线金叉”,则“报警”。等等 例:int mark=0;if( High1=1.0000 & mark!=1)Alert(symbol(),价值向上触及1.0000); mark=1;if( Low11.0000 & Low0=1.0000 & ma
26、rk!=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时,证实曾经下穿报过警了,不行
27、再下穿报警了,但仍可上穿报警 二、if . else语句规贝:假若小括号中的条款创修,贝奉行if下大括号中的语句1;假若不创修, 贝奉行else下大括号中的语句2。if(条款)语句1;else语句2;三、戒备事项1、惟有语句后面才用到语句下场符“;” 条款、大、小括号后面都不必“;2、语句用大括号括起来,但假若惟有一行语句,则大括号可能省略if(条款)语句1;MT4 编程初学&轮回一幅K线图有几千上万条K线,每根K线又各有开收盘价、最坎坷价等数值,而 且又有良众挪动均匀线、MAC、D RSI等目标值。面临海量数据,咱们必需用轮回来告终数据的取值和赋值。一、while轮回while(条款
28、)语句1语句20 0 0端正:当小括号中的条款创修时, 就奉行大括号中的语句, 奉行完了再推断条款 是否创修,假若条款创修就接续奉行大括号中的语句。只须条款创修, 序次就继续地运转大括号中的语句(轮回体),直到小括号中的条 件不再创修时下场轮回。它与if语句的区别是:if语句是当条款为真时运转一次;而while语句则是只 要条款为真,轮回体语句就继续地运转,直到条款为假时下场轮回。例:extern int疾线;extern int慢线;double buffer;int i=0;while(i1000) bufferi= iMA(NULL,0,疾线,MODE_EMA,PRICE
29、_CLOSE,i)-iMA(NULL,0,慢线,MODE_EMA,PRICE_CLOSE,i);这里, 轮回奉行条款是i1000, 轮回体中有两个语句, 一句是把两条均线的差 值赋给数组buffer,另一句“i+;”是每运转一次,i的值正在原有根底上增添1。 云云,跟着轮回的连接运转,i的值渐渐增添,轮回1000次后,i的值也就从0变为1000,此时“i1000”就不再创修,轮回下场。云云,数组buffer中也 就有了1000个值。二、for轮回for轮回与while轮回正在道理上是同等的,只是书写式子上有所区别 把上面的例子改成for语句:extern int疾线;extern int
33、tor_level10.00正在0.00值位子横划1条虚线 二、参数、变量和数组的界说整体性的参数、变量、数组正在此界说,部分变量可正在start()函数中界说 三、初始化函数init()init()正在自界说目标加载时运转一次。初始化函数的效力是“设备”。 假若自界说目标需求划线, 则必定用到此函数 四、 主函数start()当数据有转化时,start()就被触发。数据转化一次,start()就运转一次 自界说目标的编程关键仰赖此函数实行。start()函数的影响主若是取值和给目标线赋值,报警也正在此函数内提议。其它,又有一个反初始化函数deinit()deinit()正在自界说卸载时运转一次,可用以去
34、除目标加载时init()所做的初始 化操作。MT4 编程初学 10:画一条目标线要画目标线,只须正在序次中写明以下几点就可能了: 第一、真切目标线住址窗口,是主图如故副图 第二、要设立修设数组,用以存在目标线正在各个位子的值。 第三、要设立修设目标线与数组的对应干系,哪个数组对应哪条目标线 第四、要真切目标线的线型,是弧线如故柱线或者是箭头 第五、假若目标线是箭头,还要证实是哪种箭头 第六、给数组赋值个中:第一、二条写正在文献头部中,第三、四、五条写正在init()函数中(init函数仅正在目标加载时运转一次)第六条写正在start()函数中(start函数正在数据策动转化时运转,转化一次运转 一次)下面以MAC为
39、fer(0,buf);设备数组buf为第一条目标线SetIndexStyle(0,DRAW_LINE);设备第一条目标线线型为连结弧线);函数下场语句int start()目标触发函数。与init函数分别,该函数正在稀有据转变时被触发,假若数据被 连接更新,则该函数将连接奉行。start也是体例默认的函数名,但应用时也仍 然需求实行创设,以是也要加界说符intint limit=Bars-IndicatorCounted();自界说一个变量limit,并赋值Bars是图外中的柱数IndicatorCounted()缓存中的柱数,即是曾经准备过的有值的柱数云云limit的值即是未经
41、mbol(),向下触及,警惕均线,均线);+-局部语句证实:#property indicator_chart_window此句是把序次放正在主图,当然这此例中放正在副图也雷同界说一个外部参数变量,整数型,应承外部值窜改界说一个整数型变量界说触发函数推断最高代价函数最低代价函数挪动均匀线值函数报警函数商品名称函数逻辑运算符“而且”逻辑运算符“不等于”简便挪动均匀形式PRICE_CLOSE以收盘价准备 再说一下自界说变量mark的影响:mark的初值是0,当上穿报警时给mark赋值1,当下穿报警时给mark赋值2云云当mark的值为1时,证实曾经对上穿报过警了
42、,就不行再次对上穿报警; 当mark的值为2时,证实曾经对下穿报过警了,就不行再次对下穿报警。 云云就起到了扫除反复报警的影响。语句扼要讲明如下:#property indicator_chart_window目标放正在主图extern int警惕均线;设立一个自界说变量,应承外部值窜改,整数形,变量名为警惕均线;设立一个自界说变量,整数型,变量名为mark,并赋初值0此变量正在后面用于纪录是否报警,策画是云云的:extern int intint start() if()iHigh() iLow()iMA() Alert()Symbol()& !=
44、件才创修第一个条款:最高价大等于均线。iHigh是烛柱最高价取值函数,iMA是均线取值函数第二个条款:前一烛柱最高价小于均线第三个条款:mark不等于1。假若mark不等于1,就证实目标没有 对上穿报过警Alert(Symbol(),向上触及30均线;花括中为条款奉行语句。Alert是报警句句,Symbol()是 商品名称取值函数报警句句奉行后,给mark赋值1,云云就纪录了曾经向上 报过警了if(iLow(0,0,0) iMA(0,0,警惕均线,MODE_SMA,PRICE_CLOSE,1)& mark != 2)Alert(Symbol(),向下触及,警惕
45、均线,均线);return(O);mark = 2;start函数下场语句,返回零值MT4 编程实例:箭头符号符号是一种断断续续的目标线。正在目标线有值区域,目标线显示;正在目标线无值区域,目标线规避。比方下图:当价值上穿、下穿均线时,均线上映现一个记号 符号。价值上、下穿均线时,.映现记号符号道理也很简便:正在上图中,生计二条目标线,一条是均线,另一条是乐容符 号线。均线正在任何位子都有值,以是均线是一条连结的弧线; 当价值上、下穿均线时,符号线被授予了均线值;而正在其他位子上,符号线被赋 了空值。以是只是正在价值上、下穿均线的位子上,符号线才有值,才气映现乐容 符号。由于符号线只是个人位子有值,以是符
51、rs-counted_bars-均线;这是给limit赋值Bars为图外中的柱数counted_bars为曾经赋值的柱数云云limit的结果即是未赋值的烛柱数 再减去“均线”是由于图外最右边段均线偶然义for(int i=0; ilimit; i+)轮回语句,括号中有三个语句: 第一句int i=0;显露轮回从i=0起先第二句itempO & Closei+1temp1) mki=tempO;条款推断语句。假若正在i位子上价值大于均线)位子 上价值小于均线(即价值上穿均线),则给数组mg i位子上赋该位子的均线值Closei:正在i位子上收盘价。&:逻辑运算符“而且
58、ed_bars值大于零,则counted_bars值减掉1。这是为了配合 下一句,以避免limit相差1而失足limit=Bars-counted_bars;给limit赋值Bars为图外中的柱数counted_bars为曾经赋值的柱数 云云limit的值即是未赋值的烛柱数 云云做的主意是避免反复运算,优化序次for(int i=0; ilimit; i+)轮回语句,括号中有三个语句:第一句int i=0;显露轮回从i=0起先第二句ilimit;这是轮回的条款,假若条款满意则奉行大括号中的轮回 体,假若条款不满意,则中止轮回,跳到大括号下面的语句奉行 第三句i+,这是轮回步伐限造语句,每轮回一
59、次后奉行一次此语句。i+相当于i=i+1,即i值正在原稀有值上增添1ind_bufferi=iRSI(商品,0,RSI,PRICE_CLOSE,i);此语句为轮回体,因为惟有一个语句,以是省略花括号i为图外烛柱的序号, 从0起先,右边第1柱序号为0,从右向左递 增iRSI为RSI目标的取值函数return(0);start函数下场MT4 编程实例:会变色的均线面这个是示妄思:号收盘价上穿均线时,均线为红邑 为收盘价下第均线.W均线会变色,看起来很诡秘,但道理实在很简便: 这里现实上有两条均线,一条红线,一条绿线:当价值正在均线上方时,红线显示,绿线规避; 当价值正在均线、,绿线显示, 以是看起来就只是一条会变色的均线。要规避一条目标线中的个中一段, 也很简便,只须把这一段目标线的值赋为空值(EMPTY_VALU蹴行了。说说容易,但现实操作的时间,咱们又碰到了一个小题目,那即是红绿转换点的 “断点”题目,红线和绿线不连结了。图:红绿均线转换时.岀现断点这个题目委实困扰了我好一阵,厥后毕竟思通了。素来,画线的条款是:前后两个时点上都必需有值,才气画出线之间应当画上红线点位上,红线的值为空,以是,红线画不出来。要让红线之 间才气映现红线号位,红线、都有值, 两条线就连结了为了做到这一点,咱们正在给目标线、正在i时点上,除了给i时点赋值,同时还要给i+1时点赋同色值(以上图 为例:咱们正在给3时点赋绿线时点赋绿线时点赋红线点赋红线时点上就既有红线、赋值的依序为从左向右,即递减轮回,以避免前一操作所赋的值被清空。云云咱们的主意就抵达了。F面这是通过测试的源代码#property indicator_chart_window#property indicator_buffers 242 1 0#property indicator_color1 Red#pro
65、r_color2 Green设备第一条目标线颜色值为Red,第二条颜色值为Greenextern int变色均线;设立一个自界说变量,应承外部值窜改,整数形,变量名为变色均线 double duo;设立一个自界说数组,双精度型,名称为duo该数组正在后面用于存储红线数据double kong;设立一个自界说数组,双精度型,名称为kong该数组正在后面用于存储绿线数据int init()设立初始化函数init。init为体例轨则函数名,函数实质自界说。该函数正在指 标被加载时运转一次SetIndexBuffer(0,duo);SetIndexBuffer(1,kong);设备第一、二
1. 本站整个资源如无独特证实,都需求当地电脑安设OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文献请下载最新的WinRAR软件解压。
2. 本站的文档不包括任何第三方供给的附件图纸等,假若需求附件,请闭联上传者。文献的整个权力归上传用户整个。
3. 本站RAR压缩包中若带图纸,网页实质内里会有图纸预览,若没有图纸预览就没有图纸。
5. 人人文库网仅供给消息存储空间,仅对用户上传实质的体现办法做爱惜管理,对用户上传分享的文档实质自己不做任何窜改或编辑,并不行对任何下载实质掌管。
7. 本站不保障下载资源的正确性、安定性和完善性, 同时也不承当用户因应用这些下载资源对我方和他人变成任何样子的侵犯或亏损。
2024-2030年中邦石材提取器行业商场开展趋向与前景瞻望战术领悟讲演
2024-2030年中邦真空终端奉行器行业商场开展趋向与前景瞻望战术领悟讲演
2024-2030年中邦直流驱动器行业产能产量预测领悟及投资战术讨论讲演
2024-2030年中邦癸二酸及其衍生物行业商场开展趋向与前景瞻望战术领悟讲演
FXCG 相关资讯