您现在的位置是:主页 > MT4平台下载 >

四、函数的调用函数调用非常简单Tuesday,January9

2024-01-09 10:19MT4平台下载 人已围观

简介四、函数的调用 函数调用非常简单Tuesday, January 9, 2024 版权注脚:本文档由用户供应并上传,收益归属实质供应方,若实质生计侵权,请实行举报或认领 1、MT4 编程初学(MT4 目标编程初...

  四、函数的调用 函数调用非常简单Tuesday, January 9, 2024版权注脚:本文档由用户供应并上传,收益归属实质供应方,若实质生计侵权,请实行举报或认领

  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. 本站不保障下载资源的精确性、安好性和完美性, 同时也不经受用户因操纵这些下载资源对我方和他人酿成任何表面的破坏或亏损。

Tags: mt4私人帐户  mt5平台  mt4平台搭建 

广告位
    广告位
    广告位

站点信息

  • 文章统计29341篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们