作者: LeMan
二元波动指标根据市场走势的看涨或看跌预期,返回正值或负值。当多个二元波动指标结合在一起时,它们的真实力量会显现出来。
我将七个独立的二元波动合并成一个复合波动:
- 收盘价相对于其移动平均线(高于 - 低于);
- MACD斜率;
- OsM与零线的交叉;
- CCI与零线的交叉;
- 动量交叉水平100;
- RSI交叉水平50;
- DMI+和DMI-相对位置(ADX)。
在创建复合波动时,首先测试各独立二元波动的有效性非常重要。一个好的复合波动,其结果应优于包含的各个独立波动。您可以通过将某个波动的权重(Weight参数)设为零,来从复合波动中排除该波动,从而验证独立波动的有效性。
二元波动的解读相对简单:较高的值表示看涨趋势,而较低的值则表示看跌趋势。复合波动的值依赖于包含的独立波动数量。您可以通过为相应的Weight参数分配值来“加权”二元波动的读数,以反映其预测能力的质量。例如,一个复合波动的某个组成部分可以赋值为5,而另一个可以为0.75。波动的最大总权重在指标区域的左上角以括号形式显示。
您可以通过设置bLength参数大于1来平滑二元波动。
我相信您可以轻松理解该指标的工作原理,并利用它为您的交易系统创建高质量的过滤器。
此指标提供十种平滑类型供您选择:
- SMA - 简单移动平均;
- EMA - 指数移动平均;
- SMMA - 平滑移动平均;
- LWMA - 线性加权移动平均;
- JJMA - JMA自适应平均;
- JurX - 超线性平滑;
- ParMA - 抛物线平滑;
- T3 - Tillson的多重指数平滑;
- VIDYA - 使用Tushar Chande算法进行平滑;
- AMA - 使用Perry Kaufman算法进行平滑。
需要注意的是,不同平滑算法的Phase类型参数含义各不相同。对于JMA,Phase是一个外部变量,范围从-100到+100。对于T3,它是平滑比率乘以100以便更好地可视化;对于VIDYA,它是CMO振荡器周期;而对于AMA,它是慢EMA周期。在其他算法中,这些参数不会影响平滑效果。对于AMA,快速EMA周期是固定值,默认等于2,指数提升的比率也等于2。
该指标使用SmoothAlgorithms.mqh库类(必须复制到terminal_data_folder\MQL5\Include)。类的使用已在文章“不使用额外缓冲区进行中间计算的价格系列平均化”中详细描述。
该指标首次在MQL4中实现,并于2009年8月21日发布在CodeBase。

指标输入参数:
//+-----------------------------------+ //| 指标输入参数 | //+-----------------------------------+ //--- 指标权重。如果值为零,则指标不参与波动计算 input double WeightMA = 1.0; input double WeightMACD = 1.0; input double WeightOsMA = 1.0; input double WeightCCI = 1.0; input double WeightMOM = 1.0; input double WeightRSI = 1.0; input double WeightADX = 1.0; //---- 移动平均参数 input int MAPeriod=13; input ENUM_MA_METHOD MAType=MODE_EMA; input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; //---- MACD参数 input int FastMACD = 12; input int SlowMACD = 26; input int SignalMACD = 9; input ENUM_APPLIED_PRICE PriceMACD=PRICE_CLOSE; //---- OsMA参数 input int FastPeriod = 12; input int SlowPeriod = 26; input int SignalPeriod = 9; input ENUM_APPLIED_PRICE OsMAPrice=PRICE_CLOSE; //---- CCI参数 input int CCIPeriod=14; input ENUM_APPLIED_PRICE CCIPrice=PRICE_MEDIAN; //---- 动量参数 input int MOMPeriod=14; input ENUM_APPLIED_PRICE MOMPrice=PRICE_CLOSE; //---- RSI参数 input int RSIPeriod=14; input ENUM_APPLIED_PRICE RSIPrice=PRICE_CLOSE; //---- ADX参数 input int ADXPeriod=14; //---- 包括波动平滑 input int MovWavePer = 1; input int MovWaveType = 0; input Smooth_Method bMA_Method=MODE_JJMA;// 平滑方法 input int bLength=5; // 平滑深度 input int bPhase=100; // 平滑参数