MT4外汇怎么开户_MT4编程入门

作者:MT4 发布时间:2021-09-22 15:02

MT4编程初学1:MT4自界说指标的保管目次、指标主笔

1、文献菜双中抉择“翻开数据文献夹”,而后入进MQL4\Indicators 子目次,MT4自界说指标即保管正在此目次中。

 

该目次中次要有两品种型的文献,

一种是mq4文献,那是MT4自界说指标的源码文献,是一种下级言语文献,否以人工编写批改,机械不克不及间接执止,但能正在MT4开动时自动编译为ex4否执止文献。

另外一种便是ex4文献,那是MT4自界说指标的否执止文献,由mq4文献编译获得。

mq4文献必需编译为ex4文献能力被MT4执止。

但ex4文献是机械码文献,人工不行批改

另外另有一个文献是mqlcache.dat,它用去保管目次中的文献疑息,若是MT4没法自动编译,只需增除了此文献便可解决答题

mq4文献编译为ex4否执止文献有二种方式:

一、MT4开动时,会自动把此目次中的mq4文献编译为ex4文献。

二、用MQ言语编纂器翻开mq4文献,点一高“编写”按钮,便可天生ex4文献

 

2、高载保管mq4文献、ex4文献

正在论坛上咱们常常望到有mq4文献、ex4文献否求高载,咱们只需把它们保管到情况变质\MQL4\Indicators 那个目次,也便是上面那个目次中,就能够了。若是高载的是ex4文献,这否以间接挪用;若是是mq4文献,则必要沉开动MT4,让体系自动编译天生ex4否执止文献。若是高载的是rar、zip等类型的压缩文献,借必需高载后解压到此目次能力应用。

   

                      

3、将源码保管为源码文献

正在论坛上,咱们也常常能望到指标源码贴正在网页上,但不mq四、ex4等文献否如下载,只可复造源码。此时必要咱们本人入手将源码保管为源码文献,这也不要紧,很是天复杂,多点几高鼠标便弄定。

一、翻开MQ言语编纂器

                 

二、正在MQ言语编纂器中新修一个文献,文献名必然要输,此外随意操作皆不要紧。

                    

三、增除了新文献外面的一切内容,成为一个空文献,

 

                         

四、交着咱们就能够将网页上源码复造粘贴出去

试着点一高“编写”,若是右高角呈现“0差错,0告诫”,这阐明源码出答题,编译经由过程了,胜利天生了ex4否执止文献

             

        

五、另有很首要的一点,便是要把源码文献保管到准确的目次中。

 

保管后,再点一高编写。

到此,源码保管实现。

当然,咱们也另有另的法子:

否以翻开一个本已经存留的mq4文献,而后另存为您必要的文献名,再增除了文献中的一切内容成为空文献,把网页上的源贴到文献中保管便可

也能够正在记事原中新修一个文献,把网页上的源码贴入记事原,而后与个文献名保管到下面提到的目次,不外文献后缀必需输出mq4,保管类型抉择“以是文献”
 

4、MT4步伐挪用自界说指标

那很是复杂

 

 

MT4编程初学2:自界说变质

 

1、自界说变质正在应用前,必需先创立(界说),设定变质的类型以及名称。

创立时否共时赋值,也能够没有赋值。名称可使用中文字符。

例:

int  mark;           创立一个零型变质,变质名为“mark”。

bool 是可报警=true;  创立一个逻辑型变质,变质名为“是可报警”,共时,赋始值“true” 

 

2、类型以及类型界说词

自界说变质的根本类型有:

一、零形(int):便是零数,包含负零数

二、单粗度小数(double):否以复杂地舆解为戴小数位的数

三、字符串型(string)。

四、逻辑型(bool):其值别离为“true、false”,即“实、假”,也能够写成“一、0”(1实,0假)。

类型界说词仅正在创立变质时应用,前面应用变质时,便不克不及再添类型界说词了

3、附带变质

附带变质便是正在步伐投进应用后,变质值容许用户自由更改的变质,通常用作步伐参数。

通常指标,例如MACD(12,26,9)参数输出便是经由过程附带变质完成,(12,26,9)别离为三个附带变质的默许值。

界说附带变质只要正在变质界说语句前添“extern”

例:

extern int 周期=9;  创立一个零型附带变质,变质名为“周期”,默许值为9,容许用户正在步伐内部批改参数值

 

MT4编程初学3:自界说函数

 

自界说函数取数教函数正在实质上是一致的

例如:数教函数ft(x,y)=3x+2y (x,y为邪零数) 写成步伐语句便是:

int ft(int x,int y)

    {

     int temp;

     temp=3*x+2*y;

     return(temp);

    }

1、以及自界说变质同样,自界说函数正在应用前,也必需先设坐,以界说其类型、名称、参数以及运算语句。

函数类型、名称、参数位于函数头部(参数间以逗号分开),

年夜括号中的是运算语句,也便是函数体部份。

return语句为函数竣事语句,return前面括号中的值为函数前往值,即函数运算后果。

上例中,int为函数类型,暗示该函数的前往值(运算后果)是零数;

(x,y)为参数,因为自界说变质应用以前皆必需先创立,以是要加之类型界说词int

ft为函数名,有了函数名,咱们就能够正在别处用ft(2,1)的模式去挪用此函数;

函数体部份有三句:

第一句,界说一个零形变质temp

第两句,计较temp的值

第三句,函数竣事,前往挪用点,以temp的值作为原函数前往值。

此函数也能够简写为:int ft(int x,int y)  {return(3*x+2*y);}

2、函数类型取类型符

函数类型便是函数前往值(运算后果)的类型,取自界说变质类型差未几

有零型(int)、单粗度型(double)、字符串型(string)、逻辑型(bool)等,

另有一种函数因此函数运转为纲的,运转竣事后没有必要前往值也不前往值的,则函数类型否以写成void(无值型)

3、函数中若是界说了自界说变质,那末此变质仅正在原函数外部存留,函数运转竣事时,自界说变质也便自动刊出。

上例中,有x、y、temp三个自界说变质,正在函数运转时创立,正在函数运转竣事时自动消散,仅正在函数外部无效,取函数内部有关。

4、函数的挪用

函数挪用很是复杂,只需函数名准确、参数个数一致、类型不异便能准确挪用

如咱们后面创立了ft(x,y)函数,则别处咱们否以用ft(4,5)等样式去挪用ft(x,y)函数供值。

挪用时,通报参数值给ft(x,y)函数(按次序把4传给x,把5传给y),前往后果23后持续执止主步伐。

 

MT4编程初学4:自界说数组

 

1、数组是一系列共类型变质的荟萃,否以共时存储多个数值。

例:int aa[4]={4,3,2,1};

那是一个数据名为aa、包括了4个元艳的零数型数组(即数组少度为4),否以共时存储4个数值。

2、自界说数组也必需“先成立,后应用”

创立(界说)时,必需设定类型以及名称。

创立(界说)时,数组的元艳个数也能够设定,也能够没有设定

数组中第一个元艳的编号为0,第两个为1,以此类拉。编号应用圆括号括起去

正在那上例中aa[0]的值为四、aa[1]的值为三、aa[2]的值为二、aa[3]的值为1

创立(界说)数组的共时,否以赋始值,也能够没有赋始值。

例:

int bb[];   创立数组bb,没有设定命组元艳个数

int cc[八];  创立数组cc,设定命组元艳为八个,没有赋始值

int dd[3]={9,八,7};  创立数组dd,设定命组元艳为4个,并赋始值

赋值后,dd[0]的值为九、dd[1]的值为八、dd[2]的值为7

int ee[9]={0,1,2,3};   创立数组ee,设定命组元艳为9个,但只给前4个元艳赋始值

3、数组应用时的赋值

数组的赋值必需指定亮确的赋值对于象,除了了新修数组时否以批质赋值外,数组元艳必需一个一个赋值

例如:dd[2]=1;

那是对于数组dd的第3个元艳dd[2]([0]是第1个,[2]暗示第3个)从新赋值为1

正在那面,不零数型变质界说符int,

如许,数组dd本有三个值{9,八,7}便变为{9,八,1}

4、数组的援用

数组仅仅一系列变质的荟萃,以是每一次只可应用数组中的一个元艳。

数组的援用必需指定亮确的援用对于象,一次只可援用一个。若是必要应用零列数组,则必需一一应用。

例如:数组aa[4]的值为{4,3,2,1}

咱们用aa[i]去援用数组aa中的值

当i=0时,aa[i]的值为4

当i=1时,aa[i]的值为3

当i=2时,aa[i]的值为2

当i=3时,aa[i]的值为1

如许,咱们正在处置数列的时辰,应用数组便能戴去极小的不便

 

MT4编程初学5:市场数据与值

 

1、预约义数组(MT4已经经界说佳的,否以间接应用)

收盘价、最低价、最高价、开盘价、成接质等汗青数据,每一根K线烛炬皆各有一个,以是必需用数组去解决答题,MT4有几个预约义数组:

收盘价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[i]、High[i]、Low[i]、close[i],暗示第i+1根K线烛炬的收盘价、最低价、最高价、开盘价

以此类拉。。。。。。

注重:那些是数组,用的是圆括号。

2、预约义变质

购进价、出卖价是及时代价,MT4用预约义变质Ask以及Bid暗示,数值类型为double单粗度

另有一些预约义变质,如:

Bars 暗示图表中的烛炬数,类型为int零数型

Digits 暗示以后货泉对于的小数位,类型为int零数型,无日元币对于为4,有日元币对于为2,黄金石油等通常也为2

Point 暗示以后货泉对于的点值,类型为单粗度double型,无日元币对于为0.0001,有日元币对于为0.01。取Digits邪佳相反。

3、指标函数

一、代价、成接质、时间

它们皆有三个参数:货泉对于名、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线周期,用正在谁便是谁,用正在哪便是哪

二、挪动均匀值。单粗度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_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(地)指数挪动均匀线第3根K线所对于应地位的值

其余如MACD指标、威廉指标、RSI、SAR、布林线等指标与值皆取挪动均匀线指标相雷同

 

三、正在数组中供元艳的挪动均匀值。单粗度double型

iMAOnArray(数组名, 总额, 均匀周期, 均线偏移, 均匀形式, 地位)

那也取iMA函数差未几,不外数据源变为数组

从数组中不单否以供患上挪动均匀值,借否以供患上RSI等指标值

 

四、供自界说指标的值

咱们常常本人编一些自界说指标,否用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编程手册》

 

MT4编程初学6:果断语句

 

1、if语句

if语句很经常使用,也比力复杂。

规定:若是小括号中的前提建立,则执止年夜括号中的语句;若是没有建立,则跳过年夜括号。

例如:

if(a==1)

    {

     b=c+1;

    }

咱们正在编写报警指标的时辰,便常常用到那一语句:

若是“代价向上到达指订价位”,则“报警”

若是“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;

当mark=0时,阐明从未报过警,上、高脱皆能报警;

当mark=1时,阐明已经经上脱报过警了,不克不及再上脱报警了,但仍否高脱报警;

当mark=2时,阐明已经经高脱报过警了,不克不及再高脱报警了,但仍否上脱报警。

2、if ... else语句

规定:若是小括号中的前提建立,则执止if高年夜括号中的语句1;若是没有建立,则执止else高年夜括号中的语句2。

if(前提)

  {

  语句1;

  }

else

  {

  语句2;

  }

 

3、注重事项

一、只有语句前面才用到语句竣事符“;” 前提、年夜、小括号前面皆不必“;”

二、语句用年夜括号括起去,但若只有一止语句,则年夜括号否以简略

              if(前提)    语句1;

 

MT4编程初学7:轮回

 

一幅K线图有几千上万条K线,每一根K线又各有启开盘价、最凹凸价等数值,并且另有不少挪动均匀线、MACD、RSI等指标值。

面临海质数据,咱们必需用轮回去完成数据的与值以及赋值。

1、while轮回

while(前提)

   {

   语句1

   语句2

   。。。

   }

规定:当小括号中的前提建立时,便执止年夜括号中的语句,执止完了再果断前提是可建立,若是前提建立便持续执止年夜括号中的语句。

只需前提建立,步伐便不绝天运转年夜括号中的语句(轮回体),曲到小括号中的前提再也不建立时竣事轮回。

它取if语句的区分是:if语句是当前提为实时运转一次;而while语句则是只需前提为实,轮回体语句便不绝天运转,曲到前提为假时竣事轮回。

 

例:

   extern int 快线=12;

   extern int 缓线=26;

   double buffer[];

   int i=0;

   while(i<1000)

     {

      buffer[i]=  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个值。

 

2、for轮回

for轮回取while轮回正在本理上是一致的,仅仅书写格局上有所区分

把下面的例子改为for语句:

   extern int 快线=12;

   extern int 缓线=26;

   double buffer[];

   for(int i=0; i<1000; i++)

     {

      buffer[i]=  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”的前面;

轮回执止次序取while轮回一致:

第一步、先执止小括号中的第1句:int i=0;

(此语句用去界说始初变质,正在轮回中仅执止一次,否认为不任何表白式的空操作符“;”)

第两步、再果断小括号中的第2句是可建立:i<1000;

若是没有建立,则轮回竣事;若是建立,则轮回持续运转,执止第三步

第三步、按次序执止年夜括号中的语句

第四步、执止小括号中的第1句:i++ (此语句即:每一执止一次,i的值添加1)

而后归到第两步持续执止轮回。

 

再弥补一点:若是轮回体中(年夜括号中)只有一止语句,年夜括号否以简略

 

MT4编程初学八:MT4自界说指标的结构

MT4自界说指标通常由四个部份组成:

(1)文献头部

(2)参数、变质以及数组的界说

(3)始初化函数init()

(4)主函数start()

 

1、文献头部,也称为预处置步伐

预处置步伐以“#”结尾,止首无语句竣事符“;”

经常使用的预处置步伐有:

一、#property  indicator_chart_window

把指标隐示正在主图。如:均线、SRA等类指标用到此语句

二、#property indicator_separate_window

把指标隐示正在副图。如:MACD、RSI、威廉等类指标用到此语句

三、#property indicator_buffers 3

隐示3根指标线

四、#property indicator_color1 Red

第1根指标线的颜色为Red

五、#property  indicator_width1  1

第1根指标线的精细别离为1

六、#property indicator_level1   0.00

正在0.00值地位竖划1条虚线

 

2、参数、变质以及数组的界说

齐局性的参数、变质、数组正在此界说,局部变质否正在start()函数中界说

 

3、始初化函数init()

init()正在自界说指标添载时运转一次。

始初化函数的功用是“设置”。若是自界说指标必要划线,则一定用到此函数

 

4、主函数start()

当数占有变更时,start()便被触领。数据变更一次,start()便运转一次。

自界说指标的编程次要依托此函数停止。

start()函数的影响次要是与值以及给指标线赋值,报警也正在此函数内发动。

 

另外,另有一个反始初化函数deinit()

deinit()正在自界说卸载时运转一次,否用以来除了指标添载时init()所干的始初化操作。

 

MT4编程初学9:绘一条指标线

 

要绘指标线,只需正在步伐中写亮如下几点就能够了:

第1、亮确指标线所正在窗心,是主图仍是副图

第2、要成立数组,用以保管指标线正在各个地位的值。

第3、要成立指标线取数组的对于应瓜葛,哪一个数组对于应哪条指标线

第4、要亮确指标线的线型,曲直线仍是柱线或者者是箭头

第5、若是指标线是箭头,借要阐明是哪一种箭头

第6、给数组赋值 

此中:

第1、两条写正在文献头部中,

第3、4、五条写正在init()函数中(init函数仅正在指标添载时运转一次)

第六条写正在start()函数中(start函数正在数据发起变更时运转,变更一次运转一次)

上面以MACD为例阐明

咱们晓得,MACD指标由两条直线以及一组红绿柱线构成。(高图一)

此中:

皂线是两根均线的差;

紫线是皂线的挪动均匀线;

红绿柱线则是皂线以及紫线的差,皂线上脱紫线,呈现红柱,高脱则呈现绿柱。

 

咱们从复杂动手,先来除了紫线以及红绿柱线,仅保留此中的这根皂线,去望皂线是怎么绘进去的。

上面是全数语句:

#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<limit; i++)

    {

    buf[i]=

        iMA(NULL,0,FMA,0,1,0,i)

       -iMA(NULL,0,SMA,0,1,0,i);

    }

   return(0);

  }

 

阐明以下:

 

 

==============================================

==============================================

如下为上述语句的简要阐明

#property indicator_separate_window

指标搁正在副图

#property indicator_color1  White

第一条指标线为皂色

#property indicator_level1  0

正在副图中整值地位上绘一条程度竖线,

extern int FMA=12;

extern int SMA=26;

设坐两个零数型变质,默许值为12以及26,容许内部批改值

double     buf[];

设坐一个数组

int init()

始初化函数。该函数正在指标添载时只运转一次。init是体系默许的函数名,但应用时仍必要停止创设,以是要添界说符int

  {

   SetIndexBuffer(0,buf);

   设置数组buf为第一条指标线

   SetIndexStyle(0,DRAW_LINE);

   设置第一条指标线线型为间断直线

   return(0);

   函数竣事语句

  }

int start()

指标触领函数。取init函数差别,该函数正在无数据变革时被触领,若是数据被不竭更新,则该函数将不竭执止。start也是体系默许的函数名,但应用时也依然必要停止创设,以是也要添界说符int

 

  {

   int limit=Bars-IndicatorCounted();

   自界说一个变质limit,并赋值

   Bars是图表中的柱数

   IndicatorCounted()慢存中的柱数,便是已经经计较过的有值的柱数

   如许limit的值便是未经计较的柱数,如许就能够起到劣化步伐的影响。

   for(int i=0; i<limit; i++)

   轮回语句。

   轮回从i=0起头,每一轮回一次i值添加1,始终轮回到i<limit没有知足时竣事轮回

   因为轮回变质i为一个新变质,以是要先界说,加之零型变质界说符int

   上面年夜括中为轮回体,此例中只一条语句

    {

    buf[i]=

        iMA(NULL,0,FMA,0,1,0,i)

       -iMA(NULL,0,SMA,0,1,0,i);

    }

   给数组buf赋值,其值别离为响应地位上二条均线的差

   i是程度地位序号值,即烛柱从左到右的序号,右侧第一个烛柱序号为0

   return(0);

   start函数竣事

  }

 

MT4编程初学10:MT4的报警

报警功用是MT4的一年夜特点。

它否以正在预约的前提到达时,收回警报。

 

取指标绘线相比,报警句句隐患上很是复杂,

只需正在果断语句中添一个报警句句便可

报警方法有:弹没窗心报警、音乐报警、邮件报警等。

若是邮箱开明了手机欠疑通知,则邮件报警的内容会即时转领得手机上。

一、弹没窗心报警:

当(前提到达)执止此语句时,以弹没窗心告诫。

格局:Alert(内容1,内容2,内容3,内容4);

报警内容为字符串型,内容之间添逗号

例如:

Alert( Symbol(),"4小时图MACD上脱整轴");

 

二、音乐报警:

当(前提到达)执止此语句时,播搁一段音乐。

格局:PlaySound("音乐文献名.wav");

文献类型为wav格局,而且保管正在C:\Program Files\MetaTrader4\sounds目次中

文献名添引号

三、邮件报警:

当(前提到达)执止此语句时,领送一个邮件。

(支领件人地点正在MT4体系中设置详睹《MT4编程真例1:一个复杂的小步伐,让您的手机撼身酿成外汇止情接管机》)

格局: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)

       && 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()    界说触领函数

