MT4编程入门1:MT4自定义指标的基本操作
MT4自定义指标的保存目录、指标编缉器与指标调用
MT4自定义指标保存在C:\ProgramFiles\MetaTrader4\experts\indicators这个目录中,
该目录中主要有二种类型的文件,
一种是mq4文件,这是MT4自定义指标的源码文件,是一种高级语言文件,可以人工编写修改,机器不能直接执行,但能在MT4启动时自动编译为ex4可执行文件。
另一种就是ex4文件,这是MT4自定义指标的可执行文件,由mq4文件编译得到。
mq4文件必须编译为ex4文件才能被MT4执行。
但ex4文件是机器码文件,人工不可修改
另外还有一个文件是mqlcache.dat,它用来保存目录中的文件信息,如果MT4无法自动编译,只要删除此文件即可解决问题
mq4文件编译为ex4可执行文件有两种方法:
MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。
用MQ语言编辑器打开mq4文件,点一下“编写”按钮,即可生成ex4文件
下载保存mq4文件、ex4文件
在论坛上我们经常看到有mq4文件、ex4文件可供下载,我们只要把它们保存到C:\ProgramFiles\MetaTrader4\experts\indicators这个目录,也就是下面这个目录中,就可以了。如果下载的是ex4文件,那可以直接调用;如果是mq4文件,则需要重启动MT4,让系统自动编译生成ex4可执行文件。如果下载的是rar、zip等类型的压缩文件,还必须下载后解压到此目录才能使用。
将源码保存为源码文件
在论坛上,我们也经常能看到指标源码贴在网页上,但没有mq4、ex4等文件可以下载,只能复制源码。此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。
打开MQ语言编辑器
在MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。
删除新文件里面的所有内容,成为一个空文件,
接着我们就可以将网页上源码复制粘贴进来
试着点一下“编写”,如果左下角出现“0错误,0警告”,那说明源码没问题,编译通过了,成功生成了ex4可执行文件
还有很重要的一点,就是要把源码文件保存到正确的目录中
保存后,再点一下编写。
到此,源码保存完成。
当然,我们也还有另的办法:
可以打开一个原已存在的mq4文件,然后另存为你需要的文件名,再删除文件中的所有内容成为空文件,把网页上的源贴到文件中保存即可
也可以在记事本中新建一个文件,把网页上的源码贴进记事本,然后取个文件名保存到上面提到的目录,不过文件后缀必须输入mq4,保存类型选择“所以文件”
mt4程序调用自定义指标
这非常简单
MT4编程入门2:指标源码中的常用符号说明
一、注释符:单行注释“//”、多行注释“/**/”
程序不执行注释,注释内容仅供阅读或保留不用的语句
在MQ语言编辑器中,注释内容以灰色显示
二、分号“;”
表示一个语句结束
三、逗号“,”
表示一个语句内部间隔,不结束语句。
等于号“=”
赋值语句,把等号后面的值赋给等号前的变量中
加号“+”
整数或小数,则表示值相加;字符串,则表示前后连接。
加加“++”
表示把符号前的变量值加1,例如:“i++;”这实际上就是:“i=i+1;”的简写,表示i的值加1
加等于“+=”
表示把符号后的值加到符号前的变量中。例如“i+=2;”,实际上就是“i=i+2;”的简写,表示i的值加2
双等号“==”
等于号。用于逻辑判断,双等号前后值相等,则返回逻辑值“真true”;双等号前后值不相等,则返回逻辑值“假false”
叹号等号“!=”
不等于号。用于逻辑判断,不等号前后值不相等,则返回逻辑值“真true”;不等号前后值相等,则返回逻辑值“假false”
十、“&&”
逻辑符“并且”
十一、“||”
逻辑符“或者”
十二、大括号“{}”
表示函数体。
{}内部为函数体语句。
MT4编程入门3:自定义变量
自定义变量在使用前,必须先创建(定义),设定变量的类型和名称。
创建时可同时赋值,也可以不赋值。名称可以使用中文字符。
例:
intmark;创建一个整型变量,变量名为“mark”。
bool是否报警=true;创建一个逻辑型变量,变量名为“是否报警”,同时,赋初值“true”
类型和类型定义词
自定义变量的基本类型有:
整形(int):就是整数,包括负整数
双精度小数(double):可以简单地理解为带小数位的数
字符串型(string)。
逻辑型(bool):其值分别为“true、false”,即“真、假”,也可以写成“1、0”(1真,0假)。
类型定义词仅在创建变量时使用,后面使用变量时,就不能再加类型定义词了
附加变量
附加变量就是在程序投入使用后,变量值允许用户自由更改的变量,一般用作程序参数。
一般指标,例如MACD(12,26,9)参数输入就是通过附加变量实现,(12,26,9)分别为三个附加变量的默认值。
定义附加变量只需在变量定义语句前加“extern”
externint周期=9;创建一个整型附加变量,变量名为“周期”,默认值为9,允许用户在程序外部修改参数值
MT4编程入门4:自定义函数
自定义函数与数学函数在本质上是一致的
例如:数学函数ft(x,y)=3x+2y(x,y为正整数)写成程序语句就是:
intft(intx,inty)
{
inttemp;
temp=3*x+2*y;
return(temp);
}
和自定义变量一样,自定义函数在使用前,也必须先设立,以定义其类型、名称、参数和运算语句。
函数类型、名称、参数位于函数头部(参数间以逗号分隔),
大括号中的是运算语句,也就是函数体部分。
return语句为函数结束语句,return后面括号中的值为函数返回值,即函数运算结果。
上例中,int为函数类型,表示该函数的返回值(运算结果)是整数;
(x,y)为参数,由于自定义变量使用之前都必须先创建,所以要加上类型定义词int
ft为函数名,有了函数名,我们就可以在别处用ft(2,1)的形式来调用此函数;
函数体部分有三句:
第一句,定义一个整形变量temp
第二句,计算temp的值
第三句,函数结束,返回调用点,以temp的值作为本函数返回值。
此函数也可以简写为:intft(intx,inty){return(3*x+2*y);}
函数类型与类型符
函数类型就是函数返回值(运算结果)的类型,与自定义变量类型差不多
有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,
还有一种函数是以函数运行为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以写成void(无值型)
函数中如果定义了自定义变量,那么此变量仅在本函数内部存在,函数运行结束时,自定义变量也就自动注销。
上例中,有x、y、temp三个自定义变量,在函数运行时创建,在函数运行结束时自动消失,仅在函数内部有效,与函数外部无关。
函数的调用
函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用
如我们前面创建了ft(x,y)函数,则别处我们可以用ft(4,5)等样式来调用ft(x,y)函数求值。
调用时,传递参数值给ft(x,y)函数(按顺序把4传给x,把5传给y),返回结果23后继续执行主程序。
MT4编程入门5:自定义数组
数组是一系列同类型变量的集合,可以同时存储多个数值。
例:intaa[4]={4,3,2,1};
这是一个数据名为aa、包含了4个元素的整数型数组(即数组长度为4),可以同时存储4个数值。
自定义数组也必须“先建立,后使用”
创建(定义)时,必须设定类型和名称。
创建(定义)时,数组的元素个数也可以设定,也可以不设定
数组中第一个元素的编号为0,第二个为1,以此类推。编号使用方括号括起来
在这上例中aa[0]的值为4、aa[1]的值为3、aa[2]的值为2、aa[3]的值为1
创建(定义)数组的同时,可以赋初值,也可以不赋初值。
intbb[];创建数组bb,不设定数组元素个数
intcc[8];创建数组cc,设定数组元素为8个,不赋初值
intdd[3]={9,8,7};创建数组dd,设定数组元素为4个,并赋初值
赋值后,dd[0]的值为9、dd[1]的值为8、dd[2]的值为7
intee[9]={0,1,2,3};创建数组ee,设定数组元素为9个,但只给前4个元素赋初值
数组使用时的赋值
数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外,数组元素必须一个一个赋值
例如:dd[2]=1;
这是对数组dd的第3个元素dd[2]([0]是第1个,[2]表示第3个)重新赋值为1
在这里,没有整数型变量定义符int,
这样,数组dd原有三个值{9,8,7}就变为{9,8,1}
数组的引用
数组只是一系列变量的集合,所以每次只能使用数组中的一个元素。
数组的引用必须指定明确的引用对象,一次只能引用一个。如果需要使用整列数组,则必须逐个使用。
例如:数组aa[4]的值为{4,3,2,1}
我们用aa来引用数组aa中的值
当i=0时,aa[i]的值为4
当i=1时,aa[i]的值为3
当i=2时,aa[i]的值为2
当i=3时,aa[i]的值为1
这样,我们在处理数列的时候,使用数组就能带来极大的方便
MT4编程入门6:市场数据取值
预定义数组(MT4已经定义好的,可以直接使用)
开盘价、最高价、最低价、收盘价、成交量等历史数据,每根K线蜡烛都各有一个,所以必须用数组来解决问题,MT4有几个预定义数组:
类型为双精度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、High、Low、close,表示第i+1根K线蜡烛的开盘价、最高价、最低价、收盘价
以此类推。。。。。。
注意:这些是数组,用的是方括号。
预定义变量
买入价、卖出价是实时价格,MT4用预定义变量Ask和Bid表示,数值类型为double双精度
还有一些预定义变量,如:
Bars表示图表中的蜡烛数,类型为int整数型
Digits表示当前货币对的小数位,类型为int整数型,无日元币对为4,有日元币对为2,黄金石油等一般也为2
Point表示当前货币对的点值,类型为双精度double型,无日元币对为0.0001,有日元币对为0.01。与Digits正好相反。
指标函数
它们都有三个参数:货币对名、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型
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编程入门7:判断语句
if语句
if语句很常用,也比较简单。
规则:如果小括号中的条件成立,则执行大括号中的语句;如果不成立,则跳过大括号。
例如:
if(a==1)
b=c+1;
我们在编写报警指标的时候,就经常用到这一语句:
如果“价格向上达到指定价位”,则“报警”
如果“MACD上穿”,则“报警”
如果“均线金叉”,则“报警”。等等
intmark=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时,说明已经下穿报过警了,不能再下穿报警了,但仍可上穿报警。
if...else语句
规则:如果小括号中的条件成立,则执行if下大括号中的语句1;如果不成立,则执行else下大括号中的语句2。
if(条件)
语句1;
else
语句2;
注意事项
只有语句后面才用到语句结束符“;”条件、大、小括号后面都不用“;”
语句用大括号括起来,但如果只有一行语句,则大括号可以省略
MT4编程入门8:循环
一幅K线图有几千上万条K线,每根K线又各有开收盘价、最高低价等数值,而且还有很多移动平均线、MACD、RSI等指标值。
面对海量数据,我们必须用循环来实现数据的取值和赋值。
while循环
while(条件)
语句1
语句2
。。。
规则:当小括号中的条件成立时,就执行大括号中的语句,执行完了再判断条件是否成立,如果条件成立就继续执行大括号中的语句。
只要条件成立,程序就不停地运行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环。
它与if语句的区别是:if语句是当条件为真时运行一次;而while语句则是只要条件为真,循环体语句就不停地运行,直到条件为假时结束循环。
externint快线=12;
externint慢线=26;
doublebuffer[];
inti=0;
while(i<1000)
buffer=iMA(NULL,0,快线,0,MODE_EMA,PRICE_CLOSE,i)
-iMA(NULL,0,慢线,0,MODE_EMA,PRICE_CLOSE,i);
i++;
这里,循环执行条件是i<1000,循环体中有两个语句,一句是把两条均线的差值赋给数组buffer,另一句“i++;”是每运行一次,i的值在原有基础上增加1。这样,随着循环的不断运行,i的值逐渐增加,循环1000次后,i的值也就从0变为1000,此时“i<1000”就不再成立,循环结束。这样,数组buffer[]中也就有了1000个值。
for循环
for循环与while循环在原理上是一致的,只是书写格式上有所区别
把上面的例子改成for语句:
for(inti=0;i<1000;i++)
与前面相比,我们注意到:
“inti=0;”语句从“while(i<1000)”上方移到循环条件“i<1000”的前面;
“i++;”语句从循环体中移到了循环条件“i<1000”的后面;
循环执行顺序与while循环一致:
第一步、先执行小括号中的第1句:inti=0;
(此语句用来定义初始变量,在循环中仅执行一次,可以为没有任何表达式的空操作符“;”)
第二步、再判断小括号中的第2句是否成立:i<1000;
如果不成立,则循环结束;如果成立,则循环继续运行,执行第三步
第三步、按顺序执行大括号中的语句
第四步、执行小括号中的第1句:i++(此语句即:每执行一次,i的值增加1)
然后回到第二步继续执行循环。
再补充一点:如果循环体中(大括号中)只有一行语句,大括号可以省略
MT4编程入门9:MT4自定义指标的结构
MT4自定义指标一般由四个部分构成:
文件头部
参数、变量和数组的定义
初始化函数init()
主函数start()
文件头部,也称为预处理程序
预处理程序以“#”开头,行尾无语句结束符“;”
常用的预处理程序有:
1、#propertyindicator_chart_window
把指标显示在主图。如:均线、SRA等类指标用到此语句
2、#propertyindicator_separate_window
把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句
3、#propertyindicator_buffers3
显示3根指标线
4、#propertyindicator_color1Red
第1根指标线的颜色为Red
5、#propertyindicator_width11
第1根指标线的粗细分别为1
6、#propertyindicator_level10.00
在0.00值位置横划1条虚线
全局性的参数、变量、数组在此定义,局部变量可在start()函数中定义
init()在自定义指标加载时运行一次。
初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数
当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。
自定义指标的编程主要依靠此函数进行。
start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。
另外,还有一个反初始化函数deinit()
deinit()在自定义卸载时运行一次,可用以去除指标加载时init()所做的初始化操作。
MT4编程入门10:画一条指标线
要画指标线,只要在程序中写明以下几点就可以了:
明确指标线所在窗口,是主图还是副图
要建立数组,用以保存指标线在各个位置的值。
要建立指标线与数组的对应关系,哪个数组对应哪条指标线
要明确指标线的线型,是曲线还是柱线或者是箭头
如果指标线是箭头,还要说明是哪种箭头
给数组赋值
其中:
二条写在文件头部中,
第三、四、五条写在init()函数中(init函数仅在指标加载时运行一次)
第六条写在start()函数中(start函数在数据发动变动时运行,变动一次运行一次)
下面以MACD为例说明
我们知道,MACD指标由二条曲线和一组红绿柱线组成。(下图一)
白线是二根均线的差;
紫线是白线的移动平均线;
红绿柱线则是白线和紫线的差,白线上穿紫线,出现红柱,下穿则出现绿柱。
我们从简单入手,先去除紫线和红绿柱线,仅保留其中的那根白线,来看白线是怎样画出来的。
下面是全部语句:
#propertyindicator_separate_window
#propertyindicator_color1White
#propertyindicator_level10
externintFMA=12;
externintSMA=26;
doublebuf[];
intinit()
SetIndexBuffer(0,buf);
SetIndexStyle(0,DRAW_LINE);
return(0);
intstart()
intlimit=Bars-IndicatorCounted();
for(inti=0;i buf= iMA(NULL,0,FMA,0,1,0,i) -iMA(NULL,0,SMA,0,1,0,i); 说明如下: ============================================== 以下为上述语句的简要说明 指标放在副图 第一条指标线为白色 在副图中零值位置上画一条水平横线, 设立二个整数型变量,默认值为12和26,允许外部修改值 设立一个数组 初始化函数。该函数在指标加载时只运行一次。init是系统默认的函数名,但使用时仍需要进行创设,所以要加定义符int 设置数组buf为第一条指标线 设置第一条指标线线型为连续曲线 函数结束语句 指标触发函数。与init函数不同,该函数在有数据变化时被触发,如果数据被不断更新,则该函数将不断执行。start也是系统默认的函数名,但使用时也仍然需要进行创设,所以也要加定义符int 自定义一个变量limit,并赋值 Bars是图表中的柱数 IndicatorCounted()缓存中的柱数,就是已经计算过的有值的柱数 这样limit的值就是未经计算的柱数,这样就可以起到优化程序的作用。 循环语句。 循环从i=0开始,每循环一次i值增加1,一直循环到i 由于循环变量i为一个新变量,所以要先定义,加上整型变量定义符int 下面大括中为循环体,此例中只一条语句 给数组buf赋值,其值分别为相应位置上两条均线的差 i是水平位置序号值,即烛柱从右到左的序号,右边第一个烛柱序号为0 start函数结束 MT4编程入门11:MT4的报警 报警功能是MT4的一大特色。它可以在预定的条件达到时,发出警报。 与指标画线相比,报警语句显得非常简单, 只要在判断语句中加一个报警语句即可 报警方式有:弹出窗口报警、音乐报警、邮件报警等。 弹出窗口报警: 当(条件达到)执行此语句时,以弹出窗口警告。 格式:Alert(内容1,内容2,内容3,内容4); 报警内容为字符串型,内容之间加逗号 Alert(Symbol(),'4小时图MACD上穿零轴'); 音乐报警: 当(条件达到)执行此语句时,播放一段音乐。 格式:PlaySound('音乐文件名.wav'); 文件类型为wav格式,并且保存在C:\ProgramFiles\MetaTrader4\sounds目录中 文件名加引号 邮件报警: 当(条件达到)执行此语句时,发送一个邮件。 (收发件人地址在MT4系统中设置详见《MT4编程实例1:一个简单的小程序,让你的手机摇身变成外汇行情接收机》) 格式:SendMail(标题1+标题2,内容1+内容2); 标题之间以加号连接,内容之间也以加号连接 邮件标题和邮件内容以逗号间隔 下面是《价格穿越某均线报警》举例 +--------------------------------- #propertyindicator_chart_window externint警戒均线=20; if(iHigh(0,0,0)>=iMA(0,0,警戒均线,0,MODE_SMA,PRICE_CLOSE,0) &&iHigh(0,0,1) &&mark!=1) Alert(Symbol(),'向上触及30均线'); 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(),'向下触及',警戒均线,'均线'); 部分语句说明: 此句是把程序放在主图,当然这此例中放在副图也一样 externint定义一个外部参数变量,整数型,允许外部值修改 int定义一个整数型变量 intstart()定义触发函数 if()判断 iHigh()最高价值函数 iLow()最低价值函数 iMA()移动平均线值函数 Alert()报警函数 Symbol()商品名称函数 &&逻辑运算符“并且” !=逻辑运算符“不等于” MODE_SMA简单移动平均模式 PRICE_CLOSE以收盘价计算 再说一下自定义变量mark的作用: mark的初值是0,当上穿报警时给mark赋值1,当下穿报警时给mark赋值2。 这样当mark的值为1时,说明已经对上穿报过警了,就不能再次对上穿报警; 当mark的值为2时,说明已经对下穿报过警了,就不能再次对下穿报警。 这样就起到了消除重复报警的作用。 MT4编程入门 MT4编程入门[工具篇]为了达到MT4自由编程的目的,我们首先需要了解MT4编程工具MetaEditor,这个工具是安装MT4后,在程序列表里面自动出现的MT4编程工具。 4g-k6g1q+k6S6np0x7@外汇牌价-外汇汇率-外汇论坛-黄金-期货-投资理财-外汇开户-炒外汇-外汇保证金启动MetaEditor的方法: 方法一、可以从Windows—〉开始—〉所有程序---〉MetaTrader--〉MetaEditor来启动 (:b,B(m$I:M1e6U'k6s!J富伦麦汇外汇论坛方法二、当你已经启动了MetaTrader的情况下,点击MetaTrader顶部菜单的来启动 /@!K/D2N4@:D3U.D$Fwww.trader-club.cn方法三、当你双击一个MT4的指标源码文件的时候,Windows会自动启动MetaEditor并将此原文件调入MetaEditor富伦麦汇外汇论坛'E'w4H7e4E%F MetaEditor基本使用方法: ,m'sT/_-q!B8u1、建立新指标Indicator或者智能交易Expert,2种文件的编译后文件后缀都是.ex4,源码文件本身后缀都是.mq4外汇牌价,外汇汇率,外汇论坛,炒外汇,保证金交易,黄金,期货&O0M8tR6s3w:j7y-^ 说明:指标文件Indicator必须放置在MT4安装目录的\expert\indicator\目录下;智能交易文件Expert必须放置在MT4安装目录的\expert\目录下;放置在上述目录下的.ex4(指标|智能交易)文件,会被MT4自动识别并列入程序导航条下的“智能交易”以及“自定义指标”栏目里,当你在使用MetaTrader的时候,就可以直接附加这些技术文件到你的K线图表上。 .S7u8V1y'j-C外汇牌价,外汇汇率,外汇论坛,炒外汇,保证金交易,黄金,期货3、如上所述,MetaTrader只认识.ex4文件,那末当我们拿到.mq4原码文件后,如何生成.ex4文件呢?首先用MetaEditor打开原码文件(保证原码文件在上述的目录里),点击MetaEditor顶部横条的Compile按钮来编译成.ex4文件,当MetaEditor底部的编译结果显示:0error(s),0warning(s)就表示程序本身没有语法问题,并且已经编译成同名的.ex4文件了。富伦麦汇外汇论坛.[/D(Q4u(n3b$}8x,k MetaEditor新建指标|智能交易的方法:8`%R*[5J.y(n5j*a+A 一种是传统的循规蹈矩的建立方法: 4b6p8~c1x-p9S-\外汇牌价,外汇汇率,外汇论坛,炒外汇,保证金交易,黄金,期货 jpg(12.19KB) 2007-9-3014:03 富伦麦汇外汇论坛&j%m,l1p3B8V;[ 点击MetaEditor顶部菜单的按钮 j'x7^)W1\2P$H)C&X*Hwww.trader-club.cn选择你想创建的程序类型,在MT4里面有很多不同作用的文件分类,放置在对应的目录下起作用。上面图表里面我们经常用到的是:ExpertAdvisor(智能交易)CustomIndicator(自定义指标)。富伦麦汇外汇论坛)`7c,p&x'@&N#^2} 点击下一步,根据窗口的要求输入你想使用的文件名称,并指定所需要的“输入变量”和初始值,最后确认进入这个指标的原码窗口中。 &K#r7X)d0u6^.l3J!X,P在这里你会看到有一部分代码已经出现,这是MetaEditor根据你前面的选择和输入变量,写入的代码。其实完全可以不理会前面所输入的那些变量,直接采用修改代码的方式完成指标所有属性的设定。这就是我们要说的第2种建立指标的反应。外汇牌价,外汇汇率,外汇论坛,炒外汇,保证金交易,黄金,期货;L4u6z/q'b0i;U'I 第2种建立指标的方法:外汇牌价-外汇汇率-外汇论坛-黄金-期货-投资理财-外汇开户-炒外汇-外汇保证金7h*J+W7g%A.f#n.O'h MetaEditor中帮助文件的使用方法:520FX外汇牌价,外汇汇率,投资理财,外汇论坛,炒外汇,K&c4b9A6v' +s'^Q9L9e,K2})l:uwww.trader-club.cn2、在MetaEditor中间的程序原码窗口里面,当你研究别人的原码时,出现一个你不熟悉的函数,这时候你可以将光标移动到这个函数上面,按F1,则这个函数的使用方法,会显示在底部的窗口里面,这是一个非常有用的查询方式!富伦麦汇外汇论坛3f)n$`!p%x(_!Q 底部窗口会显示你查询的函数说明、使用方法、例子等等内容。 ;~*].{2R&Q%a5w外汇牌价-外汇汇率-外汇论坛-黄金-期货-投资理财-外汇开户-炒外汇-外汇保证金富伦麦汇外汇论坛8s)T*{7Q)I'I*\3W 好了!看到这里,你应该对MT4的编程工具有了初步的了解,说实话,确实很简单,很容易掌握。 MT4智能交易系统介绍 智能交易系统软件是一个创新的交易工具,允许客户对自己的交易策略进行设定并进行测试。还可以创建新的技术指标 智能交易系统软件是用来对交易过程全程自动化,免除交易者连续对市场进行日常烦琐的监护。许多专业交易商利用多层交易系统,对不同的市场和在不同的环境下进行操 作。通常他们在著名的分析软件包里对交易战略进行编写和测试,比如,MetaStock和TradeStation。 使用MetaTrader4智能交易系统软件,招招领先,你可以把交易系统产生的信号和真实账户联系起来,这样连接以便于能追踪和管理你的某个时段的开仓部位,提交的订单和止损单。 什么是智能交易系统?它是一个用特殊的MetaQuotes语言4(MQL4)编写的自动交易系统(ATS),和特定的图表联系在一起。智能交易系统不仅能通知交易商交易机会,而且还能自动执行交易账户上的交易,直接发送到交易服务器。和许多的IT系统一样,智能交易系统系统支持历史数据战略测试,图表上表示的登入/登出点。而且,智能交易系统的可执行码分别存储于源文件和加密的执行文件中-这种安排保证了交易商所使用的逻辑隐藏(如有必要的话),而不会泄密。 编写自己的智能交易系统软件也非常容易:尝试一下吧!不需要是专业编程高手,你只需要学会使用非常简单的语言-MQL4语言。即使用户不能自行编写智能交易系统规则,但是他需要熟悉最近的编程技能,不过很可能不需一个小时他便掌握了这些规则并能编写程序。 无数的交易商为MetaStock和TradeStation软件开发了多种多样的交易战略。其中多数均被翻译成MQL4语言,这就使得用户可以把前期累计的经验并合到里面去。有些即学即用智能交易系统版本可以从本页下载。 MetaTrader4软件将智能交易系统在程序的根目录/Experts子目录里保存为*.MQ4(sourcetext)和*.EX4(可执行码)文件。交易商可以无限量地保存智能交易系统数据,这些数据可以通过导航条窗口容易地加以管理。 创建自定义智能交易系统数据的程序以及将数据和交易终端连接在MetaTrader4用户指南里有详细的描述。 MetaQuotes4语言是用来编写自定义智能交易系统软件,以便使交易程序管理自动化以及执行交易商自己的交易策略。MetaQuotes4语言易学、易用、易创建。MetaQuotes4语言包括相当数量的变量,用来控制当前和前期的报价、主要的算术和逻辑运算和特征,主要的内置指标和用来开启和控制头寸的命令。在语法上,该语言和由TradeStation技术有限公司开发的简易语言相似,但是它有其自身的一些具体特征。 程序代码是用MetaEditor4编辑器编写的,它能够用不同的色彩集中反映MQL4语言的不同结构,因此,有助于用户熟悉专家系统的文本。注解开始于//符号(双斜线)。注解也可以用“斜线-星号”-“星号-斜线”组合(/*[注解]*/,就像在'C'编程语言一样)。 设定和控制操作战略,交易商保存一份日志文件,存储产生的信号信息、变量输出和已执行交易的结果。智能交易系统日志保存在MetaTrader4目录下/logs/YYYYMMDD.log文件里。当前的日志可以从下方的“终端”窗口(日志标签)直接进入。 进入MQL4语言的目录系统,要么按目录按钮或从工具菜单打开MetaQuotes语言词典窗口操作。这个短小的手册包含分类、运算、存储词语等功能,使得用户对该语言所用到的每个元素都有所了解。 主要语言结构 像其他任何语言一样,MQL4有一套构成基本结构的主要组成元素。这些组成元素以一种特殊的方式组合排列的,以便代表适当的陈述和表达。 语言的主要对象就是数据,包括三种类型:数字、逻辑和排列。所有的数值均采用双格式,逻辑数据可能包括真值和假值。排列就是用省略号标注的一系列字符。字符串也叫做文本串。数据可以包含在适当类型的变量之中,或直接由程序的源文本表现出来。 一个MetaQuotes语言陈述指一个完整的用法说明。陈述可以包括保留字、运算符号、数据、变量、表达式或标点符号,而且总是以分号结尾。 保留字指具有特定或特别意义的预先设定的词语。 运算符号指在数据、变量和(或)表达式中特定的具体运算符号。 变量是用来限制数字、排列或逻辑数据的。 表达式指保留字、变量、数据和运算符号的组合,因为它们具有语言的3中类型(保留字、变量、数据)中的任一价值。 标点符号用来代表表达式,界定参数,区分词语或重新排列计算顺序。 标点符号 字符名称描述 ;分号 结束MetaQuotes4语言指令 ()圆括号对表达式的值进行分组,改变计算顺序。 标注函数参数并启动变量描述表达式 标注变量的初始值并在变量描述区排列组合 ,逗号提取函数值时,对参数进行区分 在变量描述区对变量进行区分 在描述排列长度时对数字进行区分 区分进入排列元素的指标 :冒号用在变量描述区,启动变量列表 ''引号标注一个文本(字)串。 [] 方括号标注数字,确定排列长度 标注进入某个特殊排列元素的数字(指数) 标注进入历史数据的期间数字 {}波形括号充当运算括号。可以用来代替begin...end。将指令系列隔离成块。 /**/注解括号标注注解 //双斜线明确说明单串注解的开始 3.运算符号 3.1.分配符号 分配符号'='(等号)是用来将具体数值(数字、排列或逻辑,视变量类型而定)分配到变量中。分配值可以是表达式的结果。比如: 变量:Counter(0); ... Counter=Counter+1;结果,反向变量取值为1。变量值也可以分配来对元素进行排列。 3.2.字串符号 操作文本串,只有一个运算符可以用上:'+'(加号)。它是用来连接两个字串的。比如: 变量:字串(''); 字串='some_'+'text'; 结果,字串变量包含“some_text”这样的文本串,允许将字串与数字和逻辑值结合起来。在后面的这个例子里,数字及或逻辑值在结合前,应转化为字串类型。比如: String='string'+1; 因此,字串变量将包含'string1'的文本串。 操作数不仅可以是数值,也可以是相应的含有这样数值类型的变量,以及表达式,经执行后,便产生这样的数值。 3.3.数学符号 4种主要的数学运算:加法-'+'(加号)、减法-'-'(减号)、乘法-'*'(星号)、除法-'/'(斜线),都用在计算数值的数学表达式里。 数学表达式的例子:(Ask+Bid)/2,High[1]+20*Point ifFreeMargin<1000thenexit;这个字串按词典顺序进行比较,即,'aaa'字串被认为小于字串'zzz'。当逻辑值进行比较时,我们应该牢记:“True”的逻辑值的数值为1,而“False”的逻辑值的数值为“0”。 3.5.逻辑符号 逻辑符号使用户能够将逻辑值结合起来。逻辑OR-'|'(垂直线或竖杠);逻辑AND-'&'(“和”符号)。逻辑符号有相应的保留字OR,AND,NOT。比如: IfFreeMargin>100andFreeMargin<1000thenprint('Freemarginis',FreeMargin);注意:当OR和AND运算符号是双值时,即它们有两个值进行运算,NOT运算符号是单值,即它之适用于单值。比如: Variable:Condition1(True); Condition1=FreeMargin>=1000; IfnotCondition1thenexit; 下面是逻辑运算符号的结果表:Value1Value2Value1ORValue2 TrueTrueTrue TrueFalseTrue FalseTrueTrue FalseFalse False Value1Value2Value1ANDValue2 TrueFalseFalse FalseTrueFalse FalseFalseFalse Value1NOTValue1 TrueFalse FalseTrue 4.固定字 MetaQuotes4语言使用下面的几组固定字。 逻辑符号。 AND,NOT,OR. MQL4语言指令。 Array,Begin,Break,Continue,Define,Downto,Else,End,Exit,For,If,Input,Then,To,Variable,While。界定语言指令结构的固定字也叫做关键字。 内置函数。 Abs,AccName,AccountName,Alert,Ceil,CloseOrder,Comment,Cos,CurTime,Day,DayOfWeek,DeleteOrder,Exp,Floor,Highest,Hour,iADX,iATR,iBANDS,iCCI,iMA,iMACD,iMFI,iMOM,iRSI,iSAR,iSTO,iWPR,IsDemo,IsIndirect,LastTradeTime,Log,Lowest,Minute,Mod,ModifyOrder,Month,MoveObject,NumberToStr,Ord,OrderValue,Period,Pow,Print,PrintTrade,Rand,Round, ServerAddress,SetArrow,SetObjectText,SetOrder,SetText,Sin,Sqrt,Srand,Symbol,Tan,TimeToStr,Year. 预先设定用户变量(用户定义变量)。 Lots,StopLoss,TakeProfit,TrailingStop. 预先设定交易终端变量。 AccNum,AccountNumber,Ask,Balance,Bars,Bid,Close,Credit,Equity,FreeMargin,High,Low,Margin,Open,Point,PriceAsk,PriceBid,PriceHigh,PriceLow,PriceTime,Time,TotalProfit,TotalTrades,Volume. 预先设定内置函数参数(宏命令)。 MODE_CLOSE,MODE_EMA,MODE_HIGH,MODE_LOW,MODE_MAIN,MODE_MINUSDI,MODE_OPEN,MODE_PLUSDI,MODE_SIGNAL,MODE_SMA,MODE_STOPLOSS,MODE_TAKEPROFIT,MODE_VOLUME,MODE_WMA,OBJ_HLINE,OBJ_SYMBOL,OBJ_TEXT,OBJ_TRENDLINE,OBJ_VLINE,OP_BUY,OP_BUYLIMIT,OP_BUYSTOP,OP_SELL,OP_SELLLIMIT,OP_SELLSTOP,SYMBOL_ARROWDOWN,SYMBOL_ARROWUP,SYMBOL_CHECKSIGN,SYMBOL_STOPSIGN,SYMBOL_THUMBSDOWN,SYMBOL_THUMBSUP,VAL_CLOSEPRICE,VAL_CLOSETIME,VAL_COMISSION,VAL_COMMENT,VAL_LOTS,VAL_OPENPRICE,VAL_OPENTIME,VAL_PROFIT,VAL_STOPLOSS,VAL_SWAP,VAL_SYMBOL,VAL_TAKEPROFIT,VAL_TICKET,VAL_TYPE. 实际上,上述固定字为宏记录器,即语法分析程序用数值取而代之。宏记录器的引入简化了编写用户功能要求的程序:更加方便、无关联的重要词语可以用来替代一些函数参数值。同样可以用于色彩名称。 色彩。 AliceBlue,AntiqueWhite,Aqua,Aquamarine,Azure,Beige,Bisque,Black,BlanchedAlmond,Blue,BlueViolet,Brown,BurlyWood,CadetBlue,Chartreuse,Chocolate,Coral,CornflowerBlue,Cornsilk,Crimson,Cyan,DarkBlue,DarkCyan,DarkGoldenrod,DarkGray,DarkGreen,DarkKhaki,DarkMagenta,DarkOliveGreen,DarkOrange,DarkOrchid,DarkRed,DarkSalmon,DarkSeaGreen,DarkSlateBlue,DarkSlateGray,DarkTurquoise,DarkViolet,DeepPink,DeepSkyBlue,DimGray,DodgerBlue,FireBrick,FloralWhite,ForestGreen,Fuchsia,Gainsboro,GhostWhite,Gold,Goldenrod,Gray,Green,GreenYellow,Honeydew,HotPink,IndianRed,Indigo,Ivory,Khaki,Lavender,LavenderBlush,LawnGreen,LemonChiffon,LightBlue,LightCoral,LightCyan,LightGoldenrod,LightGreen,LightGrey,LightPink,LightSalmon,LightSeaGreen,LightSkyBlue,LightSlateGray,LightSteelBlue,LightYellow,Lime,LimeGreen,Linen,Magenta, Maroon,MediumAquamarine,MediumBlue,MediumOrchid,MediumPurple,MediumSeaGreen,MediumSlateBlue,MediumSpringGreen,MediumTurquoise,MediumVioletRed,MidnightBlue,MintCream,MistyRose,Moccasin,NavajoWhite,Navy,OldLace,Olive,OliveDrab,Orange,OrangeRed,Orchid,PaleGoldenrod,PaleGreen,PaleTurquoise,PaleVioletRed,PapayaWhip,PeachPuff,Peru,Pink,Plum,PowderBlue,Purple,Red,RosyBrown,RoyalBlue,SaddleBrown,Salmon,SandyBrown,SeaGreen,Seashell,Sienna,Silver,SkyBlue,SlateBlue,SlateGray,Snow,SpringGreen,SteelBlue,Tan,Teal,Thistle,Tomato,Turquoise,Violet,Wheat,White,WhiteSmoke,Yellow,YellowGreen. 所有的固定字均是非敏感字号,即它们可以小写也可以大写。 4.1.智能交易系统向导 智能交易系统向导提示MQL4允许编写智能交易系统、自编指标、自编脚本和从模板中进行编辑 预先设定参数或变量的名称,将会自动在文本编辑栏中出现参数框架: 4.2.MetaQuotes4语言的指令结构 4.2.1.变量宣告和语句 在计算过程中保存临时数据要求使用变量。变量在本程序的开头部分就用保留字、变量、排列和定义进行了叙述。他允许使用这些词语的负数形式,即“Variables,ArraysandDefines”。这些词中间总有一个开始变量的宣告叙述。这些词语的差别如下:'variable'语句简单变量,'array'语句排列,'define'语句附加用户定义的变量,类似于预先界定的用户变量,均可以通过设置对话框进行修改,即从外部修改。然而,又不像预先界定的变量,用户变量可以在程序内部的计算过程中进行更改。 变量宣告语法: 变量:名称(初期值);这里名称就是变量的名字;“初期值”就是变量的起初值。初期值对变量的类型-数字、字串或逻辑值进行界定。 一个数字变量宣告的例子: Variable:Counter(0); 一个字串变量宣告的例子: Variable:String1('任意字串'); 一个逻辑变量宣告的例子: Variable:MyCondition(false); Array:ArrayName[Arraylength](初始值);其中,数组长度有一个或若干(多达4)个数字-数字-number[,number[,number[,number]]]. 在MetaQuotes4语言里,数组可能是1-,2-,3-,4-个元素长度,一般情况下,数组就是一组可以用同一个名称查找到的、并按照相继成行定位数组且给定了数组元素的序列号(数)的变量。数组方便于对同样类型的数据排序。数组的一个典型例子就是交易终端的历史数据,比如,收盘、开盘、高点位、低点位、交易量。这些数据作为单一元素数组的。比如,Close[5]指后退5个交易期间的收盘值。两个元素的数组可能是一个简单表格,其中第一个分量为行而第二个分量则为列。 Array:MyTable[10,5](0);//一个10行5列的表格。 print(MyTable[2,4]);//打印第二行的第4个元素 数组可能包括任何类型的数值-数字、字串或逻辑值,但是应该为同一类型,其中的初期值在数组被宣告时为特定的。 附加用户定义变量宣告语法: 定义:名称(初期数);其中名称为变量名称;初期数为变量起初的数字值。 应该注意,附加用户定义变量可能只为数字类型。如上所述,用户定义变量可以在程序的计算过程中进行修改。这些修改只能运用到智能交易系统的当前时段,直到特殊的智能交易系统从图表中删除或客户终端的操作结束。当新的智能交易系统时段启动时,用户定义变量值将重新初始化。 4.2.2.退出语句 退出报告中断智能系统软件的操作。也就是所谓的预先设定的程序终止。 4.2.3.IF-THEN条件语句 If-Then条件语句使得控制智能交易系统指令的执行顺序得以可能。该语句可能有不同的方式编写: ifConditionthenStatement;or ifConditionthenbegin Statement; end;其中,条件为一个逻辑表达式,取值为True或False; 'Statement'指MetaQuotesII语言中的任何指令。符号括号Begin–End可能被波形括号{}所替代。 条件语句可能被用在对程序进行分支。为达到此目的,另一个关键字Else要用上。语法: ifConditionthenStatement1elseStatement2;or end end;or elseStatement2;or ifConditionthenStatement1 end;可以使用嵌套式的条件语句。一般说来,语句可能由MetaQuotesII语言的任何合法指令表示,除非变量宣告,因为严格来说,变量宣告并不是一个可执行语句。 4.2.4.WHILE循环 WHILE循环确保在循环条件有效时,包含在循环主体中的语句的多次执行。一个循环可以用Break语句提前终止。迭代可以通过使用Continue语句停止。这个语句造成循环的下一个迭代开始,即Continue后面的语句直到循环主体结束在本迭代中不得执行。在条件语句中用Break和Continue是合理的。语法: whileConditionbegin [break;][continue;] end;其中,条件是循环执行条件-在每个循环迭代之前计算出的一个逻辑表达式,取值为True或False; 语句是MetaQuotes4语言的任何指令。 符号括号Begin–End表示循环主体,可以被波形括号{}替代。 “BreakandContinue”描述也不是强制性的。 Example: Counter=1; whileCounter<=Barsbegin print(Close[Counter-1]); Counter=Counter+1; end;这个例子说明一个将要执行的循环,基准次数,或者,如果基准=0,而且循环就不止一次。 4.2.5.For循环 For循环确保在循环主体中所包含的具体次数的语句执行。语法: forNumberVariable=InitialValueto|downtoLimitValuebegin end;其中数字变量就是在每次迭代之后循环要么增加或者减少到1的循环变量(视使用关键字To或Downto而定); 初期值指循环变量的起初数值。 语句指MetaQuotes4语言的任何指令。 ToorDownto确定循环变量增加到1(To)或者减少到1(Downto); 限值是循环变量的边际数值。 操作符bracketsBegin–End表示循环主体,可以被波形括号{}取而代之。 Break和Continue语句并非是强制性的。 Example:比如: forCounter=1to10begin ifCounter>Barsthenbreak; print(Close[Counter]); end;这个例子说明一个可能被执行10次的环。但是,若基准值小于10,循环就会提前终止,也就是说循环执行BARS次。 4.2.6.BREAK中断语句 中断语句确保一个For循环或一个While循环早点终止。前例不仅说明循环执行,也说明了中断语句的使用。“Break”语句不仅用于循环主体之外。循环是嵌套式的,中断语句中离其最近的循环。换言之,中断内部循环的语句并没中断外部循环。 4.2.7.CONTINUE继续语句 CONTINUE继续语句提前终止循环的迭代,并从循环主体开始下一个迭代。换句话说,在Continue之后语句被忽略。比如: ifCounter>Barsthencontinue; end;这个例子说明一个将被执行了差不多10次的循环。但收盘值(counter)被打印不会比基准次数多。'...'代表MetaQuotes4语言的其他语句。 4.3.交易中断的预选界定变量 为了最大的方便用户,交易中断的一些变量可以从智能系统输入。 AccountNumber-账号(同义词:AccNum) Ask–卖价(买方出价) Balance–交易账户的余额值 Bars–图表上条形的数目-说明用数据填充图表程度的非常重要的一个变量。 Bid-买入价(卖方要价) Close–收盘价格 Credit–信用优先 Equity–账户状况,包括未实现利润 FreeMargin–交易账户的自由保证金值-也用来核查账户资金的可用性; High–期间最高价位 Low-期间最低价位 Margin–用来支撑开仓部位的资金(保证金) Open–开盘价 Point–当前金融工具单点上的价值(此点此时智能交易系统系统运行),比如,USD/JPY-0.01,USD/CHF-0.0001等。 PriceAsk–在市场观测窗口上显示的当前卖价。 PriceBid-在市场观测窗口上显示的当前买价。 PriceHigh–当前24小时期间的最高买价。 PriceLow-当前24小时期间的最高卖价。 TotalProfit–所有开仓部位的总未实现利润; TotalTrades–开仓部位的总数和交易中断上的延迟订单; Volume–交易量(期间交易的数目) 应注意到,Close,Open,High,Low,Volume,Time为历史数据数组(seriesarrays),在上个交易期间允许进入这些数据。 4.4.内置函数 Abs–返回这个数值的绝对值(模块) 语法:Abs函数(n个表达式) 参数:数值 AccountName–返回包含用户名的文本串(同义词:AccName) Alert–产生包含用户定义数据的对话屏 语法:Alert(...) 参数的任何非零数都可能。 Ceil–返回代表最小接近整数的一个数字,它等于或大于特定的数值。 语法:Ceil(n个表达式) CloseOrder–收盘头寸(部位) 语法:收盘头寸(订单、单位、价格、滑动量、色彩) Parameters:参数: order-开仓部位的订单数 lots–单位数 price–优先收盘价 slippage–最大价格滑动值 color–图表上交叉点的色彩 Comment–在图表的左上角产生的用户定义数据 语法:Comment(...) Cos–计算和返回数值的余弦值,代表用弧度表示的角度。 语法:Cos(n分表达式) CurTime–返回从1970年元月1日起所经过的秒数。 Day–返回当月当前日序列号 DayOfWeek–返回当周当前日序列号。1–星期日,2–星期一,...,7–星期六 DeleteOrder–删除前期提交的延迟订单 语法:DeleteOrder(订单) 参数:订单-延迟部位的订单数 Exp–返回代表特定数值指数的一个数目 语法:Exp(n个表达式) Floor–返回代表最大接近整数的一个数字,它等于或小于特定的数值。 语法:Floor(n个表达式) Highest–返回期间特定数间的Open,Low,High,CloseorVolume(取决于“类型”参数)的最大值。 语法:Highest(类型、beginbar、期间) Type类型–一个返回变量,可能去下列数值:MODE_OPEN,MODE_LOW,MODE_HIGH,MODE_CLOSE,MODE_VOLUMEbeginbar–表示条形的转换,与当前条形有关,并从中取值。 periods期间–计算执行依据的期间数 Hour–返回在24小时期间内当前小时的序列数。 iADX-平均指导动作目录 语法:iADX(期间、模式、转换) 参数: period–计算的期间数; mode–数据类型,可以取下列数值:MODE_MAIN(主要指标)、MODE_PLUSDI(line+DI),MODE_MINUSDI(line-DI). shift–与当前条形有关的转换(后退期间数),为数据待取值的依据。 iATR-平均间距的指标 语法:iATR(期间、转换) period–计算期间数; 平均移动收敛/发散指标(iBANDS––布林带指数 语法:iBANDS(期间,误差,模式,转换) deviation-误差; mode–可以取下列值:MODE_MAIN(主线、滑移)、MODE_LOW(下边线),MODE_HIGH(上边线). iCCI–交易通道指标 语法:iCCI(期间、转换) period–计算的期间数 iMA–移动平均指标 语法:iMA(期间、模式、转换) mode–计算模式,可以取下列值:MODE_SMA,MODE_EMA,MODE_WMA. iMACD-平均移动收敛/发散指标 语法:iMACD(fast_ema_period,slow_ema_period,signal_period,mode,shift) fast_ema_period-计算'快'平均移动期间(通常12); slow_ema_period-numberofperiodsforcalculationofthe'slow'movingaverage(usually26); signal_period计算'慢'平均移动期间(通常12); mode数据源,可以取下列值:MODE_MAIN(主要指标)、MODE_SIGNAL(信号列); iMFI–现金流量指标 语法:iMFI(期间、转换) iMOM–动量指标 语法:iMOM(期间、转换) iRSI–相对强弱指标 语法:iRSI(期间、转换) 期间–计算期间数; iSAR-抛物线 语法:iSAR(步骤,最大值,转换) 参数: 步骤-增量,通常是0.02; 最大值–最大值,通常是0.02; iSTO-'随机振荡'指标 语法:iSTO(%K期间、%D期间、慢、方法、模式、转换) %Kperiod-%K线期间; %Dperiod-%D线期间; slowing–慢值; method–计算方法,取下列值:MODE_SMA(简单平均)、MODE_EMA(指数值)、MODE_WMA(权重值); mode–数据源,可以取下列值:MODE_MAIN(主指标线),MODE_SIGNAL(信号指标线); iWPR-威廉氏百分数范围指标 语法:iWPR(期间、转换) IsDemo–如果智能交易系统系统在试用帐户运行,返回逻辑值,否则会返回错误值. IsIndirect–如果使用反向方式对特定工具进行计算,会返回正确的逻辑值,否则会返回错误值。 Log(-特定正数值的对数 语法:日志(n个表达式) 参数:正数值 Lowest-特定期间返回开仓,低,高,收盘或交易量最小值(依据'类型'参数而定)...returns 语法:最低点(类型、beginbar、期间) type–可以取下列值:MODE_OPEN,MODE_LOW,MODE_HIGH,MODE_CLOSE,MODE_VOLUME beginbar–表示条形的转换,与当前条形有关,并从中取值。 Minute–返回当前小时的分钟序列数。 Mod-返回代表着一个接着一个的数值的整数 语法:Mod(n个表达式1,n个表达式2) 参数:数值1、数值2 ModifyOrder–前期开仓部位或延迟订单修改的特征 语法:ModifyOrder(订单、价格、止损、获利、色彩) order–开仓或延迟部位的数目或订单; price–新的价格(仅适用于延迟部位!); stoploss–新的止损水平线; takeprofit–新的获利水平线; color–图表上象形图的色彩 Month–返回当前月的续列号 MoveObject–移动或建立命名对象 name–文本串形式的名称; type–对象类型,可以取下列值:OBJ_HLINE(水平线)、OBJ_VLINE(垂直线),OBJ_TRENDLINE(趋势线)、OBJ_SYMBOL(设定象形图)、OBJ_TEXT(文本串); price-参照图表第一价格; NumberToStr–返回特定数值转换成特定准确格式的文本串。通过在十进位点数之后的其他4个数产生的数值的函数。 语法:NumberToStr(数字、准确性) number–特定数值; precision–准确格式、十进位点数的数字 OrderValue–返回订单特定价值的之一 语法:OrderValue(部位、模式) position–交易终端列表的订单头寸部位,从1开始; Ord–和OrderValue完全相同。 Period–返回界定的已用期间分钟数 Pow–返回由nBaseExpression数值提高到nExponentExpression倍数而产生的数值,参见参数。 语法:Pow(nBaseExpression,nExponentExpression) 参数:数值1、数值2。 Print–打印由用户在系统日志里界定的数据。 语法:Print(...) 参数的任何非零数均可能。 PrintTrade–存储日志中特殊部位的细节 语法:PrintTrade(部位) 参数:部位–在交易终端里已开仓部位数字 Rand–返回一个产生的伪随机数字。在使用此函数之前,伪随机数字发生器应用Srand函数调整到初始状态。如果伪随机数字发生器不用,就在启动程序时一次调整到初始状态。 Round–返回代表最接近整数的特定数值 语法:Round(n个表达式) 参数:一个数值 ServerAddress–以文本串的形式返回服务器IP地址 SetArrow–设定图表绘图标志 symbol-从Wingdings字体设定标志的数值; color-图表颜色 SetObjectText-指定文本串到特定的对象 语法:SetObjectText(称,文本,字体,尺寸,颜色) name–对象名称; text–特定文本; font–字体命; size–字体大小; color–文本色彩. SetOrder–用于开仓或设定延迟订单的主函数。 语法:SetOrder(操作、单位、价格、滑动、止损、获利、色彩) operation–操作类型,可以取下列值:OP_BUY(开始购买部位),OP_SELL(开始出售部位),OP_BUYLIMIT,OP_SELLLIMIT,OP_BUYSTOP,OP_SELLSTOP(提交延迟订单); lots–单位数; price–交易优先收盘价; slippage-OP_BUY和OP_SELL操作的最大价格滑动; stoploss–止损水平线; takeprofit–获利水平线; color–当提取函数时,图表上箭头的色彩 SetText–把图表种的文本创放到特定的位置 string–文本串; color–文本色彩 Sin-计算并返回代表弧度角度的数值 语法:Sin(n个表达式) Sqrt-计算和返回特定正数值的平方根 语法:Sqrt(n个表达式) 参数:正数值 Symbol–返回智能交易系统运行的金融工具名称的文本串。 Tan-计算并返回代表角度弧度的正切数值。 语法:Tan(n个表达式) TimeToStr–返回带有'yyyy.mm.ddhh:mi'类型的文本串,由代表经过1970元月1日起的秒钟数的特定数值。 Year–返回当年数。 时空穿梭者①号 价格:单账户1万元/年,续费5000元/年(觉得贵的非诚勿扰) 合作模式:合作模式无须购买EA,具体不限券商,开户我们名下入金后,交由我们管理即可,具体私聊 时空穿梭者②号 本EA策略:24小时运行,一个货币1次仅下1单,1单结束后才会做另外1单。此订单每单都带有止盈止损,胜率在75%-90%之间,盈利能力强,完全无须人工干预。