Bootstrap

mql5的include库文件中自定义enum类型在指标文件中的调用方式

在mql5中编写指标,调用的include文件中某个类中使用了自定义ENUM枚举类型,如图所示:
在这里插入图片描述
enum Smooth_Method
{
MODE_SMA_, //SMA
MODE_EMA_, //EMA
MODE_SMMA_, //SMMA
MODE_LWMA_, //LWMA
MODE_JJMA, //JJMA
MODE_JurX, //JurX
MODE_ParMA, //ParMA
MODE_T3, //T3
MODE_VIDYA, //VIDYA
MODE_AMA //AMA
};
在图中CXMA类中的GetStartBars函数的第一个参数method需要使用smooth_method枚举类型定义的变量,那么在编写CXMA类中的GetStartBars函数时候,应该将该枚举变量参数,即method参数,先定义为int类型,而不用smooth_method定义,即写成如下形式:
class CXMA
{
public:
int GetStartBars(int Method,int Length,int Phase);
string GetString_MA_Method(int Method);
void XMAPhaseCheck(string PhaseName,int ExternPhase,int Method);
void XMALengthCheck(string LengthName,int ExternLength);
void XMAInit(int Method);
CXMA(){m_init=false;};
~CXMA();
}
而不是如下形式:
int GetStartBars(smooth_method Method,int Length,int Phase);
如果采用第二种写法,在指标文件中传入参数时候将可能出现“can not convert enum”错误,而修改为第一种就可以解决此问题。
然后在指标文件中调用该函数时候,才使用smooth_method类型定义传入GetStartBars函数的参数,如图所示:
在这里插入图片描述
input Smooth_Method HMA_Method=MODE_JJMA;
min_rates_total=XMAO.GetStartBars(HMA_Method ,HLength,HPhase)+1;
当然可以用print(HMA_Method)打印该变量的值,发现它显示的不是HMA_Method枚举类型中的MODE_JJMA,而是MODE_JJMA在Smooth_Method类型中的序号,因此该序号是一个整数,所以用int先定义类中的函数参数也是可以的,不过最后调用函数时候,应该用Smooth_Method枚举类型定义传入的参数变量。

;