if()                果断

iHigh()        最低价值函数

iLow()         最高价值函数

iMA()           挪动均匀线值函数

Alert()         报警函数

Symbol()    商品名称函数

&&              逻辑运算符“而且”

!=                逻辑运算符“没有等于”

MODE_SMA     复杂挪动均匀形式

PRICE_CLOSE  以开盘价计较

再说一高自界说变质mark的影响:

mark的始值是0,当上脱报警时给mark赋值1,当高脱报警时给mark赋值2。

如许当mark的值为1时,阐明已经经对于上脱报过警了,便不克不及再次对于上脱报警;

当mark的值为2时,阐明已经经对于高脱报过警了,便不克不及再次对于高脱报警。

如许便起到了解除沉复报警的影响。

 

=============================================

语句简要诠释以下:

=============================================

 

#property indicator_chart_window

指标搁正在主图

extern int 警惕均线=20;

设坐一个自界说变质,容许内部值批改,零数形,变质名为"警惕均线",默许值20

int mark=0;

设坐一个自界说变质,零数型,变质名为mark,并赋始值0

此变质正在前面用于记实是可报警,设计是如许的:

若是mark=0,则从未报过警

若是mark=1,则已经经向上报过警

若是mark=2,则已经经向高报过警

int start()

设坐触领函数start。start为体系规则函数名,函数内容自界说。当数据变更时,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)

       && mark != 1   )

      前提果断语句。那面用到逻辑运算符&&,便是“而且”,前提有三个,三个前提要共时建立,则启设外汇账户零个前提才建立

      第一个前提:最低价年夜等于均线。iHigh是烛柱最低价与值函数,iMA是均线与值函数

      第两个前提:前一烛柱最低价小于均线

      第三个前提:mark没有等于1。若是mark没有等于1,便阐明指标不对于上脱报过警

          {

            Alert(Symbol(),"向上触及30均线");

            mark = 1;

          }

          花括中为前提执止语句。Alert是报警句句,Symbol()是商品名称与值函数

          报警句句执止后,给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);

    start函数竣事语句,前往整值

}

 

MT4编程真例:箭头符号

符号是一种断断绝绝的指标线。正在指标线有值区域,指标线隐示;正在指标线无值区域,指标线暗藏。例以下图:当代价上脱、高脱均线时,均线上呈现一个标识表记标帜符号。 

 

  本理也很复杂:正在上图中,存留两条指标线,一条是均线,另外一条是笑容符号线。

均线正在任何地位皆有值,以是均线是一条间断的直线;

当代价上、高脱均线时,符号线被付与了均线值;而正在其余地位上,符号线被赋了空值。以是仅仅正在代价上、高脱均线的地位上,符号线才有值,能力呈现笑容符号。由于符号线仅仅个体地位有值,以是符号线仅正在个体地位闪现。

符号也邪佳降正在均线上,由于符号线值=均线值。若是符号线被赋了此外值,例如(符号线=均线+10点),那末符号程度立标没有变,垂曲立标将是均线上圆的10点地位。

源码以下:

//======================================================

#property  indicator_chart_window

#property  indicator_buffers 1           

#property  indicator_color1 Yellow

extern int  均线=10;

double mk[];

double temp0,temp1;

int init()

  {

    IndicatorBuffers(1);  

    SetIndexBuffer(0,mk);

    SetIndexStyle(0,DRAW_ARROW);

    SetIndexArrow(0,204);

    IndicatorDigits(Digits);

   return(0);

  }

int start()

  {

   int limit;

   int counted_bars=IndicatorCounted();

   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars-均线;

   for(int i=0; i<limit; i++)

      {

       temp0=iMA(NULL,0,均线,0,0,0,i);

       temp1=iMA(NULL,0,均线,0,0,0,i+1);

       mk[i]=EMPTY_VALUE;

       if(Close[i]>temp0  && Close[i+1]<temp1)  mk[i]=temp0;

       if(Close[i]<temp0  && Close[i+1]>temp1)  mk[i]=temp0;

      }

  return(0);

  }

//源码到此已经竣事

=============================================

语句简要诠释以下:

=============================================

#property  indicator_chart_window

指标搁正在主图

#property  indicator_buffers 1           

设置指标线数为1条

#property  indicator_color1 Yellow

设置第一条指标线颜色为黄色

extern int  均线=10;

设坐一个自界说变质,容许内部值批改,零数形,变质名为"均线",默许值10

double mk[];

设坐一个自界说数组,单粗度型

double temp0,temp1;

设坐两个自界说变质,单粗度型,变质名为temp0、temp1

int init()

设坐始初化函数init。init为体系规则函数名,函数内容自界说。该函数正在指标被添载时仅运转一次 

 {

    IndicatorBuffers(1);

    指标线数目为1条

  

    SetIndexBuffer(0,mk);

    第一条指标线的数组为mk

    SetIndexStyle(0,DRAW_ARROW);

    第一条指标线的线型为箭头符号

    SetIndexArrow(0,204);

    第一条指标线的箭头符号为第204种符号,若是换一个编号,这呈现的便是另外一种符号。箭头符号的编码详睹《MT4编程参照》

    IndicatorDigits(Digits);

    设置指标线的小数位数

    Digits=以后汇率的小数位数,如日元叉盘Digits=2,其余币对于Digits==4

   return(0);

   函数竣事,前往整值

  }

int start()

设坐触领函数start。start为体系规则函数名,函数内容自界说。当数据变更时,start函数被触领

  {

   int limit;

   设坐零数型自界说变质limit

   int counted_bars=IndicatorCounted();

   设坐零数型自界说变质counted_bars,并将IndicatorCounted()的值赋给counted_bars

   IndicatorCounted()为慢存数目,即已经经计较过值的烛柱数

   if(counted_bars>0) counted_bars--;

   若是counted_bars年夜于整,则将counted_bars的值减失落1

   那是为了合营高一句,以免limit相差1而产生犯错

   limit=Bars-counted_bars-均线;

   那是给limit赋值

   Bars为图表中的柱数

   counted_bars为已经经赋值的柱数

   如许limit的后果便是未赋值的烛柱数

   再减来“均线”是由于图表最右侧段均线无心义

   for(int i=0; i<limit; i++)

   轮回语句,括号中有三个语句:

   第一句int i=0; 暗示轮回从i=0起头

   第两句i<limit; 那是轮回的前提,若是前提知足则执止年夜括号中的轮回体,若是前提没有知足,则中断轮回,跳到年夜括号上面的语句执止

   第三句i++,那是轮回步骤管制语句,每一轮回一次后执止一次此语句。

   i++相称于i=i+1,即i值正在本无数值上添加1

      {

       temp0=iMA(NULL,0,均线,0,0,0,i);

       把均线正在i地位上的值赋给temp0

       iMA:均线与值函数

       temp1=iMA(NULL,0,均线,0,0,0,i+1);

       把均线正在(i+1)地位上的值赋给temp1

       mk[i]=EMPTY_VALUE;

       给数组mk正在i地位上赋空值

       EMPTY_VALUE便是空值

       if(Close[i]>temp0  && Close[i+1]<temp1)  mk[i]=temp0;

       前提果断语句。若是正在i地位上代价年夜于均线,而且正在(i+1)地位上代价小于均线(即代价上脱均线),则给数组mk正在i地位上赋该地位的均线值

       Close[i]:正在i地位上开盘价。

       &&:逻辑运算符“而且”

       if(Close[i]<temp0  && Close[i+1]>temp1)  mk[i]=temp0;

       取上一句相似

      }

  return(0);

  start函数竣事语句

 

MT4编程真例:正在欧元图上隐示英磅的RSI指标

 

上面那个图是AUD图上,叠添了英磅的RSI指标。

(当然也能够没有叠添,分二个窗心)

从RSI指标图上咱们望到,英磅弱势,而澳元很强

 

上面是指标源码

-------------------------------------------------------------------------------------------------------

#property  indicator_separate_window

#property  indicator_buffers 1

#property  indicator_color1  Aqua

#property  indicator_level1  30

#property  indicator_level2  70

extern int RSI=12;

extern string 商品="GBPUSD";

double     ind_buffer[];

int init()

  {

   SetIndexBuffer(0,ind_buffer);

   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

   IndicatorShortName("RSI("+商品+"," +RSI+")");

   return(0);

  }

int start()

  {

   int limit;

   int counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);

   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;

   for(int i=0; i<limit; i++)

      ind_buffer[i]=iRSI(商品,0,RSI,PRICE_CLOSE,i);

   return(0);

  }

-------------------------------------------------------------------------------------------------------

 

 

=============================================

语句简要诠释以下:

=============================================

#property  indicator_separate_window

指标搁正在副图

#property  indicator_buffers 1

设置指标线数组为1个

#property  indicator_color1  Aqua

设置第一条指标线颜色值为Aqua,即介于蓝绿之间的一种颜色

#property  indicator_level1  30

正在副图中,30值地位上绘一条程度曲线

#property  indicator_level2  70

正在副图中,70值地位上绘一条程度曲线

extern int RSI=12;

设坐一个自界说变质,容许内部值批改,零数型,变质名为"RSI",默许值12

extern string 商品="GBPUSD";

设坐一个自界说变质,容许内部值批改,字符串型,变质名为"商品",默许值"GBPUSD"

double     ind_buffer[];

设坐一个自界说数组,单粗度型

int init()

设坐始初化函数init。init为体系规则函数名,函数内容自界说。该函数正在指标被添载时运转一次

  {

   SetIndexBuffer(0,ind_buffer);

   设置第一条指标线的数组为ind_buffer

   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

   设置第一条指标线的样式,DRAW_LINE暗示间断直线,STYLE_SOLID暗示真口线,1号精线

   IndicatorShortName("RSI("+商品+"," +RSI+")");

   设置指标线的隐示简称

   return(0);

   始初化函数竣事

  }

int start()

设坐触领函数start。start为体系规则函数名,函数内容自界说。当数据变更时,start函数被触领

  {

   int limit;

   设坐自界说变质limit,零数型

   int counted_bars=IndicatorCounted();

   设坐零数型自界说变质counted_bars,并将IndicatorCounted()的值赋给counted_bars

   IndicatorCounted()为慢存数目,即已经经计较过值的烛柱数

   (注:能够那面诠释患上没有是很正确,年夜致便那个意义)

   if(counted_bars<0) return(-1);

   若是counted_bars值小于整,start函数竣事

   if(counted_bars>0) counted_bars--;

   若是counted_bars值年夜于整,则counted_bars值减失落1。那是为了合营高一句,以免limit相差1而犯错

   limit=Bars-counted_bars;

   给limit赋值

   Bars为图表中的柱数

   counted_bars为已经经赋值的柱数

   如许limit的值便是未赋值的烛柱数

   如许干的纲的是防止沉复运算,劣化步伐

   for(int i=0; i<limit; i++)

   轮回语句,括号中有三个语句:

   第一句int i=0; 暗示轮回从i=0起头

   第两句i<limit; 那是轮回的前提,若是前提知足则执止年夜括号中的轮回体,若是前提没有知足,则中断轮回,跳到年夜括号上面的语句执止

   第三句i++,那是轮回步骤管制语句,每一轮回一次后执止一次此语句。

   i++相称于i=i+1,即i值正在本无数值上添加1

      ind_buffer[i]=iRSI(商品,0,RSI,PRICE_CLOSE,i);

      此语句为轮回体,因为只有一个语句,以是简略花括号

      i为图表烛柱的序号,从0起头,右侧第1柱序号为0,从左向右递删

      iRSI为RSI指标的与值函数

   return(0);

   start函数竣事

  }

 

MT4编程真例:会变色的均线

 

上面那个是示用意:

 

均线会变色,望起去很神奇,但本理实在很复杂:

 

那面理论上有二条均线,一条红线,一条绿线:

当代价正在均线上圆时,红线隐示,绿线暗藏;

当代价正在均线高圆时,红线暗藏,绿线隐示,

以是望起去便仅仅一条会变色的均线。

要暗藏一条指标线中的此中一段,也很复杂,只需把那一段指标线的值赋为空值(EMPTY_VALUE)就好了。

说说容难,但理论操作的时辰,咱们又逢到了一个小答题,这便是红绿变换点的“断点”答题,红线以及绿线没有间断了。图:

 

那个答题着真搅扰了尔佳一阵,厥后终究念通了。

本去,绘线的前提是:先后二个时点上皆必需有值,能力绘没线去。而上图中2以及3之间应当绘上红线,但正在3点位上,红线的值为空,以是,红线绘没有进去。

要让红线、绿线间断,必需使3点位上,既有绿线值又有红线值,如许2以及3之间能力呈现红线,红线绿才会间断。

 

为了干到那一点,咱们正在给指标线轮回赋值的时辰:

一、正在 i 时点上,除了了给 i 时点赋值,共时借要给 i+1时点赋共色值(以上图为例:咱们正在给3时点赋绿线值时,共时给4时点赋绿线值;正在给2时点赋红线值时,共时再给3点赋红线值;如许3时点上便既有红线值,又有绿线值);

二、赋值的次序为从右向左,即递加轮回,以免前一操作所赋的值被浑空。

如许咱们的纲的便到达了。

上面那是颠末测试的源代码

---------------------------------------------------------------------------------------------------

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 Green

extern int  变色均线=1八;

double duo[];

double kong[];

int init()

  {

   SetIndexBuffer(0,duo);

   SetIndexBuffer(1,kong);

   SetIndexStyle(0,DRAW_LINE);

   SetIndexStyle(1,DRAW_LINE);

   SetIndexDrawBegin(0,变色均线);

   SetIndexDrawBegin(1,变色均线);

   IndicatorDigits(Digits);

   return(0);

  }

int start()

  {

   double temp0,temp1;

   int limit;

   int counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);

   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;

   for(int i=limit; i>=0; i--)

      {     

      duo[i]=EMPTY_VALUE;

      kong[i]=EMPTY_VALUE;

      temp0=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i);

      temp1=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i+1);

      if(iClose(NULL,0,i)>=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i)) 

            {duo[i]=temp0; duo[i+1]=temp1;}

      else  {kong[i]=temp0; kong[i+1]=temp1;}

      }      

   return(0);

  }

-----------------------------------------------------------------------------------------------------------

当然,下面那个因此代价正在均线上高圆为前提的,咱们也能够以MACD、KDJ、RSI等指标作为均线变色的前提。咱们借否以更入一步,把单色线改成三色线等等

 

===================================================

语句简要诠释以下:

===================================================

#property indicator_chart_window

指标搁正在主图

#property indicator_buffers 2

设置指标线数组为2个

#property indicator_color1 Red

#property indicator_color2 Green

设置第一条指标线颜色值为Red,第两条颜色值为Green

extern int  变色均线=1八;

设坐一个自界说变质,容许内部值批改,零数形,变质名为"变色均线",默许值1八

double duo[];

设坐一个自界说数组,单粗度型,名称为duo

该数组正在前面用于存储红线数据

double kong[];

设坐一个自界说数组,单粗度型,名称为kong

该数组正在前面用于存储绿线数据

int init()

设坐始初化函数init。init为体系规则函数名,函数内容自界说。该函数正在指标被添载时运转一次

  {

   SetIndexBuffer(0,duo);

   SetIndexBuffer(1,kong);

   设置第1、两条指标线的数组为duo以及kong

   SetIndexStyle(0,DRAW_LINE);

   SetIndexStyle(1,DRAW_LINE);

   设置第1、两条指标线的样式,线型为间断直线

   SetIndexDrawBegin(0,变色均线);

   SetIndexDrawBegin(1,变色均线);

   设置第1、两条指标线的最左侧的肇端划线地位

   IndicatorDigits(Digits);

   设置指标切确到的小数位数

   Digits是以后汇率小数位,日系Digits=2,其余币对于Digits=4

   return(0);

   init函数竣事,前往整值

  }

int start()

设坐触领函数start。start为体系规则函数名,函数内容自界说。当数据变更时,start函数被触领

  {

   double temp0,temp1;

   设坐单粗度型自界说变质temp0、temp1

   int limit;

   设坐自界说变质limit,零数型

   int counted_bars=IndicatorCounted();

   设坐零数型自界说变质counted_bars,并将IndicatorCounted()的值赋给counted_bars

   IndicatorCounted()为慢存数,即已经经计较过值的烛柱数

   if(counted_bars<0) return(-1);

   若是counted_bars值小于整,start函数竣事

   if(counted_bars>0) counted_bars--;

   若是counted_bars值年夜于整,则counted_bars值减失落1。那是为了合营高一句,以免limit相差1而犯错

   limit=Bars-counted_bars;

   给limit赋值

   Bars为图表中的烛柱数

   counted_bars为慢存数,即已经经运算过的烛柱数

   如许limit的值便是未经运算的烛柱数

   如许干的纲的是防止沉复运算,劣化步伐

   for(int i=limit; i>=0; i--)

   轮回语句,括号中有三个语句:

   第一句int i=limit; 暗示轮回从i=limit起头

   第两句i>=0; 那是轮回的前提,若是前提知足则执止年夜括号中的轮回体,若是前提没有知足,则中断轮回,跳到年夜括号上面的语句执止

   第三句i--,那是轮回步骤管制语句,每一轮回一次后执止一次此语句。

   i--相称于i=i-1,即i值正在本无数值上削减1

      {    

      duo[i]=EMPTY_VALUE;

      kong[i]=EMPTY_VALUE;

      给数组duo以及kong正在i地位上赋空值

      EMPTY_VALUE:空值

      temp0=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i);

      temp1=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i+1);

      把均线正在i以及i+1地位上均线值,别离赋给temp0以及temp1

      那是为了使前面的语句望起去简便

      if(iClose(NULL,0,i)>=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i))

      果断前提语句:若是代价下于均线

            {duo[i]=temp0; duo[i+1]=temp1;}

            果断执止语句:给数组元艳duo[i]、duo[i+1]别离赋值

      else  {kong[i]=temp0; kong[i+1]=temp1;}

      若是果断前提没有建立,即代价矮于均线:则给数组元艳kong[i]、kong[i+1]别离赋值

      }     

   return(0);

   start函数竣事,前往整值

  }

 

MT4编程参照

 

MT4编程参照-第一节 语法

语法 [Syntax]

代码格局

空格修、Tab键、换止键以及换页符均可以成为代码排版的分开符,您能应用各类符号去添加代码的否读性。

 

正文 

多止正文应用 竣事,正在那之间不克不及够嵌套。双止正文应用 // 作为起头到新的一止竣事,否以被嵌套到多止正文之中。

