我们都知道在EA开发中可以设置一些参数,比如可以输入手数,风险比例等参数,让EA程序根据这些输入的参数来运行交易系统。一般情况下都是这样的:


显示这个界面的代码如下:
input double lots = 0.01;//手数
input int ma = 60;//均线周期
input bool issound = true;//是否播放提示音
input string comm = "";//订单注释
input int magic = 666;//magic
其中input关键字是新版MT4新加的,用来代替原来的extern,因为使用extern关键字的情况下,这个输入参数可以被程序修改,导致用户输入的参数值被改变了。新版的MT4中使用input作为输入参数的话,这个变量是只读的,不能被程序修改。除此之外input这一行最后的注释可以充当界面里参数的文本,这样要比旧版MT4的参数界面更加人性化。但是最大的改变其实不是input本身,而是EA的参数可以使用枚举类型来让用户的输入更加方便,下面小编就用一个例子来说明枚举参数的用法。
假如我们的交易系统除了自动进行下单方向的判断外还可以让用户手动来设置方向,参数如下
input int dir = 0;//0自动判断方向,1做多,2做空
显示的效果如下:


这样的系统如果交付给客户,客户对于方向的控制需要自己手动去填写,这样客户比较麻烦,而且容易出现输入错误的情况。那么我们可不可以把它做成只能让用户选择的选项方式呢?答案是肯定的,下面我们来声明一个枚举类型,代码如下:
enum DIR
{
自动判断方向,
做多,
做空
};
所谓枚举类型,就是在程序中我们想从中选择一个使用的一种类型,里面多个选项只能选择一个。使用枚举类型后,就避免了输入错误的问题。我们把那个参数的代码改成如下的形式:
input DIR dir = 自动判断方向;//方向
相当于把变量的类型改成了我们刚刚定义的枚举类型,重新运行下EA程序,看到的效果如下:


输入参数变成了下来选择的形式了!
这样用户选择其中一个选项就可以了,方便使用而且还不出错。
那么在程序中如何判断用户输入了哪个值呢?请看下面的程序:
if(dir == 自动判断方向)
{
//自动判断情况下的处理
}
else if(dir == 做多)
{
//做多的处理
}
else
{
//做空的处理
}
其实就是直接判断枚举类型中定义的几个值即可。枚举类型除了这么定义外,还可以设置它的值,我们修改下之前的代码:
enum DIR
{
自动判断方向 = 0,
做多 = 1,
做空 = 2
};
我们可以给枚举类型中每个选项赋值,这样我们的程序判断可以改成这样:
if(dir == 0)
{
//自动判断情况下的处理
}
else if(dir == 1)
{
//做多的处理
}
else
{
//做空的处理
}
也就是说这里的自动判断方向等同于0,做多等同于1,做空等同于2,赋予了数字的值后,我们就可以用整型数值来修改和判断这个dir变量的值了(当然,这里是改不了的,因为它前面有input关键字做修饰)
通过小编给大家介绍的这个小技巧,大家有没有对MT4的开发有了新的认识呢?小编也给大家留个作业,在我们的例子中有个bool类型的参数,能否也能改成这种选项的方式呢?毕竟bool类型在参数选择里是英文的true(是)和false(否),不太符合中文用户的习惯,如果能改成中文的文字就更加直观了。小编相信大家看了本篇文章后对于这个修改应该是手到擒来。