大家好,今天我们来聊聊一个非常实用的指标——Fractal_WeightOscillator。这款指标是四个不同指标加权平滑求和的结果,具体包括:Fractal_RSI、Fractal_MFI、Fractal_WPR 和 Fractal_DeMarker。
要使用Fractal_WeightOscillator指标,你需要先编译以下指标文件:Fractal_RSI.mq5、Fractal_MFI.mq5、Fractal_WPR.mq5 和 Fractal_DeMarker.mq5。请将这些文件放入 <terminal_data_folder>\MQL5\Indicators 文件夹中。
编译完成后,Fractal_WeightOscillator.ex5指标文件将会包含这些指标作为资源,因此在使用时,终端文件夹中并不需要保留这些指标文件!为此,相关代码已添加到指标代码中,以便将这些指标包含在可执行文件中。
可执行指标文件已作为资源添加在全局范围内:
//---- 将指标作为资源包含在EA代码中
#resource "\Indicators\Fractal_RSI.ex5"
#resource "\Indicators\Fractal_MFI.ex5"
#resource "\Indicators\Fractal_WPR.ex5"
#resource "\Indicators\Fractal_DeMarker.ex5"
#resource "\Indicators\Fractal_RSI.ex5"
#resource "\Indicators\Fractal_MFI.ex5"
#resource "\Indicators\Fractal_WPR.ex5"
#resource "\Indicators\Fractal_DeMarker.ex5"
接下来,我们要在OnInit()函数中修改用于作为资源的指标路径:
//---- 获取Fractal_RSI指标的句柄
RSI_Handle=iCustom(NULL,0,"::Indicators\Fractal_RSI",e_period,normal_speed,RSIPrice);
if(RSI_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_RSI指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_MFI指标的句柄
MFI_Handle=iCustom(NULL,0,"::Indicators\Fractal_MFI",e_period,normal_speed,MFIPrice,MFIVolumeType);
if(MFI_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_MFI指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_WPR指标的句柄
WPR_Handle=iCustom(NULL,0,"::Indicators\Fractal_WPR",e_period,normal_speed);
if(WPR_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_WPR指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_DeMarker指标的句柄
DeMarker_Handle=iCustom(NULL,0,"::Indicators\Fractal_DeMarker",e_period,normal_speed);
if(DeMarker_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_DeMarker指标句柄失败");
return(INIT_FAILED);
}
RSI_Handle=iCustom(NULL,0,"::Indicators\Fractal_RSI",e_period,normal_speed,RSIPrice);
if(RSI_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_RSI指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_MFI指标的句柄
MFI_Handle=iCustom(NULL,0,"::Indicators\Fractal_MFI",e_period,normal_speed,MFIPrice,MFIVolumeType);
if(MFI_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_MFI指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_WPR指标的句柄
WPR_Handle=iCustom(NULL,0,"::Indicators\Fractal_WPR",e_period,normal_speed);
if(WPR_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_WPR指标句柄失败");
return(INIT_FAILED);
}
//---- 获取Fractal_DeMarker指标的句柄
DeMarker_Handle=iCustom(NULL,0,"::Indicators\Fractal_DeMarker",e_period,normal_speed);
if(DeMarker_Handle==INVALID_HANDLE)
{
Print(" 获取Fractal_DeMarker指标句柄失败");
return(INIT_FAILED);
}
通过以上步骤,Fractal_WeightOscillator指标的可执行文件可以在其他交易终端中独立使用,无需依赖原始的指标文件。
该指标还使用了SmoothAlgorithms.mqh库中的类,请将其复制到 <terminal_data_folder>\MQL5\Include 中。关于这些类的详细使用方法,可以参考这篇文章:“在不使用额外缓冲区的情况下对价格序列进行平均计算”。
文件编译顺序如下:
- Fractal_RSI.mq5、Fractal_MFI.mq5、Fractal_WPR.mq5 和 Fractal_DeMarker.mq5
- Fractal_WeightOscillator.mq5

图1. Fractal_WeightOscillator 指标