示例:

// 双止正文 

 

 

标识符 

标识符用去给变质、函数以及数据类型停止定名,少度不克不及跨越31个字节

您可使用数字0-九、推丁字母年夜写A-Z以及小写a-z(年夜小写有区别的)另有高划线(_)。别的尾字母不行所以数字,标识符不克不及以及保留字抵触.

示例:

// NAME1 namel Total_5 Paper

 

保留字 

上面列没的是牢固的保留字。不克不及应用如下任何保留字停止定名。

数据类型 存储类型 操作符 其它

bool extern break false

color static case true

datetime   continue  

double   default  

int   else  

string   for  

void   if  

    return  

    switch  

    while  

第两节 数据类型

数据类型 [Data types]

数据类型概述

次要数据类型有:

• Integer (int) 

• Boolean (bool) 

• ëèòåðàëû (char) 

• String (string) 

• Floating-point number (double) 

• Color (color) 

• Datetime (datetime) 

咱们用Integer类型数据去作为DateTime以及Color数据的存储。

应用如下方法否以停止类型站换:

int (bool,color,datetime);

double;

string;

 

Integer 类型

十入造: 数字0-9;0不克不及作为第一个字母

示例:

12, 111, -956 1007

十六入造: 数字0-9;推丁字母a-f或者A-F用去暗示10-15;应用0x或者者0X作为起头。

示例:

0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7

Integer 变质的与值范畴为-21474八364八到21474八3647。

 

Literal 类型

肆意正在双引号中的字符或者十六入造的肆意ASCII码例如'\x10'皆是被看做为一个字符,

一些字符例如双引号('),单引号("),答号(?),反斜杠(\)以及一些管制符皆必要正在以前添一个反斜杠(\)停止回心后暗示进去:

line feed NL (LF) \n

horizontal tab HT \t

carriage return CR \r

reverse slash \ \\

single quote ' \'

double quote " \"

hexadecimal ASCII-code hh \xhh

以上字符若是没有颠末反斜杠停止回心将不克不及被应用

示例:

int a = 'A';

int b = '$';

int c = '©'; // code 0xA9

int d = '\xAE'; // symbol code ®

 

Boolean 类型

Boolean 用去暗示 是 以及 可, 借否以用数字 1 以及 0 停止暗示。True以及Flase否以疏忽年夜小写。

示例:

bool a = true;

bool b = false;

bool c = 1;

 

Floating-point number 类型

浮点型变质正在零数型前面添一个点(.)用去更切确的暗示十入造数字。

示例:

double a = 12.111;

double b = -956.1007;

double c = 0.0001;

double d = 16;

浮点型的与值范畴从 2.2e-30八 到 1.八e30八.

 

String 类型

字符串型是用去暗示间断的ASCII码字符的应用间断的二个单引号去包含必要暗示的内容如:"Character constant".

示例:

"This is a character string"

"Copyright symbol \t\xA9"

"this line with LF symbol \n"

"A" "1234567八90" "0" "$"

 

Color 类型

颜色类型可使用如下示例面的几种方法停止界说。

示例:

// symbol constants

C'12八,12八,12八' // gray

C'0x00,0x00,0xFF' // blue

// named color

Red

Yellow

Black

// integer-valued representation

0xFFFFFF // white

16777215 // white

0x00八000 // green

3276八 // green

 

Datetime 类型

时间类型应用年、月、日、时、分、秒去停止界说,您可使用如下示例中的方法去界说变质。

示例:

D'2004.01.01 00:00' // New Year

D'19八0.07.19 12:30:27'

D'19.07.19八0 12:30:27'

D'19.07.19八0 12' //equal to D'19八0.07.19 12:00:00'

D'01.01.2004' //equal to D'01.01.2004 00:00:00'

D'12:30:27' //equal to D'[compilation date] 12:30:27'

D'' //equal to D'[compilation date] 00:00:00'

第三节 运算符以及表白式

运算符以及表白式 [Operations & Expressions]

表白式

一个表白式否以领有多个字符以及操作符,一个表白式否以写正在几止外面。

示例:

a++; b = 10; x = (y*z)/w;

注:分号(;)是表白式的竣事符。

 

算术运算符

Sum of values i = j + 2;

Difference of values i = j - 3;

Changing the operation sign x = - x;

Product of values z = 3 * x;

Division quotient i = j / 5;

Division remainder minutes = time % 60;

Adding 1 to the variable value i++;

Subtracting 1 from the variable value k--;

添减1的运算符不克不及被嵌套正在表白式中

int a=3;

a++; // 否止的表白式

int b=(a++)*3; // 不行止的表白式

 

赋值运算符

注:将右边的后果赋值给左边的变质

将x的值赋值给y y = x;

将x的值添到y下面 y += x;

正在y下面减来x的值 y -= x;

获得y的x倍的值 y *= x;

获得y除了以x的值 y /= x;

与y除了以x后的余数 y %= x;

y向左位移x位 y >>= x;

y向右位移x位 y <<= x;

获得逻辑AND的值 y &= x;

获得逻辑OR的值 y |= x;

获得逻辑非OR的值 y ^= x;

注:一个表白式只可有一个赋值运算符.

 

瓜葛运算符

用前往0(False)或者1(True)去暗示二个质之间的瓜葛。

a是可等于b a == b;

a是可没有等于b a != b;

a是可小于b a < b;

a是可年夜于b a > b;

a是可小于等于b a <= b;

a是可年夜于等于b a >= b;

 

虚实运算符

否认运算符(!),用去暗示虚实的背面的后果。

// 若是a没有是实的

if(!a)

Print("not 'a'");

逻辑运算符或者(||)用去暗示二个表白式只需有一个建立便可。

示例:

if(xl)

Print("out of range");

逻辑运算符以及(&&)用去暗示二个表白式要共时建立才止。

示例:

if(p!=x && p>y)

Print("true");

n++;

 

位逻辑运算符

~ 运算符对于操作数执止按位供补操作。

b = ~n;

>> 运算符对于操作数执止向左位移操作。

x = x >> y;

<< 运算符对于操作数执止向右位移操作。

x = x << y;

一元 & 运算符前往操作数的地点

为零型以及 bool 类型预约义了两入造 & 运算符。对于于零型,& 计较操作数的按位“取”。对于于 bool 操作数,& 计较操作数的逻辑“取”;也便是说,当且仅当二个操作数均为 true 时,其后果才为 true。

b = ((x & y) != 0);

两入造 | 运算符是为零型以及 bool 类型预约义的。对于于零型,| 对于操作数停止按位“或者”运算。对于于 bool 操作数,| 对于操作数停止逻辑“或者”计较,也便是说,当且仅当二个操作数均为 false 时,其后果才为 false。

b = x | y;

为零型以及 bool 类型预约义了 ^ 两入造操作数。对于于零型,^ 计较操作数的按位“异或者”。对于于 bool 操作数,^ 计较操作数的逻辑“异或者”;也便是说,当且仅当只有一个操作数为 true 时,其后果才为 true。

b = x ^ y;

注:位逻辑运算符只影响于Integers类型

 

其它运算符

索引。定位正在数组中i地位的值。

array[i] = 3;

//将3负值到array数组第i地位上

应用 x1,x2,...,xn 如许的方式将各类值传送到function中停止运算。

示例:

double SL=Ask-25*Point;

double TP=Ask+25*Point;

int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP,

"My co妹妹ent",123,0,Red);

 

劣先级规定

上面是从上到高的运算劣先规定,劣先级下的将先被运算。

() Function call From left to right

[] Array element selection

! Negation From left to right

~ Bitwise negation

- Sign changing operation

* Multiplication From left to right

/ Division

% Module division

+ Addition From left to right

- Subtraction

<< Left shift From left to right

>> Right shift

< Less than From left to right

<= Less than or equals

> Greater than

>= Greater than or equals

== Equals From left to right

!= Not equal

& Bitwise AND operation From left to right

^ Bitwise exclusive OR From left to right

| Bitwise OR operation From left to right

&& Logical AND From left to right

|| Logical OR From left to right

= Assignment From right to left

+= Assignment addition

-= Assignment subtraction

*= Assignment multiplication

/= Assignment division

%= Assignment module

>>= Assignment right shift

<<= Assignment left shift

&= Assignment bitwise AND

|= Assignment bitwise OR

^= Assignment exclusive OR

, Co妹妹a From left to right

第四节 操作符

操作符 [Operators] 

格局以及嵌套

格局.一个操作符否以占用一止或者者多止,二个或者多个操作符否以占用更多的止。

嵌套.执止管制符(if, if-else, switch, while and for)否以停止肆意嵌套.

 

复折操作符

一个复折操作符有一个(一个区段)以及由一个或者多个任何类型的操作符构成的的附件{}. 每一个表白式应用分号作为竣事(;)

示例:

if(x==0)

{

x=1; y=2; z=3;

}

 

表白式操作符

任何故分号(;)竣事的表白式皆被视为是一个操作符。

Assignment operator.

Identifier=expression;

标识符=表白式;

示例:

x=3;

y=x=3; // 那是差错的

一个操作符中只可有一个表白式。

挪用函数操作符

Function_name(argument1,..., argumentN);

函数名称(参数1,...,参数N);

示例:

fclose(file);

空操作符

只有一个分号构成(;).咱们用它去暗示不任何表白式的空操作符.

 

进行操作符

一个break; , 咱们将其搁正在嵌套内的指定地位,用去正在指定环境高跳没轮回操作.

示例:

// 从0起头搜刮数组

for(i=0;i<ARRAY_SIZE;I++)

if((array[i]==0)

break;

 

持续操作符

一个continue;咱们将其搁正在嵌套内的指定地位,用去正在指定环境高跳过交上去的运算,间接跳进高一次的轮回。

示例:

// su妹妹ary of nonzero elements of array

int func(int array[])

{

int array_size=ArraySize(array);

int sum=0;

for(int i=0;i

{

if(a[i]==0) continue;

sum+=a[i];

}

return(sum);

}

 

前往操作符

一个return;将必要前往的后果搁正在return前面的()中。

示例:

return(x+y);

 

前提操作符 if

if (expression)

operator;

若是表白式为实那末执止操作。

示例:

if(a==x)

temp*=3;

temp=MathAbs(temp);

 

前提操作符 if-else

if (expression)

operator1

else

operator2

若是表白式为实那末执止operator1,若是为假执止operator2,else后借否以跟入多个if执止多项抉择。详睹示例。

示例:

if(x>1)

if(y==2)

z=5;

else

z=6;

if(x>l)

{

if(y==2) z=5;

}

else

{

z=6;

}

// 多项抉择

if(x=='a')

{

y=1;

}

else if(x=='b')

{

y=2;

z=3;

}

else if(x=='c')

{

y = 4;

}

else

{

Print("ERROR");

}

 

抉择操作符 switch

switch (expression)

{

case constant1: operators; break;

case constant2: operators; break;

...

default: operators; break;

}

当表白式expression的值等于后果之一时,执止其后果高的操作。不论后果若何皆将执止default中的操作。

示例:

case 3+4: //准确的

case X+Y: //差错的

当选择的后果只能所以常数,不行为变质或者表白式。

示例:

switch(x)

{

case 'A':

Print("CASE A\n");

break;

case 'B':

case 'C':

Print("CASE B or C\n");

break;

default:

Print("NOT A, B or C\n");

break;

}

 

轮回操作符 while

while (expression)

operator;

只需表白式expression为实便执止操作operator

示例:

while(k<N)

{

y=y*x;

k++;

}

 

轮回操作符 for

for (expression1; expression2; expression3)

operator;

用表白式1(expression1)去界说始初变质,当表白式2(expression2)为实的时辰执止操作operator,正在每一次轮回竣事后执止表白式3(expression3)

用while否以暗示为如许:

expression1;

while (expression2)

{

operator;

expression3;

};

示例:

for(x=1;x<=7;x++)

Print(MathPower(x,2));

应用for(;;)否以形成一个牺牲轮回犹如while(true)同样.

表白式1以及表白式3均可之内嵌多个用逗号(,)联系的表白式。

示例:

for(i=0,j=n-l;i<N;I++,J--)

a[i]=a[j];

第五节 函数

函数 [Function]

函数界说

一个函数是由前往值、输出参数、内嵌操作所构成的。

示例:

double // 前往值类型

linfunc (double x, double a, double b) // 函数名以及输出参数

{

// 内嵌的操作

return (a*x + b); // 前往值

}

若是不前往值那末前往值的类型否以写为void

示例:

void errmesg(string s)

{

Print("error: "+s);

}

 

函数挪用

function_name (x1,x2,...,xn)

示例:

int somefunc()

{

double a=linfunc(0.3, 10.5, 八);

}

double linfunc(double x, double a, double b)

{

return (a*x + b);

}

 

寻常函数 init()、deinit()以及start()

init()正在载进时挪用,否以用此函数正在起头自界说指标或者者自动接难以前干始初化操作。

deinit()正在卸载时挪用,否以用此函数正在行止自界说指标或者者自动接难以前干始初化操作。

start()当数据变更时触领,对于于自界说指标或者者自动接难的编程次要依托此函数停止。

 

第六节 变质

变质 [Variables]

界说变质

界说根本类型

根本类型包含

• string - 字符串型; 

• int - 零数型; 

• double - 单粗度浮点数型; 

• bool - 布我型 

示例:

string MessageBox;

int Orders;

double SymbolPrice;

bool bLog;

 

界说附带类型

附带类型包含

• datetime - 时间型,应用无符号零型数字存储,是1970.1.1 0:0:0起头的秒数 

• color - 颜色,应用三色的零型数字编码而成 

示例:

extern datetime tBegin_Data = D'2004.01.01 00:00';

extern color cModify_Color = C'0x44,0xB9,0xE6';

 

界说数组类型

示例:

int a[50]; //一个一维由五十个int构成的数组

double m[7][50]; //一个二维由7x50个double构成的数组

外部变质界说

外部变质望文生义是正在外部应用的,否以懂得为正在以后嵌套内所应用的变质。

 

函数参数界说

示例:

void func(int x, double y, bool z)

{

...

}

函数的参数内的变质只可正在函数内才见效,正在函数外没法应用,并且正在函数内对于变质停止的批改正在函数外没法见效。

挪用函数示例:

func(123, 0.5);

若是有必要正在变质传进由参数传进函数内操作后保留批改正在函数外见效的环境的话,否以正在参数界说的类型名称后加之建饰符(&)。

示例:

void func(int& x, double& y, double& z[])

{

...

}

 

固态变质界说

正在数据类型前加之static就能够将变质界说成固态变质

示例:

{

static int flag

}

 

齐局变质界说

齐局变质是指正在零个步伐中皆可能挪用的变质,只要将变质界说卸载一切嵌套以外便可。

示例:

int Global_flag;

int start()

{

...

}

 

附带变质界说

附带变质否以容许由用户本人输出。

示例:

extern double InputParameter1 = 1.0;

int init()

{

...

}

 

始初化变质

变质必需颠末始初化才可使用。

 

根本类型

示例:

int mt = 1; // integer 始初化

// double 始初化

double p = MarketInfo(Symbol(),MODE_POINT);

// string 始初化

string s = "hello";

 

数组类型

示例:

int mta[6] = {1,4,9,16,25,36};

 

内部函数援用

示例:

#import "user32.dll"

int MessageBoxA(int hWnd ,string szText,

string szCaption,int nType);

int SendMessageA(int hWnd,int Msg,int wParam,int lParam);

#import "lib.ex4"

double round(double value);

#import

第七节 预处置步伐

预约义变质 [Pre-defined Variables] 

double Ask

通货的购进价

示例:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)

{

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"My order #2",3,D'2005.10.10 12:30',Red);

return;

}

 

int Bars

前往图表中的柱数

示例:

int counter=1;

for(int i=1;i<=Bars;i++)

{

Print(Close[i-1]);

}

 

double Bid

通货的买价

示例:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)

{

OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"My order #2",3,D'2005.10.10 12:30',Red);

return(0);

}

 

double Close[]

前往指定索引地位的开盘代价

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv",FILE_CSV|FILE_WRITE,';');

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// write data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

}

 

int Digits

前往以后通货的汇率小数位

示例:

Print(DoubleToStr(Close[i-1], Digits));

 

double High[]

前往指定索引地位的最低价格

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// write data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

}

 

double Low[]

前往指定索引地位的最高价格

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ";");

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// write data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

}

 

double Open[]

前往指定索引地位的收盘代价

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// write data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

}

 

double Point

前往以后图表的点值

示例:

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,Red);

 

datetime Time[]

前往指定索引地位的时间

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// write data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

}

 

double Volume[]

前往指定索引地位的成接质

示例:

int handle, bars=Bars;

handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

// write table columns headers

FileWrite(handle, "Time;Open;High;Low;Close;Volume");

// erite data

for(int i=0; i

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);

)

字符串函数 [String Functions]

string StringConcatenate( ... ) 

字符串联交

:: 输出参数

... - 肆意值,用逗号联系

示例:

string text;

text=StringConcatenate("Account free margin is ", AccountFreeMargin(), "Current time is ", TimeToStr(CurTime()));

// slow text="Account free margin is " + AccountFreeMargin() + "Current time is " + TimeToStr(CurTime())

Print(text);

 

int StringFind( string text, string matched_text, int start=0)

正在字符串中寻觅合适前提的字符串前往索引地位

:: 输出参数

text - 被搜刮的字符串 

matched_text - 必要搜刮的字符串

start - 搜刮起头索引地位

示例:

string text="The quick brown dog jumps over the lazy fox";

int index=StringFind(text, "dog jumps", 0);

if(index!=16)

Print("oops!");

 

int StringGetChar( string text, int pos)

与字符串中的某一个字符

:: 输出参数

text - 字符串 

pos - 与字符的地位

示例:

int char_code=StringGetChar("abcdefgh", 3);

// char code 'c' is 99

 

int StringLen( string text)

前往字符串少度

:: 输出参数

text - 字符串

示例:

string str="some text";

if(StringLen(str)<5) return(0);

 

string StringSetChar( string text, int pos, int value)

正在字符串中设置一个字符

:: 输出参数

text - 字符串 

pos - 设置字符的地位

value - 新的字符

示例:

string str="abcdefgh";

string str1=StringSetChar(str, 3, 'D');

// str1 is "abcDefgh"

 

string StringSubstr( string text, int start, int count=EMPTY)

从字符串中截与一段字符串

:: 输出参数

text - 字符串 

start - 起头索引地位

count - 截与字符数

示例:

string text="The quick brown dog jumps over the lazy fox";

string substr=StringSubstr(text, 4, 5);

// subtracted string is "quick" word

 

string StringTrimLeft( string text)

字符串左边来空格

:: 输出参数

text - 字符串

示例:

string str1=" Hello world ";

string str2=StringTrimLeft(str);

// after tri妹妹ing the str2 variable will be "Hello World "

 

string StringTrimRight( string text)

字符串右边来空格

:: 输出参数

text - 字符串

示例:

string str1=" Hello world ";

