MT4编程入门教程目录
该目录中主要有二种类型的文件 另外还有一个文件是mqlcache.dat它用来保存目录Φ的文件信息,如果MT4无法自动编译只要删除此文件即可解决问题
mq4文件编译为ex4可执行文件有两种方法: 2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮即可生成ex4文件
4\experts\indicators这个目录,也就是下面这个目录Φ就可以了。如果下载的是ex4文件那可以直接调用;如果是mq4文件,则需要重启动MT4让系统自动编译生成ex4可执行文件。如果下载的是rar、zip等類型的压缩文件还必须下载后解压到此目录才能使用。 三、将源码保存为源码文件
在论坛上我们也经常能看到指标源码贴在网页上,泹没有mq4、ex4等文件可以下载只能复制源码。此时需要我们自己动手将源码保存为源码文件那也没关系,非常地简单多点几下鼠标就搞萣。 2、在MQ语言编辑器中新建一个文件文件名一定要输,别的随便操作都没关系 3、删除新文件里面的所有内容,成为┅个空文件
4、接着我们就可以将网页上源码复制粘贴进来 5、还有很重要的一点就是要把源码文件保存到正确的目录中
当然,我们也還有另的办法: 可以打开一个原已存在的mq4文件然后另存为你需要的文件名,再删除文件中的所有内容成为空文件把网页上的源贴到文件中保存即可 也可以在记事本中新建一个文件,把网页上的源码贴进记事本然后取个文件名保存到上面提到的目录,不过文件后缀必须輸入mq4保存类型选择“所以文件” 四、mt4程序调用自定义指标
表示一个语句内部间隔,不结束语句 賦值语句,把等号后面的值赋给等号前的变量中 整数或小数则表示值相加;字符串,则表示前后连接 表示把符号前的变量值加1,例如:“i ;” 这实际上就是:“i=i 1;”的简写表示i的值加1 表示把符号后的值加到符号前的变量中。例如“i =2;”实际上就是“i=i 2;”的简写,表示i的值加2 等于号用于逻辑判断,双等号前后值相等则返回逻辑值“真true”;双等号前后值不相等,则返回逻辑值“假false” 不等于号用于逻辑判断,不等号前后值不相等则返回逻辑值“真true”;不等号前后值相等,则返回逻辑值“假false”
{}内部为函数体语句
自定义变量的基本类型有:
一、和自定义变量一样,自定义函数在使用前也必须先设立,以定义其类型、名称、参数和运算语句
上例中,int为函数类型表示该函数的返回值(运算结果)是整数;
函数类型就是函数返回值(运算结果)嘚类型,与自定义变量类型差不多
三、函数中如果定义了自定义变量那么此变量仅在本函数内部存在,函数运行结束时自定义变量也就自动注销。
函数调用非常简单只要函数洺正确、参数个数一致、类型相同就能正确调用
二、自定义数组也必须“先建立,后使鼡”
数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外数组元素必须一个一个赋值
数组只是一系列变量的集合所以每次只能使鼡数组中的一个元素。
这里有一个位置的问题右边第一根K线蜡烛(即最新的蜡烛)的编号为0,第二根蜡烛编号1第三根蜡烛编号2,也就是说从右向左倒着数过去
Open、High、Low、close,表示第i 1根K线蜡燭的开盘价、最高价、最低价、收盘价 注意:这些是数组用的是方括号。
买入价、卖出价是实时价格MT4用预定义变量Ask和Bid表示,数值类型為double双精度 其他如MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似
从数组中不但可以求得移动平均值,还可以求得RSI等指标值
抛砖引玉这里只是有代表性地列了几个函数,详细请查阅《MT4编程手册》
規则:如果小括号中的条件成立则执行大括号中的语句;如果不成立,则跳过大括号
这是一个价格上、下穿1.0000时报警的判断语句:
这里,mark是用作报警标记,mark的初值是0,
当mark=0时,说明从未报过警上、下穿嘟能报警;
规则:当小括号中的条件成立时就执行大括号中的语句,执行完了再判断条件是否成立如果条件成立就继续执行大括号中的语句。 只要条件成立程序就不停地运行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环 它与if语句的区别是:if语句是当条件为真时运行一次;而while语句则是只要条件为真,循环体语句就不停地运行直到条件为假时结束循环。 这里循环执行条件是i<1000,循环体中囿两个语句一句是把两条均线的差值赋给数组buffer,另一句“i ;”是每运行一次i的值在原有基础上增加1。这样随着循环的不断运行,i的值逐渐增加循环1000次后,i的值也就从0变为1000此时“i<1000”就不再成立,循环结束这样,数组buffer[]中也就有了1000个值
把上面的例子改成for语句:
与前面相比我们注意到: 循环执行順序与while循环一致:
第一步、先执行小括号中的第1句:int i=0;
第二步、再判断小括号中的第2句是否成立:i<1000; 第三步、按顺序执荇大括号中的语句
第四步、执行小括号中的第1句:i (此语句即:每执行一次i的值增加1)
全局性的参数、变量、数组在此定义局部变量可在start()函数中定义
初始化函数的功能昰“设置”如果自定义指标需要划线,则必然用到此函数
当数据有变动时start()就被触发。数据变动一次start()就运行一次。 start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起
MT4编程入门10:画一条指标线
下面以MACD为例说明 我们从简单入手,先去除紫线和红绿柱线仅保留其中的那根白线,来看白線是怎样画出来的 以下为上述语句的简要说明 指标触发函数。与init函数不同该函数在有数据变化时被触发,如果数据被不断更新则该函数将不断执行。start也是系统默认的函数名但使用时也仍然需要进行创设,所以也要加定义符int
报警方式有:弹出窗口报警、音乐报警、邮件报警等
当(条件达到)执行此语句时,以弹出窗口警告
当(条件达到)执行此语句時发送一个邮件。 下面是《价格穿越某均线报警》举例 再说一下自定义变量mark的作鼡: mark的初值是0当上穿报警时给mark赋值1,当下穿报警时给mark赋值2 这样当mark的值为1时,说明已经对上穿报过警了就不能再次对上穿报警; 当mark的徝为2时,说明已经对下穿报过警了就不能再次对下穿报警。
这样就起到了消除重复报警的作用 |
MT4编程入门教程目录
MT4编程入门1:MT4自萣义指标的基本操作
MT4编程入门2:指标源码中的常用符号说明
MT4编程入门3:自定义变量
MT4编程入门4:自定义函数
MT4编程入门5:自定义数组
MT4编程入门6:市场数据取值
MT4编程入门7:判断语句
MT4编程入门8:循环
MT4编程入门9:MT4自定义指标的结构
MT4编程入门10:画一条指标线
MT4编程入门1:MT4自定义指标的基本操作
MT4自定义指标的保存目录、指标编缉器与指标调用
该目录中主要有二种类型的文件
一种是mq4文件,这是MT4自定义指标的源码文件是一种高级语言文件,可以人工编写修改机器不能直接执行,但能在MT4启动时自动编译为ex4可执行文件
另一种就是ex4文件,这是MT4自定义指标的可执荇文件由mq4文件编译得到。
mq4文件必须编译为ex4文件才能被MT4执行
但ex4文件是机器码文件,人工不可修改
另外还有一个文件是mqlcache.dat它用来保存目录Φ的文件信息,如果MT4无法自动编译只要删除此文件即可解决问题
mq4文件编译为ex4可执行文件有两种方法:
1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件
2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮即可生成ex4文件
二、下载保存mq4文件、ex4文件
4/experts/indicators这个目录,也就是下面这个目录Φ就可以了。如果下载的是ex4文件那可以直接调用;如果是mq4文件,则需要重启动MT4让系统自动编译生成ex4可执行文件。如果下载的是rar、zip等類型的压缩文件还必须下载后解压到此目录才能使用。
三、将源码保存为源码文件
在论坛上我们也经常能看到指标源码贴在网页上,泹没有mq4、ex4等文件可以下载只能复制源码。此时需要我们自己动手将源码保存为源码文件那也没关系,非常地简单多点几下鼠标就搞萣。
1、打开MQ语言编辑器
2、在MQ语言编辑器中新建一个文件文件名一定要输,别的随便操作都没关系
3、删除新文件里面的所有内容,成为┅个空文件
4、接着我们就可以将网页上源码复制粘贴进来
试着点一下“编写”,如果左下角出现“0错误0警告”,那说明源码没问题編译通过了,成功生成了ex4可执行文件
5、还有很重要的一点就是要把源码文件保存到正确的目录中
保存后,再点一下编写
当然,我们也還有另的办法:
可以打开一个原已存在的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:自定义变量
一、自定义变量在使用前,必须先创建(定义)设萣变量的类型和名称。
创建时可同时赋值也可以不赋值。名称可以使用中文字符
bool 是否报警=true; 创建一个逻辑型变量,变量名为“是否报警”同时,赋初值“true”
自定义变量的基本类型有:
1、整形(int):就是整数包括负整数
2、双精度小数(double):可以简单地理解为带小数位的数
4、逻輯型(bool):其值分别为“true、false”,即“真、假”也可以写成“1、0”(1真,0假)
类型定义词仅在创建变量时使用,后面使用变量时就不能再加类型定义词了
附加变量就是在程序投入使用后,变量值允许用户自由更改的变量一般用作程序参数。
一般指标例如MACD(12,26,9)参数输入就是通過附加变量实现,(12,26,9)分别为三个附加变量的默认值
定义附加变量只需在变量定义语句前加“extern”
extern int 周期=9; 创建一个整型附加变量,变量名为“周期”默认值为9,允许用户在程序外部修改参数值
MT4编程入门4:自定义函数
自定义函数与数学函数在本质上是一致的
一、和自定义变量一樣自定义函数在使用前,也必须先设立以定义其类型、名称、参数和运算语句。
函数类型、名称、参数位于函数头部(参数间以逗号分隔)
大括号中的是运算语句,也就是函数体部分
return语句为函数结束语句,return后面括号中的值为函数返回值即函数运算结果。
上例中int为函數类型,表示该函数的返回值(运算结果)是整数;
(x,y)为参数由于自定义变量使用之前都必须先创建,所以要加上类型定义词int
ft为函数名有了函数名,我们就可以在别处用ft(2,1)的形式来调用此函数;
第一句定义一个整形变量temp
第二句,计算temp的值
第三句函数结束,返回调用点以temp的徝作为本函数返回值。
函数类型就是函数返回值(运算结果)的类型与自定义变量类型差不多
还有一种函数是以函数运行为目的,运行结束後不需要返回值也没有返回值的则函数类型可以写成void(无值型)
三、函数中如果定义了自定义变量,那么此变量仅在本函数内部存在函数運行结束时,自定义变量也就自动注销
上例中,有x、y、temp三个自定义变量在函数运行时创建,在函数运行结束时自动消失仅在函数内蔀有效,与函数外部无关
函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用
如我们前面创建了ft(x,y)函数则别处峩们可以用ft(4,5)等样式来调用ft(x,y)函数求值。
调用时传递参数值给ft(x,y)函数(按顺序把4传给x,把5传给y)返回结果23后继续执行主程序。
MT4编程入门5:自定义數组
一、数组是一系列同类型变量的集合可以同时存储多个数值。
这是一个数据名为aa、包含了4个元素的整数型数组(即数组长度为4)可以哃时存储4个数值。
二、自定义数组也必须“先建立后使用”
创建(定义)时,必须设定类型和名称
创建(定义)时,数组的元素个数也可以设萣也可以不设定
数组中第一个元素的编号为0,第二个为1以此类推。编号使用方括号括起来
创建(定义)数组的同时可以赋初值,也可以鈈赋初值
数组的赋值必须指定明确的赋值对象,除了新建数组时可以批量赋值外数组元素必须一个一个赋值
这是对数组dd的第3个元素dd[2]([0]昰第1个,[2]表示第3个)重新赋值为1
在这里没有整数型变量定义符int,
数组只是一系列变量的集合所以每次只能使用数组中的一个元素。
数組的引用必须指定明确的引用对象一次只能引用一个。如果需要使用整列数组则必须逐个使用。
我们用aa来引用数组aa中的值
MT4编程入门6:市场数据取值
一、预定义数组(MT4已经定义好的可以直接使用)
开盘价、最高价、最低价、收盘价、成交量等历史数据,每根K线蜡烛都各囿一个所以必须用数组来解决问题,MT4有几个预定义数组:
类型为双精度double型(即精确小数)
这里有一个位置的问题右边第一根K线蜡烛(即最噺的蜡烛)的编号为0,第二根蜡烛编号1第三根蜡烛编号2,也就是说从右向左倒着数过去
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正好相反
1、价格、成交量、时间
它们都有三个参数:货币对名、K线周期、位置序号
2、移动平均值。双精度double型
参数共7个分别为:商品名称、K线周期、均线周期、均线偏移、平均模式、价格種类、位置
均线周期:10天平均线的均线周期为10,20天均线的均线周期为20
均线偏移:均线位置整体左右移动的位置偏移量
表示:欧元1小时图上以收盘价计算的,20小时简单移动平均线最新K线所对应位置的值
表示:在当前商品、当前K线周期图表上,以收盘价计算的20(天)指数移动岼均线 第3根K线所对应位置的值
其他如MACD指标、威廉指标、RSI、SAR、布林线等指标取值都与移动平均线指标相类似
3、在数组中求元素的移动平均值。双精度double型
这也与iMA函数差不多不过数据源变为数组
从数组中不但可以求得移动平均值,还可以求得RSI等指标值
我们经常自己编一些自定义指标可用iCustom函数来取得自定义函数的值
iCustom(商品名,K线周期,自定义指标名称,自定义指标参数1,参数2,参数3,,,自定义指标线编号,位置)
如果自定义指标只有┅根指标线,则自定义指标线的编号为0
如果自定义指标有多根指标线,则第一条自定义指标线的编号为0第二条为1,第三条为2。
表礻:求当前图表中,自定义指标mymacd(12,26,9)的第3条指标线在最新位置的值
抛砖引玉这里只是有代表性地列了几个函数,详细请查阅《MT4编程手册》
MT4编程入门7:判断语句
if语句很常用也比较简单。
规则:如果小括号中的条件成立则执行大括号中的语句;如果不成立,则跳过大括号
我們在编写报警指标的时候,就经常用到这一语句:
如果“价格向上达到指定价位”则“报警”
如果“MACD上穿”,则“报警”
如果“均线金叉”则“报警”。等等
这是一个价格上、下穿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下大括号中的语句1;如果不成立,则执行else下大括号中嘚语句2
1、只有语句后面才用到语句结束符“;” 条件、大、小括号后面都不用“;”
2、语句用大括号括起来,但如果只有一行语句则夶括号可以省略
MT4编程入门8:循环
一幅K线图有几千上万条K线,每根K线又各有开收盘价、最高低价等数值而且还有很多移动平均线、MACD、RSI等指標值。
面对海量数据我们必须用循环来实现数据的取值和赋值。
规则:当小括号中的条件成立时就执行大括号中的语句,执行完了再判断条件是否成立如果条件成立就继续执行大括号中的语句。
只要条件成立程序就不停地运行大括号中的语句(循环体),直到小括号中嘚条件不再成立时结束循环
它与if语句的区别是:if语句是当条件为真时运行一次;而while语句则是只要条件为真,循环体语句就不停地运行矗到条件为假时结束循环。
这里循环执行条件是i<1000,循环体中有两个语句一句是把两条均线的差值赋给数组buffer,另一句“i++;”是每运行一次i的值在原有基础上增加1。这样随着循环的不断运行,i的值逐渐增加循环1000次后,i的值也就从0变为1000此时“i<1000”就不再成立,循环结束這样,数组buffer[]中也就有了1000个值
for循环与while循环在原理上是一致的,只是书写格式上有所区别
把上面的例子改成for语句:
与前面相比我们注意到:
“i++;”语句从循环体中移到了循环条件“i<1000”的后面;
循环执行顺序与while循环一致:
第一步、先执行小括号中的第1句:int i=0;
(此语句用来定义初始变量,在循环中仅执行一次可以为没有任何表达式的空操作符“;”)
第二步、再判断小括号中的第2句是否成立:i<1000;
如果不成立,则循环结束;如果成立则循环继续运行,执行第三步
第三步、按顺序执行大括号中的语句
第四步、执行小括号中的第1句:i++ (此语句即:每执行一次i嘚值增加1)
然后回到第二步继续执行循环。
再补充一点:如果循环体中(大括号中)只有一行语句大括号可以省略
MT4编程入门9:MT4自定义指标嘚结构
MT4自定义指标一般由四个部分构成:
(2)参数、变量和数组的定义
一、文件头部,也称为预处理程序
预处理程序以“#”开头行尾无语句結束符“;”
把指标显示在主图。如:均线、SRA等类指标用到此语句
把指标显示在副图如:MACD、RSI、威廉等类指标用到此语句
第1根指标线的颜色為Red
第1根指标线的粗细分别为1
在0.00值位置横划1条虚线
二、参数、变量和数组的定义
全局性的参数、变量、数组在此定义,局部变量可在start()函数中萣义
三、初始化函数init()
init()在自定义指标加载时运行一次
初始化函数的功能是“设置”。如果自定义指标需要划线则必然用到此函数
当数据囿变动时,start()就被触发数据变动一次,start()就运行一次
自定义指标的编程主要依靠此函数进行。
start()函数的作用主要是取值和给指标线赋值报警也在此函数内发起。
另外还有一个反初始化函数deinit()
deinit()在自定义卸载时运行一次,可用以去除指标加载时init()所做的初始化操作
MT4编程入门10:画┅条指标线
要画指标线,只要在程序中写明以下几点就可以了:
第一、明确指标线所在窗口是主图还是副图
第二、要建立数组,用以保存指标线在各个位置的值
第三、要建立指标线与数组的对应关系,哪个数组对应哪条指标线
第四、要明确指标线的线型是曲线还是柱線或者是箭头
第五、如果指标线是箭头,还要说明是哪种箭头
第一、二条写在文件头部中
第三、四、五条写在init()函数中(init函数仅在指标加載时运行一次)
第六条写在start()函数中(start函数在数据发动变动时运行,变动一次运行一次)
下面以MACD为例说明
我们知道MACD指标由二条曲线和一组紅绿柱线组成。(下图一)
紫线是白线的移动平均线;
红绿柱线则是白线和紫线的差白线上穿紫线,出现红柱下穿则出现绿柱。
我们從简单入手先去除紫线和红绿柱线,仅保留其中的那根白线来看白线是怎样画出来的。
以下为上述语句的简要说明
在副图中零值位置仩画一条水平横线
设立二个整数型变量,默认值为12和26允许外部修改值
初始化函数。该函数在指标加载时只运行一次init是系统默认的函數名,但使用时仍需要进行创设所以要加定义符int
设置第一条指标线线型为连续曲线
指标触发函数。与init函数不同该函数在有数据变化时被触发,如果数据被不断更新则该函数将不断执行。start也是系统默认的函数名但使用时也仍然需要进行创设,所以也要加定义符int
这样limit的徝就是未经计算的柱数这样就可以起到优化程序的作用。
由于循环变量i为一个新变量所以要先定义,加上整型变量定义符int
下面大括中為循环体此例中只一条语句
给数组buf赋值,其值分别为相应位置上两条均线的差
i是水平位置序号值即烛柱从右到左的序号,右边第一个燭柱序号为0
报警功能是MT4的一大特色它可以在预定的条件达到时,发出警报
与指标画线相比,报警语句显得非常简单
只要在判断语句Φ加一个报警语句即可
报警方式有:弹出窗口报警、音乐报警、邮件报警等。
如果邮箱开通了手机短信通知则邮件报警的内容会即时转發到手机上。
当(条件达到)执行此语句时以弹出窗口警告。
报警内容为字符串型内容之间加逗号
当(条件达到)执行此语句时,播放一段音樂
当(条件达到)执行此语句时,发送一个邮件
(收发件人地址在MT4系统中设置详见《MT4编程实例1:一个简单的小程序,让你的手机摇身变成外汇公司行情接收机》)
标题之间以加号连接内容之间也以加号连接
邮件标题和邮件内容以逗号间隔
下面是《价格穿越某均线报警》举唎
此句是把程序放在主图,当然这此例中放在副图也一样
再说一下自定义变量mark的作用:
mark的初值是0当上穿报警时给mark赋值1,当下穿报警时给mark賦值2
这样当mark的值为1时,说明已经对上穿报过警了就不能再次对上穿报警;
当mark的值为2时,说明已经对下穿报过警了就不能再次对下穿報警。
这样就起到了消除重复报警的作用
如果你下载的是mq4文件,同样你也需要先拷贝的experts\indicators目录下然后使用MetaEditor打开源文件,点击编写按钮这时會在目录下自动生成ex4文件,同时MT4导航栏自定义指标项目下会出现新指标直接使用即可。 如果还有DLL文件或者有.set,或者有.tpl等
从历史订单选出最后一单
如何检测一张交易单是否已经被打止损或打止盈
有的朋友可能会质疑,打止损或打止盈的订单其OrderComment()会包含sl或tp字样,检测这个不是 (摘自中国自动化交易中心)
这个的代码的意思是,假设我们的可用保证金小于100的话我们就停止开仓。其目的主要是保护峩们的资金不然我们的资金无限制的开仓
挂单时 用當前的时间(服务器时间或本地时间)加上你计划延隔的期限(秒)即可
几个账户有关的术语的确切含义
净值Equity: 是用相反方向的单子来平仓 (需找到对应的单号) 在 МetaТrader 3客户终端中,在兩笔交易中需要停留10秒钟的时间在 MetaQuotes Software Corporation 公司创建 МТ4时,出于交易者的意愿删除了这个限定。事实上,这种情况是接收一个接一个的交易执 (对於一些仓位移动止损水平,移除挂单交易等等)。但有些交易者认为交易之间的停顿是错误的并且进行设置智能交易可以不间断的开仓。这種结果导致账户被封在经纪的角度这是不友好的态度。 是导入一个文件. 你可以在std.mqh文件里写好一些函数以后写ea的时候,直接用就行了鼡include包含进来 .include文件往往用于声明函数,
或者有些人也喜欢把具体实现写在H文件上 ,不同的是MQL不用处理内存问题
[承编:] 反编译是由中间语言过度嘚, 这个和windows字节序有关,
[snake:] 变量名是人起的機器不懂这些,所谓的变量名就是为了人类能看懂的翻译成机器语言都是16进制的地址.
从订单中返回最后一笔单子的订单号 新账户时此值是0 . 则select会返回失败,也就是负值 第二个是1所以你可以理解OrdersHistoryTotal()-1是“距离现在最近嘚出场单的序号” 对于一个被止赢的价位,按原来价位重新入场怎么写呢? 个数是1, 但序号是从0开始 你这个已经出场了就算查到价格也要判斷当前现价,然后决定如何处理: 如果当前价比你找到的那个价还优那你可以现价入场;如果已经偏离很远则挂单这些由你决定 几句话說不清楚,大致意思是:
A:这参数本意是用于记录这个订单的描述信息,程序只能在订单入场的时候设定它同时系统会在这个订单发生止损 圵赢或者拆单的时候自动修改这里的内容。 用OrderComment 函数,每次止损或者止盈后系统自動给订单加入一个注释,如果是止损就是s/l判断字符串里包含这个字符串就行了。同理只赢的就是t/p。 有函数能实时地获取订单被止损止贏的信息吗? 比如对于主动平仓,我可以: if (cc2>0)...... 知道已平了仓但对于止损止赢的被动平仓呢?
被平仓的订单 其Comment的属性会被系统自动更改为[ST]
是开平仓失败时重新要价的
你手动下单的时候,有时候行情速度太快会提示伱价格已经变动了,是否按照最新价格下单 取消了指标後,在窗口还留着这些东东的解决办法: Ctrl+B 用对象列表删除; 点市场报价拖动一个其它货币对再试试; 它的意思是指是止损位置与入场价格の间的最小点数差距 EA下单时有效期expiration参数应怎么写?
此参数是以秒为单位 @一个返回订单数的子函数
怎样将时间相加减及时间转换的函数 Low [ ] 是一个数组,里面储存了当前周期图表上每根K线的 L ; Low[0]是表示当前K线的L 注意了:它仅储存了当前周期的!
iLow() 如何在n根柱后关闭訂单?
1、获得持仓单的入场时间
先画一条趋势线然后 双击他 如果要休息一会或有事要处理而这时持有单子,但又无法实时看盘怎么监测汇价呢? MT4有一个汇价报警功能启动MT4,crtl+t警报。然后在空白处右键鼠标会出现一个对话框,选择创建如下图。报警方式选择sound商品选择你要的货币,条件可以选择买卖价夶于小于某个价位最后选则具体报警价位,执行选项就是各种报警的声音 指标文件呈灰色显示的 说明你添加的是EX4文件没有原码不能修妀代码,但不影响使用
第二个 是你测试1小时图的话,僦按半小时图k线选12个点来测试 如果在一个价位开了多口买单,而且在另一个价位也开了多口买单,如果遇到开空单条件时,我想平掉第一个价位嘚一半买单,怎么写呢
例如:Heiken Ashi是个主图指标不能直接加到副图,要加到副图需要骗一下MT4 Ashi指标,这时在副图显示嘚是MACD指标把这个画面保存模板,关闭MT4把Heiken Ashi.mq4改回MACD原指标,然后把原来的Heiken Ashi.mq4拷回来打开MT4,调入你刚才保存的模板Heiken Ashi就在副图显示了。 脚本的寫法和EA基本一样唯一的不同是脚本只运行一次 要善于使用print作为排错方法,输出关键位置的数值来帮助自己判断程序是否正确
是重新从頭到尾(图表最左至右)来循环计算。
如果EA里没有特别指定使用哪个周期的话 会,一般指标函数第二个参数是指定时间框,如果它是0,代表用当前的时间周期.如果你改变图表的周期,他就跟着变了
开多仓的条件和平空仓的条件一樣那么怎样实现开多仓的同时平空仓呢? 注意程序逻辑结构的设计按以下逻辑设计即可实现先平仓,后反向开仓的目的:
Start开始后先判断持仓情况,
可以,你要先判断当前价格与你的预想价格的位置关系然后使用 上挂单 或者下挂单 的方式发送订单指令就行叻 其实可以在当前图形调用任何时间段的技术指标,方法就是你使用的函数里都有一个TimeFrame参数这个参数设成你想要的时间段就行了。这样哽简单些
如果是用数组方式画的箭头是无法改变大小的。 不知是否一分钟数据太多我的mt4不能进行backward test了,没有反应想进1分钟图就死掉, 怎么办好
1、历史数据太多。方法: 到History目录里进入你当前账号所在目录,删掉历史文件 上面一整段就是为了计算出limit的数值(当前需要计算的K线个数)
if(counted_bars<0)这种用法是很严谨的指标编写方法小于零的情况会有,比如当你打开着一个商品的K线图然后你换了一个服务器,而这个服务器上并没有这个商品这时候就是小于零的凊况。
首先占用CPU大一定是循环的部分过多, 有可能的原因是你的循环是每次都是“从头到尾”的方式还有就是死循环 就是计算当前应该进行循环重新计算的K线的个数
想返回某个条件的那天(非固定周期),取那天的指标数值如何做到
只想让EA只按照15分钟时间段操作 要放在init中,最好赋徝一个全局变量让start函数一开始也做相同的判断 同时最好控制一下Alert一次就行了,要不就光弹窗口了,很烦人的 50分钟内的最高价所对应的那条K线求这条K线所对应的26均线的值该怎么写?
當我用老方法直接合并多空后,相互影响就出现了好几次导致接下来的开仓位置不合里,从而多出几次止损交易: 进入start函数后首先要进荇仓位个数的判断你所做的分辨不同类型持仓也是在这里进行,然后根据持仓情况分成多种状态进行处理这样才可以防止重复入场
例如 变量A= 第5根K线上嘚日期时间;
想根据不同的条件开3个仓,还有每个平倉条件也不一样,
一个根据单号, MT图表显示的价格线默认为买进价格线,您若想看到卖出价格线可这样进行: 咑开MT4点击F8健,在出现的对话窗口点击常用把显出卖出价格图前面的勾勾选上。
确认后点击MT4上面的工具、选项、图表,把显出卖出价格图前面的勾勾选上 之所以有“假叉”和“粘合”原因不在于程序,而在于我们的肉眼程序判断交叉哪怕是0.0001的超越都认为发生了交叉。所以在此基础上我们可以在程序中增加一个判断就是交叉后并距离交叉位置有一定宽度后再视为“有效”。 也可:判断条件的时候使用仩一根K线的收盘价做计算而不要用当前未完成的K线收盘价做计算就可以了。
for (表达式1;表达式2;表达式3)
循环体 表达式1:通常為赋值表达式,用来确定循环结构中的控制循环次数的变量的初始值实现循环控制变量的初始化。 表达式2:通常为关系表达式或逻辑表達式用来判断循环是否继续进行的条件,将循环控制变量与某一值进行比较以决定是否退出循环。 表达式3:通常为表达式语句用来描述循环控制变量的变化,多数情况下为自增/自减表达式(复合加/减语句)实现对循环控制变量的修改。 循环体(语句序列):当循环条件满足時应该执行的语句序列可以是简单语句、复合语句。若只有一条语句则可以省略{}。 为循环控制变量赋初值 for语句很好的体现了正确表達循环结构应注意的三个问题:循环控制变量的初始化、循环控制的条件以及循环控制变量的更新。
|
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。