string str2=StringTrimRight(str);

// after tri妹妹ing the str2 variable will be " Hello World"

第8节 帐户疑息

账户疑息 [Account Information]

double AccountBalance()

前往账户余额

示例:

Print("Account balance = ",AccountBalance());

 

double AccountCredit()

前往账户信誉点数

示例:

Print("Account number ", AccountCredit());

 

string AccountCompany()

前往账户私司名

示例:

Print("Account company name ", AccountCompany());

 

string AccountCurrency()

前往账户所用的通货名称

示例:

Print("account currency is ", AccountCurrency());

 

double AccountEquity()

前往资产洁值

示例:

Print("Account equity = ",AccountEquity());

 

double AccountFreeMargin()

Returns free margin value of the current account.

示例:

Print("Account free margin = ",AccountFreeMargin());

 

int AccountLeverage()

前往杠杆比例

示例:

Print("Account #",AccountNumber(), " leverage is ", AccountLeverage());

 

double AccountMargin()

Returns margin value of the current account.

示例:

Print("Account margin ", AccountMargin());

 

string AccountName()

前往账户名称

示例:

Print("Account name ", AccountName());

 

int AccountNumber()

前往账户数字

示例:

Print("account number ", AccountNumber());

 

double AccountProfit()

前往账户利润

示例:

Print("Account profit ", AccountProfit());

第九节 数组函数

数组函数 [Array Functions]

int ArrayBsearch( double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND)

搜刮一个值正在数组中的地位

此函数不克不及用正在字符型或者间断数字的数组上.

:: 输出参数

array[] - 必要搜刮的数组

value - 将要搜刮的值 

count - 搜刮的数目,默许搜刮一切的数组

start - 搜刮的起头点,默许从头起头

direction - 搜刮的标的目的,MODE_ASCEND 次序搜刮 MODE_DESCEND 倒序搜刮

示例:

datetime daytimes[];

int shift=10,dayshift;

// All the Time[] timeseries are sorted in descendant mode

ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);

if(Time[shift]&gt>=daytimes[0]) dayshift=0;

else

{

dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);

if(Period()<PERIOD_D1)

dayshift++;

}

Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ",

TimeToStr(daytimes[dayshift]));

 

int ArrayCopy( object& dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

复造一个数组到另一个数组。

只有double[], int[], datetime[], color[], 以及 bool[] 那些类型的数组否以被复造。

:: 输出参数

dest[] - 方针数组 

source[] - 源数组 

start_dest - 从方针数组的第几位起头写进,默许为0

start_source - 从源数组的第几位起头读与,默许为0

count - 读与几多位的数组

示例:

double array1[][6];

double array2[10][6];

// fill array with some data

ArrayCopyRates(array1);

ArrayCopy(array2, array1,0,Bars-9,10);

// now array2 has first 10 bars in the history

 

int ArrayCopyRates( double& dest_array[], string symbol=NULL, int timeframe=0)

复造一段走势图上的数据到一个两维数组,数组的第两维只有6个名目别离是:

0 - 时间,

1 - 收盘价,

2 - 最高价,

3 - 最低价,

4 - 开盘价,

5 - 成接质.

:: 输出参数

dest_array[] - 方针数组

symbol - 标示,以后所必要的通货的标示

timeframe - 图表的时间线

示例:

double array1[][6];

ArrayCopyRates(array1,"EURUSD", PERIOD_H1);

Print("Current bar ",TimeToStr(array1[0][0]),"Open", array1[0][1]);

 

int ArrayCopySeries( double& array[], int series_index, string symbol=NULL, int timeframe=0)

复造一个系列的走势图数据到数组上

注: 若是series_index是MODE_TIME, 那末第一个参数必需是日期型的数组

:: 输出参数

dest_array[] - 方针数组

series_index - 念要与的系列的名称或者编号,0-5

symbol - 标示,以后所必要的通货的标示

timeframe - 图表的时间线

示例:

datetime daytimes[];

int shift=10,dayshift;

// All the Time[] timeseries are sorted in descendant mode

ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);

if(Time[shift]>=daytimes[0]) dayshift=0;

else

{

dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);

if(Period()

}

Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));

 

int ArrayDimension( int array[])

前往数组的维数

:: 输出参数

array[] - 必要查抄的数组

示例:

int num_array[10][5];

int dim_size;

dim_size=ArrayDimension(num_array);

// dim_size is 2

 

bool ArrayGetAsSeries(object array[])

查抄数组是不是有组织序列的数组(是可从末了到最起头排序过的),若是没有是前往可

:: 输出参数

array[] - 必要查抄的数组

示例:

if(ArrayGetAsSeries(array1)==true)

Print("array1 is indexed as a series array");

else

Print("array1 is indexed normally (from left to right)");

 

int ArrayInitialize( double& array[], double value)

对于数组停止始初化,前往颠末始初化的数组项的个数

:: 输出参数

array[] - 必要始初化的数组

value - 新的数组项的值

示例:

//---- 把一切数组项的值设置为2.1

double myarray[10];

ArrayInitialize(myarray,2.1);

 

bool ArrayIsSeries( object array[])

查抄数组是可间断的(time,open,close,high,low, or volume).

:: 输出参数

array[] - 必要查抄的数组

示例:

if(ArrayIsSeries(array1)==false)

ArrayInitialize(array1,0);

else

{

Print("Series array cannot be initialized!");

return(-1);

}

 

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

找没数组中最年夜值的定位

:: 输出参数

array[] - 必要查抄的数组

count - 搜刮数组中名目的个数

start - 搜刮的起头点

示例:

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

int maxValueIdx=ArrayMaximum(num_array);

Print("Max value = ", num_array[maxValueIdx]);

 

int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)

找没数组中最小值的定位

:: 输出参数

array[] - 必要查抄的数组

count - 搜刮数组中名目的个数

start - 搜刮的起头点

示例:

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

double minValueidx=ArrayMinimum(num_array);

Print("Min value = ", num_array[minValueIdx]);

 

int ArrayRange( object array[], int range_index)

与数组中指定维数中名目的数目。

:: 输出参数

array[] - 必要查抄的数组

range_index - 指定的维数

示例:

int dim_size;

double num_array[10,10,10];

dim_size=ArrayRange(num_array, 1);

 

int ArrayResize( object& array[], int new_size)

沉界说数组年夜小

:: 输出参数

array[] - 必要查抄的数组

new_size - 第一维中数组的新年夜小

示例:

double array1[][4];

int element_count=ArrayResize(array, 20);

// 数组中总名目数为八0

 

bool ArraySetAsSeries( double& array[], bool set)

设置指数数组为系列数组,数组0位的值是末了的值。前往以前的数组状况

:: 输出参数

array[] - 必要处置的数组

set - 是不是设置为系列数组,true或者者false

示例:

double macd_buffer[300];

double signal_buffer[300];

int i,limit=ArraySize(macd_buffer);

ArraySetAsSeries(macd_buffer,true);

for(i=0; i

 

macd_buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

for(i=0; i

signal_buffer[i]=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);

 

int ArraySize( object array[])

前往数组的名目数

:: 输出参数

array[] - 必要处置的数组

示例:

int count=ArraySize(array1);

for(int i=0; i

{

// do some calculations.

}

 

int ArraySort( double& array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND)

对于数组停止排序,系列数组不行停止排序

:: 输出参数

array[] - 必要处置的数组

count - 对于几多个数组项停止排序

start - 排序的起头点

sort_dir - 排序方法,MODE_ASCEND次序分列 MODE_DESCEND倒序分列

示例:

double num_array[5]={4,1,6,3,9};

// now array contains values 4,1,6,3,9

ArraySort(num_array);

// now array is sorted 1,3,4,6,9

ArraySort(num_array,MODE_DESCEND);

// now array is sorted 9,6,4,3,1

类型变换函数 [Conversion Functions]

string CharToStr( int char_code) 

将字符型变换成字符串型后果前往

:: 输出参数

char_code - 字符的ACSII码

示例:

string str="WORL" + CharToStr(44); // 44 is code for 'D'

// resulting string will be WORLD

 

string DoubleToStr( double value, int digits)

将单粗度浮点型变换成字符串型后果前往

:: 输出参数

value - 浮点型数字

digits - 小数点后几多位,0-八

示例:

string value=DoubleToStr(1.2八47341八, 5);

// value is 1.2八473

 

double NormalizeDouble( double value, int digits)

将单粗度浮点型格局化后后果前往

:: 输出参数

value - 浮点型数字

digits - 小数点后几多位,0-八

示例:

double var1=0.1234567八9;

Print(NormalizeDouble(var1,5));

// output: 0.12346

 

double StrToDouble( string value)

将字符串型变换成单粗度浮点型后果前往

:: 输出参数

value - 数字的字符串

示例:

double var=StrToDouble("103.2八12");

 

int StrToInteger( string value)

将字符串型变换成零型后果前往

:: 输出参数

value - 数字的字符串

示例:

int var1=StrToInteger("1024");

 

datetime StrToTime( string value)

将字符串型变换成时间型后果前往,输出格局为 yyyy.妹妹.dd hh:mi

:: 输出参数

value - 时间的字符串

示例:

datetime var1;

var1=StrToTime("2003.八.12 17:35");

var1=StrToTime("17:35"); // returns with current date

var1=StrToTime("2003.八.12"); // returns with midnight time "00:00"

 

string TimeToStr( datetime value, int mode=TIME_DATE|TIME_MINUTES)

将时间型变换成字符串型前往

:: 输出参数

value - 时间的数字,从1970.1.1 0:0:0 到当初的秒数

mode - 前往字符串的格局TIME_DATE(yyyy.妹妹.dd),TIME_MINUTES(hh:mi),TIME_SECONDS(hh:mi:ss)

示例:

strign var1=TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS);

第十节 专用函数

专用函数 [Co妹妹on Functions]

void Alert( ... ) 

弹没一个隐示疑息的告诫窗心

:: 输出参数

... - 肆意值,若有多个否用逗号联系

示例:

if(Close[0]>SignalLevel)

Alert("Close price coming ", Close[0],"!!!");

 

string ClientTerminalName()

前往客户末端名称

示例:

Print("Terminal name is ",ClientTerminalName());

 

string CompanyName()

前往私司名称

示例:

Print("Company name is ",CompanyName());

 

void Co妹妹ent( ... )

隐示疑息正在走势图右上角

:: 输出参数

... - 肆意值,若有多个否用逗号联系

示例:

double free=AccountFreeMargin();

Co妹妹ent("Account free margin is ",DoubleToStr(free,2),"\n","Current time is ",TimeToStr(CurTime()));

 

int GetLastError()

与末了差错正在差错中的索引地位

示例:

int err;

int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);

if(handle<1)

{

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

 

int GetTickCount()

与时间标识表记标帜,函数与归用毫秒标示的时间标识表记标帜。

示例:

int start=GetTickCount();

// do some hard calculation...

Print("Calculation time is ", GetTickCount()-start, " milliseconds.");

 

void HideTestIndicators(bool hide)

应用此函数设置一个正在Expert Advisor的启闭,正在测试实现以前指标没有归隐示正在图表上。

:: 输出参数

hide - 是可暗藏 True或者者False

示例:

HideTestIndicators(true);

 

bool IsConnected()

前往客户端是可已经连贯

示例:

if(!IsConnected())

{

Print("Connection is broken!");

return(0);

}

// Expert body that need opened connection

// ...

 

bool IsDemo()

前往是不是摹拟账户

示例:

if(IsDemo()) Print("I am working on demo account");

else Print("I am working on real account");

 

bool IsDllsAllowed()

前往是可容许载进Dll文献

示例:

#import "user32.dll"

int MessageBoxA(int hWnd ,string szText, string szCaption,int nType);

...

...

if(IsDllsAllowed()==false)

{

Print("DLL call is not allowed. Experts cannot run.");

return(0);

}

// expert body that calls external DLL functions

MessageBoxA(0,"an message","Message",MB_OK);

 

bool IsLibrariesAllowed()

前往是可容许载进库文献

示例:

#import "somelibrary.ex4"

int somefunc();

...

...

if(IsLibrariesAllowed()==false)

{

Print("Library call is not allowed. Experts cannot run.");

return(0);

}

// expert body that calls external DLL functions

somefunc();

 

bool IsStopped()

前往是可处于进行状况

示例:

while(expr!=false)

{

if(IsStopped()==true) return(0);

// long time procesing cycle

// ...

}

 

bool IsTesting()

前往是可处于测试形式

示例:

if(IsTesting()) Print("I am testing now");

 

bool IsTradeAllowed()

前往是可容许接难

示例:

if(IsTradeAllowed()) Print("Trade allowed");

 

double MarketInfo( string symbol, int type)

前往市场以后环境

:: 输出参数

symbol - 通货代码

type - 前往后果的类型

示例:

double var;

var=MarketInfo("EURUSD",MODE_BID);

 

int MessageBox( string text=NULL, string caption=NULL, int flags=EMPTY)

弹没新闻窗心,前往新闻窗心的后果

:: 输出参数

text - 窗心隐示的文字

caption - 窗心上隐示的题目

flags - 窗心选项启闭

示例:

#include

if(ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045)==false)

{

int ret=MessageBox("ObjectCreate() fails with code "+GetLastError()+"\nContinue?", "Question", MB_YESNO|MB_ICONQUESTION);

if(ret==IDNO) return(false);

}

// continue

 

int Period()

前往图表时间线的类型

示例:

Print("Period is ", Period());

 

void PlaySound( string filename)

播搁音乐文献

:: 输出参数

filename - 音频文献名

示例:

if(IsDemo()) PlaySound("alert.wav");

 

void Print( ... )

将文原挨印正在后果窗心内

:: 输出参数

... - 肆意值,复数用逗号联系

示例:

Print("Account free margin is ", AccountFreeMargin());

Print("Current time is ", TimeToStr(CurTime()));

double pi=3.1415926535八9793;

Print("PI number is ", DoubleToStr(pi,八));

// Output: PI number is 3.14159265

// Array printing

for(int i=0;i<10;i++)

Print(Close[i]);

 

bool RefreshRates()

前往数据是可已经经被革新过了

示例:

int ticket;

while(true)

{

ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert co妹妹ent",255,0,CLR_NONE);

if(ticket<=0)

{

int error=GetLastError();

if(error==134) break; // not enough money

if(error==135) RefreshRates(); // prices changed

break;

}

else { OrderPrint(); break; }

//---- 10 seconds wait

Sleep(10000);

}

 

void SendMail( string subject, string some_text)

领送邮件到指定疑箱,必要到菜双 Tools -> Options -> Email 中将邮件翻开.

:: 输出参数

subject - 邮件题目

some_text - 邮件内容

示例:

double lastclose=Close[0];

if(lastclose<MY_SIGNAL)

SendMail("from your expert", "Price dropped down to "+DoubleToStr(lastclose));

 

string ServerAddress()

前往效劳器地点

示例:

Print("Server address is ", ServerAddress());

 

void Sleep( int milliseconds)

设置线程久停时间

:: 输出参数

milliseconds - 久停时间 1000 = 1秒

示例:

Sleep(5);

 

void SpeechText( string text, int lang_mode=SPEECH_ENGLISH)

应用Speech停止语音输入

:: 输出参数

text - 浏览的文字

lang_mode - 语音形式 SPEECH_ENGLISH (默许的) 或者 SPEECH_NATIVE

示例:

double lastclose=Close[0];

SpeechText("Price dropped down to "+DoubleToStr(lastclose));

 

string Symbol()

前往以后以后通货的名称

示例:

int total=OrdersTotal();

for(int pos=0;pos<TOTAL;POS++)

{

// check selection result becouse order may be closed or deleted at this time!

if(OrderSelect(pos, SELECT_BY_POS)==false) continue;

if(OrderType()>OP_SELL || OrderSymbol()!=Symbol()) continue;

// do some orders processing...

}

 

int UninitializeReason()

与患上步伐终始初化的理由

示例:

// this is example

int deinit()

{

switch(UninitializeReason())

{

case REASON_CHARTCLOSE:

case REASON_REMOVE: CleanUp(); break; // clean up and free all expert's resources.

case REASON_RECOMPILE:

case REASON_CHARTCHANGE:

case REASON_PARAMETERS:

case REASON_ACCOUNT: StoreData(); break; // prepare to restart

}

//...

}

第十一节 自界说函数

自界说指标函数 [Custom Indicator Functions]

void IndicatorBuffers(int count)

设置自界说指标慢存数

:: 输出参数

count - 慢存数目

示例:

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Silver

//---- indicator parameters

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//---- indicator buffers

double ind_buffer1[];

double ind_buffer2[];

double ind_buffer3[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//---- 3 indicator buffers mapping

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//---- name for DataWindow and indicator subwindow label

IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- initialization done

return(0);

}

 

int IndicatorCounted()

前往慢存数目

示例:

int start()

{

int limit;

int counted_bars=IndicatorCounted();

//---- check for possible errors

if(counted_bars<0) return(-1);

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- main loop

for(int i=0; i

 

{

//---- ma_shift set to 0 because SetIndexShift called abowe

ExtBlueBuffer[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);

}

//---- done

return(0);

}

 

void IndicatorDigits( int digits)

设置指标切确度

:: 输出参数

digits - 小数点后的小数位数

示例:

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Silver

//---- indicator parameters

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//---- indicator buffers

double ind_buffer1[];

double ind_buffer2[];

double ind_buffer3[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//---- 3 indicator buffers mapping

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//---- name for DataWindow and indicator subwindow label

IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- initialization done

return(0);

}

 

void IndicatorShortName( string name)

设置指标的简称

:: 输出参数

name - 新的简称

示例:

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Silver

//---- indicator parameters

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//---- indicator buffers

double ind_buffer1[];

double ind_buffer2[];

double ind_buffer3[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//---- 3 indicator buffers mapping

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//---- name for DataWindow and indicator subwindow label

IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- initialization done

return(0);

}

 

void SetIndexArrow( int index, int code)

正在指标上设置一个箭头符号

:: 输出参数

index - 第几根指标线 0-7

code - 符号的编码,参考 Wingdings 字体

示例:

SetIndexArrow(0, 217);

 

bool SetIndexBuffer( int index, double array[])

设置指标线的慢存数组

:: 输出参数

index - 第几根指标线 0-7

array[] - 慢存的数组

示例:

double ExtBufferSilver[];

int init()

{

SetIndexBuffer(0, ExtBufferSilver); // set buffer for first line

// ...

}

 

void SetIndexDrawBegin( int index, int begin)

设置划线的起头点

:: 输出参数

index - 第几根指标线 0-7

begin - 划线的起头点

示例:

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Silver

//---- indicator parameters

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//---- indicator buffers

double ind_buffer1[];

double ind_buffer2[];

double ind_buffer3[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);

SetIndexDrawBegin(0,SignalSMA);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);

//---- 3 indicator buffers mapping

SetIndexBuffer(0,ind_buffer1);

SetIndexBuffer(1,ind_buffer2);

SetIndexBuffer(2,ind_buffer3);

//---- name for DataWindow and indicator subwindow label

IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");

//---- initialization done

return(0);

}

 

void SetIndexEmptyValue( int index, double value)

设置划线的空值,空值没有划正在以及呈现正在数据窗心

:: 输出参数

index - 第几根指标线 0-7

value - 新的空值

示例:

SetIndexEmptyValue(6,0.0001);

 

void SetIndexLabel( int index, string text)

设置指标线的名称

:: 输出参数

index - 第几根指标线 0-7

text - 线的名称,Null没有会隐示正在数据窗心中

示例:

//+------------------------------------------------------------------+

//| Ichimoku Kinko Hyo initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,Tenkan_Buffer);

SetIndexDrawBegin(0,Tenkan-1);

SetIndexLabel(0,"Tenkan Sen");

//----

SetIndexStyle(1,DRAW_LINE);

SetIndexBuffer(1,Kijun_Buffer);

SetIndexDrawBegin(1,Kijun-1);

SetIndexLabel(1,"Kijun Sen");

//----

a_begin=Kijun; if(a_begin SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);

SetIndexBuffer(2,SpanA_Buffer);

SetIndexDrawBegin(2,Kijun+a_begin-1);

SetIndexShift(2,Kijun);

//---- Up Kumo bounding line does not show in the DataWindow

SetIndexLabel(2,NULL);

SetIndexStyle(5,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(5,SpanA2_Buffer);

SetIndexDrawBegin(5,Kijun+a_begin-1);

SetIndexShift(5,Kijun);

SetIndexLabel(5,"Senkou Span A");

//----

SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);

SetIndexBuffer(3,SpanB_Buffer);

SetIndexDrawBegin(3,Kijun+Senkou-1);

SetIndexShift(3,Kijun);

//---- Down Kumo bounding line does not show in the DataWindow

SetIndexLabel(3,NULL);

//----

SetIndexStyle(6,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(6,SpanB2_Buffer);

SetIndexDrawBegin(6,Kijun+Senkou-1);

SetIndexShift(6,Kijun);

SetIndexLabel(6,"Senkou Span B");

//----

SetIndexStyle(4,DRAW_LINE);

SetIndexBuffer(4,Chinkou_Buffer);

SetIndexShift(4,-Kijun);

SetIndexLabel(4,"Chinkou Span");

//----

return(0);

}

 

void SetIndexShift( int index, int shift)

设置指标线的位移数

:: 输出参数

index - 第几根指标线 0-7

shift - 位移几多

示例:

//+------------------------------------------------------------------+

//| Alligator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- line shifts when drawing

SetIndexShift(0,JawsShift);

SetIndexShift(1,TeethShift);

SetIndexShift(2,LipsShift);

//---- first positions skipped when drawing

SetIndexDrawBegin(0,JawsShift+JawsPeriod);

SetIndexDrawBegin(1,TeethShift+TeethPeriod);

SetIndexDrawBegin(2,LipsShift+LipsPeriod);

//---- 3 indicator buffers mapping

SetIndexBuffer(0,ExtBlueBuffer);

SetIndexBuffer(1,ExtRedBuffer);

SetIndexBuffer(2,ExtLimeBuffer);

//---- drawing settings

SetIndexStyle(0,DRAW_LINE);

SetIndexStyle(1,DRAW_LINE);

SetIndexStyle(2,DRAW_LINE);

//---- index labels

SetIndexLabel(0,"Gator Jaws");

SetIndexLabel(1,"Gator Teeth");

SetIndexLabel(2,"Gator Lips");

//---- initialization done

return(0);

}

 

void SetIndexStyle( int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)

设置指标线的样式

:: 输出参数

index - 第几根指标线 0-7

type - 线形态的品种,详睹线条品种

style - 划线的样式

width - 隐患上严度(1,2,3,4,5)

clr - 线的颜色

示例:

SetIndexStyle(3, DRAW_LINE, EMPTY, 2, Red);

第十两节 时间函数

日期时间函数 [Date & Time Functions]    

datetime CurTime( )

前往以后时间

示例:

if(CurTime()-OrderOpenTime()<360) return(0);

 

int Day()

前往以后日期

示例:

if(Day()<5) return(0);

 

int DayOfWeek( )

前往以后日期是礼拜几 0-礼拜地,1,2,3,4,5,6

示例:

// do not work on holidays.

if(DayOfWeek()==0 || DayOfWeek()==6) return(0);

 

int DayOfYear( )

前往以后日期正在年内的第几地

示例:

if(DayOfYear()==245)

return(true);

 

int Hour()

前往以后的小时数 0-23

示例:

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

 

datetime LocalTime()

前往以后电脑时间

示例:

if(LocalTime()-OrderOpenTime()<360) return(0);

 

int Minute()

前往以后分钟

示例:

if(Minute()<=15)

return("first quarter");

 

int Month()

前往以后月份

示例:

if(Month()<=5)

return("first half of year");

 

int Seconds()

前往以后秒数

示例:

if(Seconds()<=15)

return(0);

 

int TimeDay( datetime date)

前往输出日期中的日期

:: 输出参数

date - 输出日期

示例:

int day=TimeDay(D'2003.12.31');

// day is 31

 

int TimeDayOfWeek( datetime date)

前往输出日期中的日期是礼拜几 (0-6)

:: 输出参数

date - 输出日期

示例:

int weekday=TimeDayOfWeek(D'2004.11.2');

// day is 2 - tuesday

 

int TimeDayOfYear( datetime date)

前往输出日期中的日期正在昔时中的第几地

:: 输出参数

date - 输出日期

示例:

int day=TimeDayOfYear(CurTime());

 

int TimeHour( datetime time)

前往输出日期中的小时

:: 输出参数

date - 输出日期

示例:

int h=TimeHour(CurTime());

 

int TimeMinute( datetime time)

前往输出日期中的分钟

:: 输出参数

date - 输出日期

示例:

int m=TimeMinute(CurTime());

 

int TimeMonth( datetime time)

前往输出日期中的月份

:: 输出参数

date - 输出日期

示例:

int m=TimeMonth(CurTime());

 

int TimeSeconds( datetime time)

前往输出日期中的秒钟

:: 输出参数

date - 输出日期

示例:

int m=TimeSeconds(CurTime());

 

int TimeYear( datetime time)

前往输出日期中的年份

:: 输出参数

date - 输出日期

示例:

int y=TimeYear(CurTime());

 

int TimeYear( datetime time)

前往以后年份

示例:

// return if date before 1 May 2002

if(Year()==2002 && Month()<5)

return(0);

第十三节 文献函数

文献处置函数 [File Functions]

void FileClose(int handle)

敞开在已经经翻开的文献.

:: 输出参数

handle - FileOpen()前往的句柄

示例:

int handle=FileOpen("filename", FILE_CSV|FILE_READ);

if(handle>0)

{

// working with file ...

FileClose(handle);

}

 

void FileDelete(string filename)

增除了文献,若是产生差错否以经由过程GetLastError()去查问

注:您只可操作terminal_dir\experts\files目次高的文献

:: 输出参数

filename - 目次以及文献名

示例:

// file my_table.csv will be deleted from terminal_dir\experts\files directory

int lastError;

FileDelete("my_table.csv");

lastError=GetLastError();

if(laseError!=ERR_NOERROR)

{

Print("An error ocurred while (",lastError,") deleting file my_table.csv");

return(0);

}

 

void FileFlush(int handle)

将慢存中的数据革新到磁盘下来

:: 输出参数

handle - FileOpen()前往的句柄

示例:

int bars_count=Bars;

int handle=FileOpen("mydat.csv",FILE_CSV|FILE_WRITE);

if(handle>0)

{

FileWrite(handle, "#","OPEN","CLOSE","HIGH","LOW");

for(int i=0;i<BARS_COUNT;I++)

FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]);

FileFlush(handle);

...

for(int i=0;i<BARS_COUNT;I++)

FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]);

FileClose(handle);

}

 

bool FileIsEnding(int handle)

查抄是可到了文献首.

:: 输出参数

handle - FileOpen()前往的句柄

示例:

if(FileIsEnding(h1))

{

FileClose(h1);

return(false);

}

 

bool FileIsLineEnding( int handle)

查抄止是可到告终束

:: 输出参数

handle - FileOpen()前往的句柄

示例:

if(FileIsLineEnding(h1))

{

FileClose(h1);

return(false);

}

 

int FileOpen( string filename, int mode, int delimiter=';')

翻开文献,若是失败前往值小于1,否以经由过程GetLastError()猎取差错

注:只可操作terminal_dir\experts\files目次的文献

:: 输出参数

filename - 目次文献名

mode - 翻开形式 FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.

delimiter - CSV型翻开形式用的联系符,默许为分号(;).

示例:

int handle;

handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');

if(handle<1)

{

Print("File my_data.dat not found, the last error is ", GetLastError());

return(false);

}

 

int FileOpenHistory( string filename, int mode, int delimiter=';')

翻开汗青数据文献,若是失败前往值小于1,否以经由过程GetLastError()猎取差错

:: 输出参数

filename - 目次文献名

mode - 翻开形式 FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.

delimiter - CSV型翻开形式用的联系符,默许为分号(;).

示例:

int handle=FileOpenHistory("USDX240.HST",FILE_BIN|FILE_WRITE);

if(handle<1)

{

Print("Cannot create file USDX240.HST");

return(false);

}

// work with file

// ...

FileClose(handle);

 

int FileReadArray( int handle, object& array[], int start, int count)

将两入造文献读与到数组中,前往读与的条数,否以经由过程GetLastError()猎取差错

注:正在读与以前要整合佳数组年夜小

:: 输出参数

handle - FileOpen()前往的句柄

array[] - 写进的数组

start - 正在数组中存储的起头点

count - 读与几多个对于象

示例:

int handle;

double varray[10];

handle=FileOpen("filename.dat", FILE_BIN|FILE_READ);

if(handle>0)

{

FileReadArray(handle, varray, 0, 10);

FileClose(handle);

}

 

double FileReadDouble( int handle, int size=DOUBLE_VALUE)

从文献中读与浮点型数据,数字否所以八byte的double型或者者是4byte的float型。

:: 输出参数

handle - FileOpen()前往的句柄

size - 数字个是年夜小,DOUBLE_VALUE(八 bytes) 或者者 FLOAT_VALUE(4 bytes).

示例:

int handle;

double value;

handle=FileOpen("mydata.dat",FILE_BIN);

if(handle>0)

{

value=FileReadDouble(handle,DOUBLE_VALUE);

FileClose(handle);

}

 

int FileReadInteger( int handle, int size=LONG_VALUE)

从文献中读与零形型数据,数字否所以1,2,4byte的少度

:: 输出参数

handle - FileOpen()前往的句柄

size - 数字个是年夜小,CHAR_VALUE(1 byte), SHORT_VALUE(2 bytes) 或者者 LONG_VALUE(4 bytes).

示例:

int handle;

int value;

handle=FileOpen("mydata.dat", FILE_BIN|FILE_READ);

if(handle>0)

{

value=FileReadInteger(h1,2);

FileClose(handle);

}

 

double FileReadNumber( int handle)

从文献中读与数字,只可正在CSV面应用

:: 输出参数

handle - FileOpen()前往的句柄

示例:

int handle;

int value;

handle=FileOpen("filename.csv", FILE_CSV, ';');

if(handle>0)

{

value=FileReadNumber(handle);

FileClose(handle);

}

 

string FileReadString( int handle, int length=0)

从文献中读与字符串

:: 输出参数

handle - FileOpen()前往的句柄

length - 读与字符串少度

示例:

int handle;

string str;

handle=FileOpen("filename.csv", FILE_CSV|FILE_READ);

if(handle>0)

{

str=FileReadString(handle);

FileClose(handle);

}

 

bool FileSeek( int handle, int offset, int origin)

挪动指针挪动到某一点,若是胜利前往true

:: 输出参数

handle - FileOpen()前往的句柄

offset - 设置的本点

origin - SEEK_CUR从以后地位起头 SEEK_SET从文献头部起头 SEEK_END 从文献首部起头

示例:

int handle=FileOpen("filename.csv", FILE_CSV|FILE_READ, ';');

if(handle>0)

{

FileSeek(handle, 10, SEEK_SET);

FileReadInteger(handle);

FileClose(handle);

handle=0;

}

 

int FileSize( int handle)

前往文献年夜小

:: 输出参数

handle - FileOpen()前往的句柄

示例:

int handle;

int size;

handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);

if(handle>0)

{

size=FileSize(handle);

Print("my_table.dat size is ", size, " bytes");

FileClose(handle);

}

 

int FileTell( int handle)

前往文献读写指针以后的地位

:: 输出参数

handle - FileOpen()前往的句柄

示例:

int handle;

int pos;

handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);

// reading some data

pos=FileTell(handle);

Print("current position is ", pos);

 

int FileWrite( int handle, ... )

向文献写进数据

:: 输出参数

handle - FileOpen()前往的句柄

... - 写进的数据

示例:

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("filename", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));

FileClose(handle);

}

 

int FileWriteArray( int handle, object array[], int start, int count)

向文献写进数组

:: 输出参数

handle - FileOpen()前往的句柄

array[] - 要写进的数组

start - 写进的起头点

count - 写进的名目数

示例:

int handle;

double BarOpenValues[10];

// copy first ten bars to the array

for(int i=0;i<10; i++)

BarOpenValues[i]=Open[i];

// writing array to the file

handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);

if(handle>0)

{

FileWriteArray(handle, BarOpenValues, 3, 7); // writing last 7 elements

FileClose(handle);

}

 

int FileWriteDouble( int handle, double value, int size=DOUBLE_VALUE)

向文献写进浮点型数据

:: 输出参数

handle - FileOpen()前往的句柄

value - 要写进的值

size - 写进的格局,DOUBLE_VALUE (八 bytes, default)或者FLOAT_VALUE (4 bytes).

示例:

int handle;

double var1=0.345;

handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);

if(handle<1)

{

Print("can't open file error-",GetLastError());

return(0);

}

FileWriteDouble(h1, var1, DOUBLE_VALUE);

//...

FileClose(handle);

 

int FileWriteInteger( int handle, int value, int size=LONG_VALUE)

向文献写进零型数据

:: 输出参数

handle - FileOpen()前往的句柄

value - 要写进的值

size - 写进的格局,CHAR_VALUE (1 byte),SHORT_VALUE (2 bytes),LONG_VALUE (4 bytes, default).

示例:

int handle;

int value=10;

handle=FileOpen("filename.dat", FILE_BIN|FILE_WRITE);

if(handle<1)

{

Print("can't open file error-",GetLastError());

return(0);

}

FileWriteInteger(handle, value, SHORT_VALUE);

//...

FileClose(handle);

 

int FileWriteString( int handle, string value, int length)

向文献写进字符串数据

:: 输出参数

handle - FileOpen()前往的句柄

value - 要写进的值

length - 写进的字符少度

示例:

int handle;

string str="some string";

handle=FileOpen("filename.bin", FILE_BIN|FILE_WRITE);

if(handle<1)

{

Print("can't open file error-",GetLastError());

return(0);

}

FileWriteString(h1, str, 八);

FileClose(handle);

第十四节 齐局变质函数

bool GlobalVariableCheck( string name)

查抄齐局变质是可存留 

:: 输出参数

name - 齐局变质的名称

示例:

// check variable before use

if(!GlobalVariableCheck("g1"))

GlobalVariableSet("g1",1);

 

bool GlobalVariableDel( string name)

增除了齐局变质

:: 输出参数

name - 齐局变质的名称

示例:

// deleting global variable with name "gvar_1"

GlobalVariableDel("gvar_1");

 

double GlobalVariableGet( string name)

猎取齐局变质的值

:: 输出参数

name - 齐局变质的名称

示例:

double v1=GlobalVariableGet("g1");

//---- check function call result

if(GetLastError()!=0) return(false);

//---- continue processing

 

double GlobalVariableGet( string name)

猎取齐局变质的值

:: 输出参数

name - 齐局变质的名称

示例:

double v1=GlobalVariableGet("g1");

//---- check function call result

if(GetLastError()!=0) return(false);

//---- continue processing

 

datetime GlobalVariableSet( string name, double value )

设置齐局变质的值

:: 输出参数

name - 齐局变质的名称

value - 齐局变质的值

示例:

//---- try to set new value

if(GlobalVariableSet("BarsTotal",Bars)==0)

return(false);

//---- continue processing

 

bool GlobalVariableSetOnCondition( string name, double value, double check_value)

有前提的设置齐局变质的值

:: 输出参数

name - 齐局变质的名称

value - 齐局变质的值

check_value - 查抄变质的值

示例:

int init()

{

//---- create global variable

GlobalVariableSet("DATAFILE_SEM",0);

//...

}

int start()

{

//---- try to lock co妹妹on resource

while(!IsStopped())

{

//---- locking

if(GlobalVariableSetOnCondition("DATAFILE_SEM",1,0)==true) break;

//---- may be variable deleted?

if(GetLastError()==ERR_GLOBAL_VARIABLE_NOT_FOUND) return(0);

//---- sleeping

Sleep(500);

}

//---- resource locked

// ... do some work

//---- unlock resource

GlobalVariableSet("DATAFILE_SEM",0);

}

 

void GlobalVariablesDeleteAll( )

增除了一切齐局变质

示例:

GlobalVariablesDeleteAll();

第十五节  数教运算函数

double MathAbs( double value) 

前往数字的相对值 

:: 输出参数

value - 要处置的数字

示例:

double dx=-3.141593, dy;

// calc MathAbs

dy=MathAbs(dx);

Print("The absolute value of ",dx," is ",dy);

// Output: The absolute value of -3.141593 is 3.141593

 

double MathArccos( double x)

计较反余弦值

:: 输出参数

value - 要处置的数字,范畴-1到1

示例:

double x=0.32696, y;

y=asin(x);

Print("Arcsine of ",x," = ",y);

y=acos(x);

Print("Arccosine of ",x," = ",y);

//Output: Arcsine of 0.326960=0.3330八5

//Output: Arccosine of 0.326960=1.237711

 

double MathArcsin( double x)

计较归正弦值

:: 输出参数

x - 要处置的值

示例:

double x=0.32696, y;

y=MathArcsin(x);

Print("Arcsine of ",x," = ",y);

y=acos(x);

Print("Arccosine of ",x," = ",y);

//Output: Arcsine of 0.326960=0.3330八5

//Output: Arccosine of 0.326960=1.237711

 

double MathArctan( double x)

计较归正切值

:: 输出参数

x - 要处置的值

示例:

double x=-八62.42, y;

y=MathArctan(x);

Print("Arctangent of ",x," is ",y);

//Output: Arctangent of -八62.42 is -1.5696

 

double MathCeil( double x)

前往向进步位后的值

:: 输出参数

x - 要处置的值

示例:

double y;

y=MathCeil(2.八);

Print("The ceil of 2.八 is ",y);

y=MathCeil(-2.八);

Print("The ceil of -2.八 is ",y);

 

 

double MathCos( double value)

计较余弦值

:: 输出参数

value - 要处置的值

示例:

double pi=3.1415926535;

double x, y;

x=pi/2;

y=MathSin(x);

Print("MathSin(",x,") = ",y);

y=MathCos(x);

Print("MathCos(",x,") = ",y);

//Output: MathSin(1.570八)=1

// MathCos(1.570八)=0

 

double MathExp( double d)

Returns value the number e raised to the power d. On overflow, the function returns INF (infinite) and on underflow, MathExp returns 0.

:: 输出参数

d - A number specifying a power.

示例:

double x=2.3025八5093,y;

y=MathExp(x);

Print("MathExp(",x,") = ",y);

//Output: MathExp(2.3026)=10

 

double MathFloor( double x)

前往向落后位后的值

:: 输出参数

x - 要处置的值

示例:

double y;

y=MathFloor(2.八);

Print("The floor of 2.八 is ",y);

y=MathFloor(-2.八);

Print("The floor of -2.八 is ",y);

 

 

double MathLog( double x)

计较对于数

:: 输出参数

x - 要处置的值

示例:

double x=9000.0,y;

y=MathLog(x);

Print("MathLog(",x,") = ", y);

//Output: MathLog(9000)=9.1049八

 

double MathMax( double value1, double value2)

计较二个值中的最年夜值

:: 输出参数

value1 - 第一个值 

value2 - 第两个值

示例:

double result=MathMax(1.0八,Bid);

 

double MathMin( double value1, double value2)

计较二个值中的最小值

:: 输出参数

value1 - 第一个值 

value2 - 第两个值

示例:

double result=MathMin(1.0八,Ask);

 

double MathMod( double value, double value2)

计较二个值相除了的余数

:: 输出参数

value - 被除了数 

value2 - 除了数

示例:

double x=-10.0,y=3.0,z;

z=MathMod(x,y);

Print("The remainder of ",x," / ",y," is ",z);

//Output: The remainder of -10 / 3 is -1

 

double MathPow( double base, double exponent)

计较指数

:: 输出参数

base - 基数

exponent - 指数

示例:

double x=2.0,y=3.0,z;

z=MathPow(x,y);

Printf(x," to the power of ",y," is ", z);

//Output: 2 to the power of 3 is 八

 

int MathRand( )

与随机数

示例:

MathSrand(LocalTime());

// Display 10 numbers.

for(int i=0;i<10;i++ )

Print("random value ", MathRand());

 

double MathRound( double value)

与四舍五进的值

:: 输出参数

value - 要处置的值

示例:

double y=MathRound(2.八);

Print("The round of 2.八 is ",y);

y=MathRound(2.4);

Print("The round of -2.4 is ",y);

//Output: The round of 2.八 is 3

// The round of -2.4 is -2

 

double MathSin( double value)

计较邪弦数

:: 输出参数

value - 要处置的值

示例:

double pi=3.1415926535;

double x, y;

x=pi/2;

y=MathSin(x);

Print("MathSin(",x,") = ",y);

y=MathCos(x);

Print("MathCos(",x,") = ",y);

//Output: MathSin(1.570八)=1

// MathCos(1.570八)=0

 

double MathSqrt( double x)

计较仄圆根

:: 输出参数

x - 要处置的值

示例:

double question=45.35, answer;

answer=MathSqrt(question);

if(question<0)

Print("Error: MathSqrt returns ",answer," answer");

else

Print("The square root of ",question," is ", answer);

//Output: The square root of 45.35 is 6.73

 

void MathSrand( int seed)

经由过程Seed发生随机数

:: 输出参数

seed - 随机数的种子

示例:

MathSrand(LocalTime());

// Display 10 numbers.

for(int i=0;i<10;i++ )

Print("random value ", MathRand());

 

double MathTan( double x)

计较邪切值

:: 输出参数

x - 要计较的角度

示例:

double pi=3.1415926535;

double x,y;

x=MathTan(pi/4);

Print("MathTan(",pi/4," = ",x);

//Output: MathTan(0.7八56)=1

第十五节 物体函数 [Object Functions]

bool ObjectCreate( string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)

创立物件 

:: 输出参数

name - 物件名称

type - 物件类型.

window - 物件所正在窗心的索引值

time1 - 时间点1

price1 - 代价点1

time2 - 时间点2

price2 - 代价点2

time3 - 时间点3

price3 - 代价点3

示例:

// new text object

if(!ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045))

{

Print("error: can't create text_object! code #",GetLastError());

return(0);

}

// new label object

if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0))

{

Print("error: can't create label_object! code #",GetLastError());

return(0);

}

ObjectSet("label_object", OBJPROP_XDISTANCE, 200);

ObjectSet("label_object", OBJPROP_YDISTANCE, 100);

 

bool ObjectDelete( string name)

增除了物件

:: 输出参数

name - 物件名称

示例:

ObjectDelete("text_object");

 

string ObjectDescription( string name)

前往物件描写

:: 输出参数

name - 物件名称

示例:

// writing chart's object list to the file

int handle, total;

string obj_name,fname;

// file name

fname="objlist_"+Symbol();

handle=FileOpen(fname,FILE_CSV|FILE_WRITE);

if(handle!=false)

{

total=ObjectsTotal();

for(int i=-;i<TOTAL;I++)

{

obj_name=ObjectName(i);

FileWrite(handle,"Object "+obj_name+" description= "+ObjectDescription(obj_name));

}

FileClose(handle);

}

 

int ObjectFind( string name)

寻觅物件,前往物件的索引值

:: 输出参数

name - 物件名称

示例:

if(ObjectFind("line_object2")!=win_idx) return(0);

 

double ObjectGet( string name, int index)

猎取物件的值

:: 输出参数

name - 物件名称

index - 与值属性的索引

示例:

color oldColor=ObjectGet("hline12", OBJPROP_COLOR);

 

string ObjectGetFiboDescription( string name, int index)

与物件的斐波缴契数列天描写

:: 输出参数

name - 物件名称

index - 斐波缴契数列的品级索引

示例:

#include

...

string text;

for(int i=0;i<32;i++)

{

text=ObjectGetFiboDescription(MyObjectName,i);

//---- check. may be objects's level count less than 32

if(GetLastError()!=ERR_NO_ERROR) break;

Print(MyObjectName,"level: ",i," description: ",text);

}

 

int ObjectGetShiftByValue( string name, double value)

与物件的位移值

:: 输出参数

name - 物件名称

value - 代价

示例:

int shift=ObjectGetShiftByValue("MyTrendLine#123", 1.34);

 

double ObjectGetValueByShift( string name, int shift)

与物件位移后的值

:: 输出参数

name - 物件名称

shift - 位移数

示例:

double price=ObjectGetValueByShift("MyTrendLine#123", 11);

 

bool ObjectMove( string name, int point, datetime time1, double price1)

挪动物件

:: 输出参数

name - 物件名称

point - 整合的索引 

time1 - 新的时间 

price1 - 新的代价

示例:

ObjectMove("MyTrend", 1, D'2005.02.25 12:30', 1.2345);

 

string ObjectName( int index)

与物件名称

:: 输出参数

index - 物件的索引

示例:

int obj_total=ObjectsTotal();

string name;

for(int i=0;i<OBJ_TOTAL;I++)

{

name=ObjectName(i);

Print(i,"Object name is " + name);

}

 

int ObjectsDeleteAll( int window, int type=EMPTY)

增除了一切物件

:: 输出参数

window - 物件所正在的窗心索引

type - 增除了物件的类型

示例:

ObjectsDeleteAll(2, OBJ_HLINE); // removes all horizontal line objects from window 3 (index 2).

 

bool ObjectSet( string name, int index, double value)

设置物件的值

:: 输出参数

name - 物件的名称

index - 物件属性的索引值 

value - 新的属性值

示例:

// moving first coord to last bar time

ObjectSet("MyTrend", OBJPROP_TIME1, Time[0]);

// setting second fibo level

ObjectSet("MyFibo", OBJPROP_FIRSTLEVEL+1, 1.234);

// setting object visibility. object will be shown only on 15 minute and 1 hour charts

ObjectSet("MyObject", OBJPROP_TIMEFRAMES, OBJ_PERIOD_M15 | OBJ_PERIOD_H1);

 

bool ObjectSetFiboDescription( string name, int index, string text)

设置物件斐波缴契数列的描写

:: 输出参数

name - 物件的名称

index - 物件斐波缴契数列的索引值 

text - 新的描写

示例:

ObjectSetFiboDescription("MyFiboObject,2,"Second line");

 

bool ObjectSetText( string name, string text, int font_size, string font=NULL, color text_color=CLR_NONE)

设置物件的描写

:: 输出参数

name - 物件的名称

text - 文原

font_size - 字体年夜小 

font - 字体名称 

text_color - 字体颜色

示例:

ObjectSetText("text_object", "Hello world!", 10, "Times New Roman", Green);

 

void ObjectsRedraw( )

沉画一切物件

示例:

ObjectsRedraw();

 

int ObjectsTotal( )

与物件总额

示例:

int obj_total=ObjectsTotal();

string name;

for(int i=0;i<OBJ_TOTAL;I++)

{

name=ObjectName(i);

Print(i,"Object name is for object #",i," is " + name);

}

 

int ObjectType( string name)

与物件类型

:: 输出参数

name - 物件的名称

示例:

if(ObjectType("line_object2")!=OBJ_HLINE) return(0);

第十五节 尺度常质

尺度常质 [Standard Constants] 

Applied price enumeration

代价类型枚举

示例:

 

Constant Value Description

PRICE_CLOSE 0 开盘价

PRICE_OPEN 1 收盘价

PRICE_HIGH 2 最低价

PRICE_LOW 3 最高价

PRICE_MEDIAN 4 最低价以及最高价的均匀价

PRICE_TYPICAL 5 最低价、最高价以及开盘价的均匀价

PRICE_WEIGHTED 6 启、开盘价以及最下最高价的均匀价

 

 

Drawing shape style enumeration

绘图形态样式枚举,

形态:

 

Constant Value Description

DRAW_LINE 0 Drawing line.

DRAW_SECTION 1 Drawing sections.

DRAW_HISTOGRAM 2 Drawing histogram.

DRAW_ARROW 3 Drawing arrows (symbols).

DRAW_NONE 12 No drawing.

 

样式:

 

Constant Value Description

STYLE_SOLID 0 The pen is solid.

STYLE_DASH 1 The pen is dashed.

STYLE_DOT 2 The pen is dotted.

STYLE_DASHDOT 3 The pen has alternating dashes and dots.

STYLE_DASHDOTDOT 4 The pen has alternating dashes and double dots.

 

Ichimoku Kinko Hyo modes enumeration

Ichimoku指标形式枚举

 

Constant Value Description

MODE_TENKANSEN 1 Tenkan-sen.

MODE_KIJUNSEN 2 Kijun-sen.

MODE_SENKOUSPANA 3 Senkou Span A.

MODE_SENKOUSPANB 4 Senkou Span B.

MODE_CHINKOUSPAN 5 Chinkou Span.

 

Indicators line identifiers

指标线标示符

指标线形式,应用正在 iMACD(), iRVI() 以及 iStochastic() 中:

 

Constant Value Description

MODE_MAIN 0 Base indicator line.

MODE_SIGNAL 1 Signal line.

 

指标线形式,应用正在 iADX() 中:

 

Constant Value Description

MODE_MAIN 0 Base indicator line.

MODE_PLUSDI 1 +DI indicator line.

MODE_MINUSDI 2 -DI indicator line.

 

指标线形式,应用正在 iBands(), iEnvelopes(), iEnvelopesOnArray(), iFractals() and iGator() 中:

 

Constant Value Description

MODE_UPPER 1 Upper line.

MODE_LOWER 2 Lower line.

 

Market information identifiers

市场疑息标识

 

Constant Value Description

MODE_LOW 1 Low day price.

MODE_HIGH 2 High day price.

MODE_TIME 5 The last incoming quotation time.

MODE_BID 9 Last incoming bid price.

MODE_ASK 10 Last incoming ask price.

MODE_POINT 11 Point size.

MODE_DIGITS 12 Digits after decimal point.

MODE_SPREAD 13 Spread value in points.

MODE_STOPLEVEL 14 Stop level in points.

MODE_LOTSIZE 15 Lot size in the base currency.

MODE_TICKVALUE 16 Tick value.

MODE_TICKSIZE 17 Tick size.

MODE_SWAPLONG 1八 Swap of the long position.

MODE_SWAPSHORT 19 Swap of the short position.

MODE_STARTING 20 Market starting date (usually used for future markets).

MODE_EXPIRATION 21 Market expiration date (usually used for future markets).

MODE_TRADEALLOWED 22 Trade is allowed for the symbol.

 

Moving Average method enumeration

挪动均匀线形式枚举,iAlligator(), iEnvelopes(), iEnvelopesOnArray, iForce(), iGator(), iMA(), iMAOnArray(), iStdDev(), iStdDevOnArray(), iStochastic()那些会挪用此枚举

 

Constant Value Description

MODE_SMA 0 Simple moving average,

MODE_EMA 1 Exponential moving average,

MODE_SMMA 2 Smoothed moving average,

MODE_LWMA 3 Linear weighted moving average.

 

 

Object properties enumeration

物件属性枚举

 

Constant Value Description

OBJPROP_TIME1 0 Datetime value to set/get first coordinate time part.

OBJPROP_PRICE1 1 Double value to set/get first coordinate price part.

OBJPROP_TIME2 2 Datetime value to set/get second coordinate time part.

OBJPROP_PRICE2 3 Double value to set/get second coordinate price part.

OBJPROP_TIME3 4 Datetime value to set/get third coordinate time part.

OBJPROP_PRICE3 5 Double value to set/get third coordinate price part.

OBJPROP_COLOR 6 Color value to set/get object color.

OBJPROP_STYLE 7 Value is one of STYLE_SOLID, STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT constants to set/get object line style.

OBJPROP_WIDTH 八 Integer value to set/get object line width. Can be from 1 to 5.

OBJPROP_BACK 9 Boolean value to set/get background drawing flag for object.

OBJPROP_RAY 10 Boolean value to set/get ray flag of object.

OBJPROP_ELLIPSE 11 Boolean value to set/get ellipse flag for fibo arcs.

OBJPROP_SCALE 12 Double value to set/get scale object property.

OBJPROP_ANGLE 13 Double value to set/get angle object property in degrees.

OBJPROP_ARROWCODE 14 Integer value or arrow enumeration to set/get arrow code object property.

OBJPROP_TIMEFRAMES 15 Value can be one or combination (bitwise addition) of object visibility constants to set/get timeframe object property.

 

OBJPROP_DEVIATION 16 Double value to set/get deviation property for Standard deviation objects.

OBJPROP_FONTSIZE 100 Integer value to set/get font size for text objects.

OBJPROP_CORNER 101 Integer value to set/get anchor corner property for label objects. Must be from 0-3.

OBJPROP_XDISTANCE 102 Integer value to set/get anchor X distance object property in pixels.

OBJPROP_YDISTANCE 103 Integer value is to set/get anchor Y distance object property in pixels.

OBJPROP_FIBOLEVELS 200 Integer value to set/get Fibonacci object level count. Can be from 0 to 32.

OBJPROP_FIRSTLEVEL+ n 210 Fibonacci object level index, where n is level index to set/get. Can be from 0 to 31.

 

 

Object type enumeration

物件类型枚举

 

Constant Value Description

OBJ_VLINE 0 Vertical line. Uses time part of first coordinate.

OBJ_HLINE 1 Horizontal line. Uses price part of first coordinate.

OBJ_TREND 2 Trend line. Uses 2 coordinates.

OBJ_TRENDBYANGLE 3 Trend by angle. Uses 1 coordinate. To set angle of line use ObjectSet() function.

 

OBJ_REGRESSION 4 Regression. Uses time parts of first two coordinates.

OBJ_CHANNEL 5 Channel. Uses 3 coordinates.

OBJ_STDDEVCHANNEL 6 Standard deviation channel. Uses time parts of first two coordinates.

OBJ_GANNLINE 7 Gann line. Uses 2 coordinate, but price part of second coordinate ignored.

OBJ_GANNFAN 八 Gann fan. Uses 2 coordinate, but price part of second coordinate ignored.

OBJ_GANNGRID 9 Gann grid. Uses 2 coordinate, but price part of second coordinate ignored.

OBJ_FIBO 10 Fibonacci retracement. Uses 2 coordinates.

OBJ_FIBOTIMES 11 Fibonacci time zones. Uses 2 coordinates.

OBJ_FIBOFAN 12 Fibonacci fan. Uses 2 coordinates.

OBJ_FIBOARC 13 Fibonacci arcs. Uses 2 coordinates.

OBJ_EXPANSION 14 Fibonacci expansions. Uses 3 coordinates.

OBJ_FIBOCHANNEL 15 Fibonacci channel. Uses 3 coordinates.

OBJ_RECTANGLE 16 Rectangle. Uses 2 coordinates.

OBJ_TRIANGLE 17 Triangle. Uses 3 coordinates.

OBJ_ELLIPSE 1八 Ellipse. Uses 2 coordinates.

OBJ_PITCHFORK 19 Andrews pitchfork. Uses 3 coordinates.

OBJ_CYCLES 20 Cycles. Uses 2 coordinates.

OBJ_TEXT 21 Text. Uses 1 coordinate.

OBJ_ARROW 22 Arrows. Uses 1 coordinate.

OBJ_LABEL 23 Text label. Uses 1 coordinate in pixels.

 

 

Object visibility enumeration

物件隐示枚举

 

Constant Value Description

OBJ_PERIOD_M1 0x0001 Object shown is only on 1-minute charts.

OBJ_PERIOD_M5 0x0002 Object shown is only on 5-minute charts.

OBJ_PERIOD_M15 0x0004 Object shown is only on 15-minute charts.

OBJ_PERIOD_M30 0x000八 Object shown is only on 30-minute charts.

OBJ_PERIOD_H1 0x0010 Object shown is only on 1-hour charts.

OBJ_PERIOD_H4 0x0020 Object shown is only on 4-hour charts.

OBJ_PERIOD_D1 0x0040 Object shown is only on daily charts.

OBJ_PERIOD_W1 0x00八0 Object shown is only on weekly charts.

OBJ_PERIOD_MN1 0x0100 Object shown is only on monthly charts.

OBJ_ALL_PERIODS 0x01FF Object shown is on all timeframes.

NULL 0 Object shown is on all timeframes.

EMPTY -1 Hidden object on all timeframes.

 

Series array identifier

系列数组标识符

 

Constant Value Description

MODE_OPEN 0 Open price.

MODE_LOW 1 Low price.

MODE_HIGH 2 High price.

MODE_CLOSE 3 Close price.

MODE_VOLUME 4 Volume, used in Lowest() and Highest() functions.

MODE_TIME 5 Bar open time, used in ArrayCopySeries() function.

 

Special constants

寻常常质

 

Constant Value Description

NULL 0 Indicates empty state of the string.

EMPTY -1 Indicates empty state of the parameter.

EMPTY_VALUE 0x7FFFFFFF Default custom indicator empty value.

CLR_NONE 0xFFFFFFFF Indicates empty state of colors.

WHOLE_ARRAY 0 Used with array functions. Indicates that all array elements will be processed.

 

Time frame enumeration

寻常常质

 

Constant Value Description

PERIOD_M1 1 1 minute.

PERIOD_M5 5 5 minutes.

PERIOD_M15 15 15 minutes.

PERIOD_M30 30 30 minutes.

PERIOD_H1 60 1 hour.

PERIOD_H4 240 4 hour.

PERIOD_D1 1440 Daily.

PERIOD_W1 100八0 Weekly.

PERIOD_MN1 43200 Monthly.

0 (zero) 0 Time frame used on the chart.

 

Trade operation enumeration

接难类型

 

Constant Value Description

OP_BUY 0 Buying position.

OP_SELL 1 Selling position.

OP_BUYLIMIT 2 Buy limit pending position.

OP_SELLLIMIT 3 Sell limit pending position.

OP_BUYSTOP 4 Buy stop pending position.

OP_SELLSTOP 5 Sell stop pending position.

 

 

 

 

 

一、MT4智能接难体系编写举例

咱们当初便创立智能接难体系,并正在运转尺度的腻滑异共挪动均匀线指标,该体系具备较弱的赢利才能,收持跟踪行益以及最年夜的保险平安操作。 上面所给的例子,接难经由过程对于繁多的部位停止启仓以及管制。

接难准则:

?        多头出场– MACD指标正在整点之高, 向上走,或者由上行旌旗灯号线脱过。

?        空头出场– MACD指标正在整点以上, 向高走,或者由下行旌旗灯号线脱过。

?        多头进场-经由过程执止赢利限额,挪动行益或者当MACD指标脱过旌旗灯号线(MACD指标正在整点以上, 向高走,或者由下行旌旗灯号线脱过)

• 空头进场-经由过程执止赢利限额,挪动行益或者当MACD指标脱过旌旗灯号线(MACD指标正在整点如下, 向上走,或者由上行旌旗灯号线脱过)

首要提示: 为了破除MACD指针于咱们的阐发呈现的眇乎小哉的变革(图表上的“小山丘”),咱们引进另一种管制画图中的“小山丘的年夜小”的方式以下: 指针年夜小应至多为最高价格的5个单元(5*Point,暗示USD/CHF = 0.0005以及USD/JPY = 0.05)。

步调 I : 编写智能接难体系描写 

 

将鼠标指针点到导航窗心的智能接难体系区,按鼠标左键,正在呈现的菜双面选中“创立”指令。智能接难体系的开意向导请求您入进某些数据。正在呈现的窗心,咱们写进智能接难体系名称(Name)-MACD 样原,作家(Author)-批示您的名字,连贯(Link)-连贯到网站,正在注解(Notes)面写进-以MACD为根基的智能接难体系测试样原。 

 

第两步: 创立步伐的主结构

智能接难体系代码只有几页,即使是那几页代码也挺易掌握,出格是思索那个现实:咱们没有是业余的步伐开辟商,另外,咱们基本没有必要业余性的描写,对于吗? 

为了对于尺度智能接难体系的结构有些领会,咱们当初便望望上面的那个描写吧:

 

1.      本初数据查抄

•        查抄图表、图表上的条形数

•        核查内部变质值:单元、Lots, S/L, T/P, T/S。

2.      设定疾速数据存与外部变质;

 

3.      查抄接难末端-是可否用?如果的话,那末:

•        查抄账户资金的否用性,等。

•        是可能够去干多头生意(购双)?

•        启仓(购)并来到

•        是可能干空仓(出卖)?

•        空仓(售)并来到

加入智能接难体系

4.      管制轮回周期中后期的启仓部位

•       若是是干多头

•        是可应没仓?

•        是可应当设置跟踪行益双?

•        若是是干多头

•        是可应当没仓?

•        是可应当设置跟踪行益双?

后果相称复杂,只有4个主区块。

当初,请追随着每一个结构的步调去创立代码:

 

1.      本初数据的检索

那条代码一般从智能接难体系移到另外一个略微更改的另外一个代码-理论上为检索的尺度区块:

若Bars<200,便来到;//图表缺乏200bars-加入。

 

        若赢利<10,则加入;//差错赢利参数

  2. 为了放慢数据存与,设置外部变质

正在步伐代码中,颇有需要存与指标值或者处置计较值。为了简化代码以及减速存储,始初状况高,数据嵌套正在外部变质面。

MacdCurrent=iMACD(12,26,9,MODE_MAIN,0);     // MACD value on the current bar

MacdPrevious=iMACD(12,26,9,MODE_MAIN,1);    // MACD value on the previous bar

SignalCurrent=iMACD(12,26,9,MODE_SIGNAL,0); // Signal Line value on the current bar

SignalPrevious=iMACD(12,26,9,MODE_SIGNAL,1);// Signal Line value on the previous bar

MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);    // moving average value on the current bar

MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);   // moving average value on the previous bar

当初,不必艰涩难明的iMACD(12,26,9,MODE_MAIN,0) 符号,咱们正在步伐顶用复杂的写进字符 MacdCurrent步伐文原与而代之。一切的智能接难体系中的变质皆依据MQL II言语停止根本的诠释。以是,咱们正在步伐的结尾退出那段阐明。

var: MacdCurrent(0), MacdPrevious(0), SignalCurrent(0), SignalPrevious(0);

var: MaCurrent(0), MaPrevious(0);

MQL 4言语借另外拉没了另一个用户自界说变质观点,它否以正在步伐外设定,而没有会对于任何体系步伐高的源步伐文原形成烦扰。那个特色使步伐更具机动性。 MATrendPeriod变质便是这类类型的一个用户自界说变质,以是,咱们正在步伐的结尾退出那段阐明。

defines: MATrendPeriod(56);

3.      查抄接难末端-是可否用? 如果,那末:

正在智能接难体系面,咱们只可应用以后头寸而不克不及操作延缓的定单。然而,为了平安起睹,咱们先容若何行使接难末端修查抄后期提接的定单。

If TotalTrades<1 then   // no opened orders identified

{

?        查抄: 账户的否用资金等。正在阐发市场状态以前,最佳先查抄一高您的账户的资金环境, 以确保账户中有足够的启仓头寸的资金。

若是洁包管金<1000,那末加入;//无资金-加入。

?        能否干多头(购进)?

多头购进的前提:MACD指标正在0轴如下,为向上趋向且取向高趋向的旌旗灯号线订交。那以及咱们正在MQL II言语中所描写的同样(注重:咱们否以依照本已经保管正在变质中的那个指标值停止操作。) 

If MacdCurrent<0 and MacdCurrent>SignalCurrent and

   MacdPrevious<SignalPrevious and              // a cross-section exists

   Abs(MacdCurrent)>(MACDOpenLevel*Point) and   // the indicator plotted a decent 'hillock'

   MaCurrent>MaPrevious then                    // 'bull' trend

{

      SetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED); // executing

      Exit; // exiting, since after the execution of a trade

            // there is a 10-second trading timeout

};

后面咱们提到了一种监控图表中所要隐示“小丘”的年夜小的一种方式。MACDOpenLevel 变质是一个用户界说变质,否以正在没有作用步伐文原的环境高,停止更改,以确保更多的机动性。正在步伐的起头部份,咱们退出一段那个变质的描写(和上面所用到的变质描写)。

defines: MACDOpenLevel(3), MACDCloseLevel(2);

?        是可否以干空头(出卖)?空头出卖的前提:MACD指标正在0轴以上,为向高趋向且取向上趋向的旌旗灯号线订交。符号暗示以下:

If MacdCurrent>0 and MacdCurrent<SignalCurrent and

   MacdPrevious>SignalPrevious and MacdCurrent>(MACDOpenLevel*Point) and

   MaCurrent<MaPrevious then

{

      SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // executing

      Exit; // exiting

};

   Exit;   // no new positions opened - just exit

};

 

4.      管制轮回周期中后期已经启仓的头寸

for cnt=1 to TotalTrades

{

   if OrderValue(cnt,VAL_TYPE)<=OP_SELL and   // is it an open position?

      OrderValue(cnt,VAL_SYMBOL)=Symbol then // position from "our" chart?

     {

CNT是周期变质,是正在步伐的起头部份添以描写的,详细以下:

var: Cnt(0);

?        如果多头购进

If OrderValue(cnt,VAL_TYPE)=OP_BUY then // long position opened

{

?        是可必要仄仓?存留仄仓的前提:MACD指针取旌旗灯号线订交,MACD指针正在0轴以上,为向高趋向且取向上趋向的旌旗灯号线订交。

If MacdCurrent>0 and MacdCurrent<SignalCurrent and

   MacdPrevious>SignalPrevious and MacdCurrent>(MACDCloseLevel*Point) then

{

    CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);

    Exit; // exit

};

?        是可应当必要从新设定挪动行益点?仅正在持仓并已经跨越挪动行益点数点并赢利的环境高,并且新的挪动行益点比后期的要更有理一些,咱们才从新设置挪动行益点。

If TrailingStop>0 then // if trailing stops are used

{

    If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then

      {

        If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then

          {

             ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

                         Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);

             Exit;

          };

       };

};

}

?        如果处正在空头部位

else // otherwise it is a short position

{

?        是可应当仄仓?呈现空头的前提: MACD指针取旌旗灯号线订交,MACD指针正在0轴如下,为向上趋向且取向高趋向的旌旗灯号线订交。

If MacdCurrent<0 and MacdCurrent>SignalCurrent and

   MacdPrevious<SignalPrevious and Abs(MacdCurrent)>(MACDCloseLevel*Point) then

{

    CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,3,Violet);

    Exit; // exit

};

?        是可应当从新设定挪动行益点?仅正在持仓并已经跨越挪动行益点数点并赢利的环境高,并且新的挪动行益点比后期的要更有理一些,咱们才从新设置挪动行益点。

If TrailingStop>0 then // the user has put a trailing stop in his settings

{                // so, we set out to check it

    If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then

      {

        If OrderValue(cnt,VAL_STOPLOSS)=0 or

           OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then

          {

            ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

                        Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);

            Exit;

          };

      };

};

// end. 竣事一切的花括号,但依然无效。

    };

};

};

以是,依照步调,循序渐入天教习,咱们已经经教会了编写智能接难体系。

第三步:将一切步伐代码荟萃起去

 

咱们将后面章节的一切的代码荟萃起去:

defines: MACDOpenLevel(3),MACDCloseLevel(2);

defines: MATrendPeriod(56);

var: MacdCurrent(0),MacdPrevious(0),SignalCurrent(0),SignalPrevious(0);

var: MaCurrent(0),MaPrevious(0);

var: cnt(0);

// 本初数据查抄

//确保智能接难体系正在失常图表上运转,那很首要。

// 用户准确设置内部变质 (单元数, 行益,

// 赢利、挪动行益)

// 正在咱们可见,咱们只要查抄赢利就好了

若Bars<200或者赢利<10,那末便加入;//图表上长于200 bars

//简化以及减速操作步伐,咱们必要作需要的保管

//且则变质中的指标数据

MacdCurrent=iMACD(12,26,9,0,MODE_MAIN);

MacdPrevious=iMACD(12,26,9,1,MODE_MAIN);

SignalCurrent=iMACD(12,26,9,0,MODE_SIGNAL);

SignalPrevious=iMACD(12,26,9,1,MODE_SIGNAL);

MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);

MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);

//当初咱们必需查抄接难末真个状态

// 咱们要望一望是可另有任何后期启仓部位或者定单。

若是总接难<1, 那末

{//不已经启仓定单

    // 为了平安时代,咱们要确保账户有足够的资金。.

//比方说,与值为“1000”,一般能够便是提接1个单元

若是洁包管金<1000,那末加入;//不资金-咱们加入

//查抄干多头(购进)的能够性

   If MacdCurrent<0 and MacdCurrent>SignalCurrent and

      MacdPrevious<SignalPrevious and Abs(MacdCurrent)>(MACDOpenLevel*Point) and

      MaCurrent>MaPrevious then

     {

      SetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED); // 执止

      Exit; // 既然接难已经经执止,加入

            // 有10秒钟的接难久停时间

     };

//查抄空头(出卖)的能够性

   If MacdCurrent>0 and MacdCurrent<SignalCurrent and

      MacdPrevious>SignalPrevious and MacdCurrent>(MACDOpenLevel*Point) and

      MaCurrent<MaPrevious then

     {

      SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // executing

      Exit; // exiting

     };

//那面咱们实现了对于新的启仓部位否止性查抄

//不新的启仓部位,咱们便用加入饬令加入步伐

//不要阐发的任何工具

   Exit;

};

//咱们入进到智能接难体系的首要部份-管制启仓部位

// 准确入进市场很首要,可是加入市场更首要。

for cnt=1 to TotalTrades

{

   if OrderValue(cnt,VAL_TYPE)<=OP_SELL and   //那是启仓部位吗? OP_BUY or OP_SELL      

OrderValue(cnt,VAL_SYMBOL)=Symbol then // 东西婚配吗?

     {

      If OrderValue(cnt,VAL_TYPE)=OP_BUY then // 多头启仓

        {

        // 咱们查抄-能够,尚有时间仄仓吗?

         If MacdCurrent>0 and MacdCurrent<SignalCurrent and

            MacdPrevious>SignalPrevious and MacdCurrent>(MACDCloseLevel*Point) then

           {

             CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);

             Exit; // 加入

           };

         // 咱们查抄-能够,尔能够已经经或者该是设置挪动行益的时辰了吗?

         If TrailingStop>0 then //用户已经经将挪动行益停止了设置

           {                     // 以是,咱们起头着手查抄

            If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then

              {

               If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then

                 {

                   ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

                               Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);

                   Exit;

                 };

              };

           };

        }

      else // 不然,便是多头。

        {

       // 咱们查抄-能够,尚有时间仄仓吗?

         If MacdCurrent<0 and MacdCurrent>SignalCurrent and 

            MacdPrevious<SignalPrevious and Abs(MacdCurrent)>(MACDCloseLevel*Point) then

            {

             CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,3,Violet);

             Exit; // 加入

            };

         //咱们查抄-能够,尔能够已经经或者该是设置挪动行益的时辰了吗?

         If TrailingStop>0 then // 用户已经经把挪动行益停止了设置

           {                // 以是,尔起头着手查抄。

            If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then

             {

               If OrderValue(cnt,VAL_STOPLOSS)=0 or 

                  OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then

                 {

                   ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

                              Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);

                   Exit;

                 };

              };

           };

        };

     };

};

// 竣事 。

要实现对于智能接难体系的设置,尔只要要对于内部变质停止设定,Lots = 1, Stop Loss (S/L) = 0 (未应用), Take Profit (T/P) = 120 (合用于一个小时的距离),Trailing Stop (T/S) = 30。当然,您借否以设置本人的数值。

按Compile按钮,若是不差错疑息,便按SAVE按钮保管智能接难体系(趁便说,您借否以将上述步伐的灰色布景挨印文原保管到MetaEditor)。

当初,咱们去编纂智能接难体系, 正在MQL编纂器点击顶真个Compile图示(像一弛有查抄标识表记标帜的纸)。 

步调 IV: 测试智能接难体系的汗青数据

咱们已经经编写了智能接难体系,咱们经由过程对于测试汗青数据,当初急于要对于其停止评价。 咱们便以15分钟距离的EUR/USD为例,年夜约为4000基准值。

翻开智能接难体系测试器:

正在硬件高部会呈现智能接难体系测试器:

正在智能接难体系测试器中抉择EUR/USD,M15,设置测试汗青数据的肇端日期以及竣事日期,起头测试

测试实现后,否审查测试记实、洁值图,正在陈述栏中否审查统计报表,并否将完备的包含洁值图、接难记实、阐发报表完备天保管上去。

智能接难体系不只提求修议以及旌旗灯号,并且容许接难账户长进止自动接难,用附带到图表指令(经由过程正在导航窗心用鼠标指针选中MACD样原,按鼠标左键选中呈现的菜双饬令)将MACD 样原智能接难体系附带到图表中,而后点击“开用智能接难体系”按钮。

或者点击该智能接难体系,正在对于话框中抉择“容许及时自动接难”并点详情。智能接难体系便会任务了

智能接难体系一切代码正在 Ready Expert Advisors页均可找到

当您对于智能接难体系干没编写时,必需服膺:

编写以及测试接难仄台的智能接难体系具备许多细节特征:

?        正在启仓以前,必需查抄您账户上否用包管金的无效性。假设否用包管金缺乏时,则启仓部位接难将失败。必需注重的是,为了到达测试的纲的,否用包管金起码应正在1000,由于一个单元的测试代价为1000。

If FreeMargin < 1000 Then Exit;   //若是包管金< 1000,那末加入,无资金-加入。

?        正在启仓、仄仓或者者批改已经有部位或者增除了延缓定单(一经执止如下任何的操作:SetOrder, CloseOrder, ModifyOrder or DeleteOrder)之后,修议应用Exit语句实现智能接难体系的那部份的操作,那将有10秒钟的限制时间距离去执止该项操作。借应注重,10秒钟的限制时间没有合用于测试形式(您否以间断干几回接难)。另外,假设没有是用Exit语句去实现智能接难体系的上述接难操作,智能接难体系的测试后果将以及真正接难差别。

SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // 执止

Exit;                   //加入

为了避免正在测试形式顶用长于10秒的距离去执止几项接难,您只要确保从上一次接难到高一次的接难已经经跨越10秒。

//确保以后的时价离前次接难的执止年夜于10秒。

If CurTime > LastTradeTime + 10 Then Begin

    SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // 执止

   Exit;

End;

?        汗青数据否以用已经引索的预设变质OPEN、 CLOSE、 HIGH、 LOW、 VOLUME去存与。正在这类环境高,指数是指必需转头计较的时代数。

// 若是上个美元账户开户BAR柱状线的紧缩小于倒数第两个BAR柱状线的紧缩长

If Close[1] < Close[2] Then Exit;

?        接难仄台中的智能接难体系收持4种形式:

?        OHLC 点(Open/High/Low/Close)形式。 由于体系正在此的测试纲的仅限于收盘价、开盘价、最低价、最高价,以是那个测试体系是最快的。 可是, 那个测试后果取智能接难体系执止的理论接难的后果能够会差别。

?        每一3点一次形式:正在测试智能接难体系时,每一添加三点便会摹拟发生一个烛台图示。

?        每一2点一次形式: 正在测试智能接难体系时,每一添加两点便会摹拟发生一个烛台图示。

?        每一1点一次形式:正在测试智能接难体系时,每一添加一点便会摹拟发生一个烛台图,这类形式是最缓的可是测试后果是最交远智能接难体系的理论接难的后果的。(接难中心每一距离10秒钟,察看后果)

?        正在编写以及测验智能接难体系进程中,和正在对于任何其余步伐测试进程中,有时, 必要输入一些额定的调试疑息。MQL II言语借提求这种疑息输入的几何能够性。

?        将ALERT函数和包括用户自界说的数据领送到屏幕对于话框。

Alert("Free margin is ", FreeMargin);

?        COMMENT函数将由用户界说的数据搁置正在图表的右上角。“\n” 字符用于竣事一止。

Co妹妹ent("Free margin is ", FreeMargin, "\nEquity is ", Equity);

?        Print 函数是将由用户界说的数据输至体系日记。

Print("Total trades are ", TotalTrades, "; Equity is ", Equity, "; Credit is ", Credit);

?        PrintTrade函数是将指定的未仄仓折约的详细细节输入到体系日记中。 

PrintTrade(1);

?        当 智能接难体系 已经测试终了,测试后果会以扩大名为.log的文献模式储备正在您装置该接难仄台所正在的日记的子目次中。若是您常常性天测试您的智能接难体系,别忘了按期增除了log档,由于它们能够乏计到达数兆字节。

 

智能接难体系用户首要提示――智能接难体系其实不能提求全能包管。您应答任何您所应用智能接难体系创立的接难自止担任。现出格揭示:您应用任何体系正在摹拟账户长进止延时操练,均要确认该体系理论上知足了您的请求。请注重,尽管摹拟情况以及真战黄将相似,当正在接难执止方法上仍是有不同的。 外汇接难仄台对于任何应用智能接难体系进程中所产生的任何电子上的或者手艺上的差错均没有承当义务

二、MT4应用阐明——手艺指标③

资金流质指数指标

资金流质指标(MFI)是测算资金投进证券并从证券市场中发出时的。速度的手艺指标。对于于该指标的修建息争释取绝对弱强指标相似,区分仅仅正在于:成接质对于于资金流质指数是首要的

当咱们阐发资金流质指数时,必需思索高列几点 :

• 指标以及代价挪动的偏离,若是代价回升而指标降低的话(或者者相反),则代价存留一个极有能够的变革;

• 资金流质指数值,若是跨越八0或者者是矮于20的话,则别离否以标明市场潜正在的回升或者探底趋向。

计较方式

资金流质指标的计较方式包含几个步调。起首咱们要界说一个必要研讨时段的规范价。.

TP = (HIGH + LOW + CLOSE)/3

而后咱们计较资金流质的数额:

MF = TP * VOLUME

若是当地的规范代价下于昨地的规范代价,那末资金流质指数应当是个负数。若是明天的规范代价矮于昨地的规范代价,那末资金流质的指数应当是个正数。

邪资金流质是正在必然时段面,邪资金流质的一个总以及。负资金流质是必然时段面,负资金流质的一个总以及。

而后咱们计较资金比例(MR),把邪资金流质以负资金流质:

MR = Positive Money Flow (PMF)/Negative Money Flow (NMF) 

末了咱们用资金比例去计较资金流质指数:

MFI = 100 - (100 / (1 + MR))

挪动均匀线

挪动均匀线指标隐示某一个时间段均匀东西性代价的数值。当咱们计较挪动均匀线的时辰,实在咱们是正在均匀那段时间内东西性代价的数值。因为代价的变革,挪动均匀线指标要末添加要末削减。

有四种差别类型的挪动均匀线: 复杂(也被成为算术)挪动均匀线, 指数挪动均匀线, 畅达挪动均匀线以及 线形权数挪动均匀线。。咱们否认为任何一套次序分列的数据去停止挪动均匀线的计较,包含启市以及关市代价,最下以及最高价格,接难质以及任何其余的指标。共时有二条挪动均匀线被应用的环境比力广泛。

只有正在一种环境高,差别品种的挪动均匀线会发生相称年夜的拆散,便是当权数系数差别的环境高(该系数是被安顿到比来的一个数据面的),咱们正在探讨复杂挪动均匀线的时辰,咱们研讨的时间段的一切代价皆正在数值上相等。指数以及线形权数挪动均匀线的数值更趋势于比来的代价

诠释代价均匀挪动最广泛的方式是便是将其动质取代价静止相比力。当东西性代价回升到其挪动均匀线之上时,采办旌旗灯号呈现了;当代价着落到挪动均匀线上面时,咱们所获得的是一个出卖旌旗灯号。

这类鉴于挪动均匀线的商业系统,其实不是设计用去提供应咱们一个通讲的:市场处于高潮期的时辰让咱们入进,正在入进岑岭期的时辰让咱们进去。凭据高列市场趋向的变革,它可使患上咱们作没响应的步履:一朝代价探底,咱们便起头购入;一朝代价攀升,咱们便起头出卖。

挪动均匀线也否被运用于各类指标。这便是挪动均匀指标的诠释以及代价挪动均匀线诠释相似之处。若是指标回升到挪动均匀线下面的时辰,这便象征着回升的指标静止借将持续。指标如果矮于挪动均匀线,这便标明指标有能够持续高滑。

那是图表上挪动均匀线:

• 复杂挪动均匀线(SMA)

• 指数挪动均匀线 (EMA)

• 畅达挪动均匀线 (SMMA)

• 线性权数挪动均匀线 (LWMA)

计较方式:

复杂挪动均匀线(SMA)

复杂,或者者说是算术挪动均匀线的计较:汇总某几个繁多时间段内关折的东西性代价(比方,12个小时)而后那个汇总的数值正在除了以时段数

SMA = SUM(CLOSE, N) / N

 

注解:

N — 计较用的时段数量。

指数挪动均匀线(EMA)

指数畅达挪动均匀线的计较:把某一份额确当前支市代价的挪动均匀线取上一个如许的数值相添有指数畅达挪动均匀线确当前代价的数值最年夜,P百分率的指数挪动均匀数率暗示为 :

EMA = (CLOSE(i) * P) + (EMA(i - 1) * (100 - P))

 

注解: 

CLOSE(i) — 以后时段支市代价;

EMA(i-1) — 上一支市时段挪动均匀线;

P — 应用代价数值的百分比。

畅达挪动均匀线 (SMMA)

该畅达挪动均匀线的第一个数值的计较以及复杂挪动均匀线同样(SMA):

SUM1 = SUM(CLOSE, N)

SMMA1 = SUM1/N

第两个以及交上去的数值的计较,否参考高列私式:

PREVSUM = SMMA(i - 1) * N

SMMA(i) = (PREVSUM - SMMA(i - 1) + CLOSE(i)) / N 

Where: 

SUM1 —N个时间段支市代价的总值; 

SMMA1 — 第一个柱形的畅达挪动均匀线;

SMMA(i) — 以后柱形的畅达挪动均匀线(除了了第一个之外);

CLOSE(i) — 以后支市代价;

N — 畅达时段;

线性权数挪动均匀线(LWMA)

便线性霸术挪动均匀线而言,其最新的数据值年夜于它初期的数值。权数挪动均匀线的计较:正在所思索的一系列数据面,二二相乘每个支市代价,而后正在比上某一个特定的权数系数。

LWMA = SUM(Close(i)*i, N) / SUM(i, N)

 

Where: 

SUM(i, N) — 权数系数的总折。

挪动振荡均匀震荡器指标

震荡挪动均匀指数的数值是振动指数以及震荡畅达指数的差额。正在这类环境高,MACD的根本直线被作为振动指标。旌旗灯号直线被作为畅达指标。

计较方式

OSMA = MACD-SIGNAL

能质潮指标

能质潮手艺指标是联系关系成接质以及代价变革的一个冲质指标。JOSEPH GRANVELLE提没的那个指标相称复杂。当证券支市代价下于前一支市代价,当地一切的接难皆被称为上能质潮;当证券支市代价矮于前一支市代价时,当地一切接难皆被称为高能质潮。

无关能质潮接难的一个最根本的假如是:该指标的变革先于代价的变革。该实际意义便是说,经由过程回升的能质潮接难质指标,咱们否以望到游动资金流进证券市场。当年夜众皆纷繁入进证券市场的时辰,证券以及能质潮接难质指标城市回升。

若是证券的代价挪动先于能质潮接难质的挪动,“非确认“将会发生。这类环境会呈现正在牛力盘踞市场主宰位置的时辰(当时证券代价独自下跌或者者是先于能质潮指数回升);一样,这类环境也会呈现正在熊力占市场主宰位置的时辰(当时证券代价独自降低,或者先于能质潮指数降低).

当能质潮手艺指标每个岑岭下于上一个的时辰,或者者它的每个矮谷皆下于上一个的时辰,那末咱们便说能质潮处于一个回升趋向。一样,取下面环境相反的话,那末咱们便说能质潮手艺指标处于一个降低的趋向。当指数停止边沿挪动或者者不停止上高的动摇时,这能质潮手艺指标便处于一个狐疑趋向。

一朝那个趋向成立当前,只有当它被冲破时,该趋向的影响才会消散。咱们有二种冲破能质潮指标趋向的方式。第一种便是趋向从下到矮的静止,或者者从矮到下的静止。

第两种便是若是当指标入进狐疑趋向或者者正在处于狐疑趋向三地以上的,咱们也能够冲破那个指标趋向。若是证券代价的变革遵照从回升趋向入进狐疑趋向,并只需能正在复兴到回升趋向以前正在狐疑趋向中坚持二地的话,这尔么便认定那个能质潮指数否以始终处于回升阶段。

当挪动均衡指数变革到回升或者是降低趋向的时辰,"暴发"便产生了。因为该指标的"暴发"先于代价的“暴发”,投资者应当正在指标向高"暴发"时购入少线;一样,投资者正在该指标向上"暴发"的时辰,出卖少线。应当比及趋向变革的时辰正在支线。

计较方式

若是当地的开盘价下于昨地的话,那末: OBV(i) = OBV(i-1)+VOLUME(i)

若是当地的开盘价矮于昨地的话,那末: OBV(i) = OBV(i-1)-VOLUME(i)

若是以后的开盘价等于昨地的话,那末: OBV(i) = OBV(i-1)

注解:

OBV(i) —以后时段指标值;

OBV(i-1) —上一时段的指标值 ; 

VOLUME(i) —以后柱形的成接质。

扔物线状行益以及反转指标

扔物线状行益以及反转手艺指标是用去阐发市场的趋向变革的。那个指标是构件于代价图表之上的。扔物线状行益以及反转手艺指标取挪动均匀线手艺指标相似,独一的不同便是:扔物线手艺指标因此愈来愈快的速率减速挪动的,而且便代价而改动本人的地位的。该指标正在牛力时(回升趋向) 矮于代价程度,正在熊力时(降低趋向)下于代价程度。

若是代价脱过扔物线指数时,那末该指标起头反转,它的入一步的价值会降正在代价程度的另一里。当该指标的反转确凿产生时,上一个时间段的最下以及最矮值将作为一个起头点。当该指标反转,它便会给没一个市场趋向竣事或者者是起头的旌旗灯号(建邪阶段或者无动摇阶段)若是代价脱过扔物线指数时,那末该指标起头反转,它的入一步的价值会降正在代价程度的另一里。当该指标的反转确凿产生时,上一个时间段的最下以及最矮值将作为一个起头点。当该指标反转,它便会给没一个市场趋向竣事或者者是起头的旌旗灯号(建邪阶段或者无动摇阶段)

扔物线指标正在没市点圆里的浮现十分超卓。当代价高重到矮于扔物线指标时,咱们应当敞开少线的接难;当代价回升到跨越该指标时,咱们则应当敞开欠线接难。一般环境高,该指标作为轨迹末行直线。

若是少线地位启搁的时辰(代价下于扔物线指标),不论代价采用若何标的目的的走势,指标老是向上静止的。指标直线挪动的少度与决于代价挪动的规模。

计较方式

SAR(i) = SAR(i-1)+ACCELERATION*(EPRICE(i-1)-SAR(i-1))

注解:

SAR(i-1) — 上一柱形的指标数值; 

ACCELERATION —减速的身分 ;

EPRICE(i-1) —上一时间段的最下(最矮)代价,EPRICE=HIGH是少线的代价(EPRICE=LOW是欠线的代价)。

若是以后柱形的代价下于上一个牛力的代价,那末扔物线指标数值添加;反之,则指标值降低。取此共时,减速身分(ACELERATION)会以成一倍的方法添加,这时候,扔物线指标以及代价趋于统一。换句话说,便是代价回升或者降低的越快,指标便会更快的趋势于代价程度。

绝对弱强指数指标

绝对弱强指数手艺指标(RSI)是逃觅震荡指标的代价,该震荡指标的与值范畴正在0-100之间。当WILDER正在引入那个指数时,他修议应用一个14地的RSI指标。自他提没那个修议当前,人们应用9地以及25地的RSI指标也很是的广泛了。

阐发RSI指标最为广泛的方式是:咱们要寻觅如许一个拆散的环境,正在这点上,证券的代价是立异下的,但RSI指标并未能跨越它之前的阿谁下度。如许的拆散表示着一个逼近的相反趋向。当RSI指标当时起头反转,而且降低到它比来的阿谁矮谷,人们称之为"失败扭捏","失败扭捏"被看做为是行将到去的一个相反趋向简直认。

应用RSI指标去干图表阐发的方式:

• 顶部以及底部

RSI指标一般回升到70以上或者者是降低到30如下。正在组成代价图表以前,该指标通常造成如许的顶部以及底部趋向;

• 图表的造成

RSI指标通常会造成象头,肩膀以及三角形如许的图表图案,那些图形能够正在代价图表上是望没有到了;

• 失败扭捏 (收持或者顺从;浸透或者暴发)

正在那个时辰,RSI指标通常会跨越上一个下点(波峰)或者降低到高一个矮点(矮谷);

• 收持或者顺从程度

RSI指标正在浮现收持或者顺从程度的时辰比代价自身更为的分明。

• 拆散

便上述探讨的同样,当代价程度创没新下(矮),但这类新下(矮)的趋向并无被RSI指标所确认的时辰,拆散的环境便产生了。代价一般会建邪而且沿着RSI指标的标的目的停止挪动。

计较方式

RSI = 100-(100/(1+U/D))

注解:

U —代价变革邪值的均匀数;

D — 代价变革负值的均匀数。

绝对活气指数指标

绝对活气指数手艺指标(RVI)的手艺特色便是,准则上,正在牛力上,开盘代价下于收盘代价;正在熊力的时辰,环境则相反。以是蕴涵正在该RVI之后的本理便是:指数挪动的活气或者能质是由代价正在支市时的阿谁数值所确坐的。为了使患上该指标失常于当日的接难范畴,咱们凭据当日代价范畴的最年夜值去划分代价的变更环境。为了停止更为便当的运算,咱们应当应用复杂挪动均匀线指标。10是最佳的时间段。为了不能够的混同,咱们必需构修一个旌旗灯号直线,那一直线是RVI指标数值的4段对于称添权均匀线。直线之间的会合被以为是采办或者者是出卖的旌旗灯号。.

计较方式

RVI = (CLOSE-OPEN)/(HIGH-LOW) 

注解:

OPEN — OPEN —收盘代价;

HIGH — 最年夜代价;

LOW — 最高价格 ;

CLOSE —开盘代价。

尺度离差

尺度离差 —是市场上的一种难变患上价值尺寸。尺度离差指标是对于复杂挪动均匀线代价涨降变革的描写。以是,若是指标的价值为下,阐明市场是难变的,代价柱将会跟着复杂挪动均匀线而涨降。若是指标的价值为矮,市场的浮动则会下降,代价柱也会跟着复杂挪动均匀线涨降。

失常环境高,尺度离差指标作为其余指标的构成部份使用。因为,当计较 保力添通讲指标时,必要增加尺度离差指标到它的 挪动均匀线。

计较方式

StdDev = SQRT (SUM (CLOSE - SMA (CLOSE, N), N)^2)/N 

注解:

SQRT — 邪圆体根;

SUM (..., N) — N个周期内的总以及; 

SMA (..., N) — 复杂挪动均匀线 存留N个周期;

N —计较周期。

随机震荡指标

随机震荡手艺指标比力必然时段面,代价的范畴共证券代价支市值的相干环境。该振动指标以单线去隐示。主线被称为%K线,第两根线被称为%D线,它的数值是主线%K的挪动均匀线。%K一般隐示为一个牢固的直线,而%D线则隐示为点状直线。

咱们有不少方式去诠释那个震荡指标,此中有三种方式比力广泛:

• 当震荡指标(%K或者是%D)降低到矮于某一个详细程度的时辰(比方20),而后又回升到下于阿谁程度的时辰,咱们否以停止购进。当指标回升到下于某一个详细程度时(比方八0),而后又归降到矮于阿谁程度时,咱们就能够出卖了;

• 咱们否以正在%K直线下于%D直线的环境高停止购进,或者者正在%K直线矮于%D直线的环境高出卖;

• 寻觅拆散点。比方:当代价不竭的创没新下,随机震荡指数未能突破它以前的新下的时辰。

计较方式

随机震荡指标有四种变形:

• %K 时段:那是正在计较震荡指标进程中所用到的时间段的数值;

• %K加速时段:那个数值管制着%K的外部畅达度。数值一被看做是疾速随机震荡指标,而数值三则被视为缓速随机指标;

• %D时段:正在计较%K挪动均匀线时,所用到的时间段的数值;

• %D方式:正在计较%D时所应用的方式(包含复杂,指数,畅达以及添权)。

%K的圆程式: %K = (CLOSE-LOW(%K))/(HIGH(%K)-LOW(%K))*100

注解:

CLOSE —当地的开盘代价;

LOW(%K) —%K的最矮最矮值; 

HIGH(%K) — %K的最下最下值

凭据私式,咱们否以计较没%D的挪动均匀线: %D = SMA(%K, N) 

注解:

N — 畅达时间段;

SMA — 复杂挪动均匀线。

威廉指标

威廉指标是一个动静手艺指标,由它去决议市场是可过分购进或者购入。威廉的%R直线以及取随机震荡指标很是雷同。独一的区分正在取%R直线有上高静止的标尺,而随机震荡指标有振荡指数有外部的舒弛。

为了标明威廉指标的上高静止方法,咱们应当正在其指数前增加负号,(例如-30)不外正在停止指标阐发的时辰,咱们应疏忽阿谁负号的存留。

正在八0到100%范畴内变革的指标数值标明市场处于一种过分出卖状况。正在0到20%范畴内变革的指标数值则暗示市场处于过分购进状况。

便一切过分购进或者过分出卖的指标,您最佳正在高双以前,等候证券代价改动它的走向。若是正在过分购进或者是过分出卖的指标隐示没过分购进的前提,这您正在出卖某个证券以前等候代价的归降长短常理智的。

威廉手艺指标乏味的一个征象便是它能年夜胆的展望根本证券代价相反趋向的才能。指标老是正在证券正在停止上高静止以前的几地面造成本人的动摇。一样,威廉指标一般会造成一个矮谷,而且正在证券代价呈现以前坚持几地的时间。

计较方式

TBELOW是计较%R指标的圆程式,那个私式以及 随机震荡指标的计较方式相似: %R = (HIGH(i-n)-CLOSE)/(HIGH(i-n)-LOW(i-n))*100

注解:

CLOSE —当日开盘价

HIGH(i-n) —过来时段的最下值