diff --git a/Stg_Oscillator_Range.mqh b/Stg_Oscillator_Range.mqh index 402175c..ef63181 100644 --- a/Stg_Oscillator_Range.mqh +++ b/Stg_Oscillator_Range.mqh @@ -225,7 +225,7 @@ class Stg_Oscillator_Range : public Strategy { /** * Validate soscillator_shifts's entry. */ - bool IsValidEntry(IndicatorBase *_indi, int _shift = 0) { + bool IsValidEntry(IndicatorData *_indi, int _shift = 0) { bool _result = true; switch (Oscillator_Range_Type) { /* @@ -354,33 +354,29 @@ class Stg_Oscillator_Range : public Strategy { case STG_OSCILLATOR_RANGE_TYPE_AC: // AC { IndiACParams _indi_params(::Oscillator_Range_Indi_AC_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_AC_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_AC(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_AC(_indi_params, ::Oscillator_Range_Indi_AC_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_AD: // AD { IndiADParams _indi_params(::Oscillator_Range_Indi_AD_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_AD_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_AD(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_AD(_indi_params, ::Oscillator_Range_Indi_AD_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_AO: // AO { IndiAOParams _indi_params(::Oscillator_Range_Indi_Awesome_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_Awesome_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_AO(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_AO(_indi_params, ::Oscillator_Range_Indi_Awesome_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_ATR: // ATR { IndiATRParams _indi_params(::Oscillator_Range_Indi_ATR_Period, ::Oscillator_Range_Indi_ATR_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_ATR_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_ATR(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_ATR(_indi_params, ::Oscillator_Range_Indi_ATR_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_BEARS: // Bears @@ -388,9 +384,8 @@ class Stg_Oscillator_Range : public Strategy { IndiBearsPowerParams _indi_params(::Oscillator_Range_Indi_BearsPower_Period, ::Oscillator_Range_Indi_BearsPower_Applied_Price, ::Oscillator_Range_Indi_BearsPower_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_BearsPower_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_BearsPower(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_BearsPower(_indi_params, ::Oscillator_Range_Indi_BearsPower_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_BULLS: // Bulls @@ -398,17 +393,15 @@ class Stg_Oscillator_Range : public Strategy { IndiBullsPowerParams _indi_params(::Oscillator_Range_Indi_BullsPower_Period, ::Oscillator_Range_Indi_BullsPower_Applied_Price, ::Oscillator_Range_Indi_BullsPower_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_BullsPower_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_BullsPower(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_BullsPower(_indi_params, ::Oscillator_Range_Indi_BullsPower_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_BWMFI: // BWMFI { IndiBWIndiMFIParams _indi_params(::Oscillator_Range_Indi_BWMFI_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_BWMFI_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_BWMFI(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_BWMFI(_indi_params, ::Oscillator_Range_Indi_BWMFI_SourceType), ::Oscillator_Range_Type); break; } */ @@ -416,9 +409,8 @@ class Stg_Oscillator_Range : public Strategy { { IndiCCIParams _indi_params(::Oscillator_Range_Indi_CCI_Period, ::Oscillator_Range_Indi_CCI_Applied_Price, ::Oscillator_Range_Indi_CCI_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_CCI_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_CCI(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_CCI(_indi_params, ::Oscillator_Range_Indi_CCI_SourceType), ::Oscillator_Range_Type); break; } /* @@ -427,36 +419,32 @@ class Stg_Oscillator_Range : public Strategy { IndiCHOParams _indi_params(::Oscillator_Range_Indi_CHO_InpFastMA, ::Oscillator_Range_Indi_CHO_InpSlowMA, ::Oscillator_Range_Indi_CHO_InpSmoothMethod, ::Oscillator_Range_Indi_CHO_InpVolumeType, ::Oscillator_Range_Indi_CHO_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_CHO_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_CHO(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_CHO(_indi_params, ::Oscillator_Range_Indi_CHO_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_CHV: // Chaikin Volatility (CHV) { IndiCHVParams _indi_params(::Oscillator_Range_Indi_CHV_Smooth_Period, ::Oscillator_Range_Indi_CHV_Period, ::Oscillator_Range_Indi_CHV_Smooth_Method, ::Oscillator_Range_Indi_CHV_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_CHV_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_CHV(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_CHV(_indi_params, ::Oscillator_Range_Indi_CHV_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_DEMARKER: // DeMarker { IndiDeMarkerParams _indi_params(::Oscillator_Range_Indi_DeMarker_Period, ::Oscillator_Range_Indi_DeMarker_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_DeMarker_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_DeMarker(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_DeMarker(_indi_params, ::Oscillator_Range_Indi_DeMarker_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_MFI: // MFI { IndiMFIParams _indi_params(::Oscillator_Range_Indi_MFI_MA_Period, ::Oscillator_Range_Indi_MFI_Applied_Volume, ::Oscillator_Range_Indi_MFI_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_MFI_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_MFI(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_MFI(_indi_params, ::Oscillator_Range_Indi_MFI_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_MOM: // MOM @@ -464,26 +452,23 @@ class Stg_Oscillator_Range : public Strategy { IndiMomentumParams _indi_params(::Oscillator_Range_Indi_Momentum_Period, ::Oscillator_Range_Indi_Momentum_Applied_Price, ::Oscillator_Range_Indi_Momentum_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_Momentum_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_Momentum(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_Momentum(_indi_params, ::Oscillator_Range_Indi_Momentum_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_OBV: // OBV { IndiOBVParams _indi_params(::Oscillator_Range_Indi_OBV_Applied_Price, ::Oscillator_Range_Indi_OBV_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_OBV_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_OBV(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_OBV(_indi_params, ::Oscillator_Range_Indi_OBV_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_PVT: // PVT { IndiPriceVolumeTrendParams _indi_params(::Oscillator_Range_Indi_PVT_InpVolumeType, ::Oscillator_Range_Indi_PVT_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_PVT_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_PriceVolumeTrend(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_PriceVolumeTrend(_indi_params, ::Oscillator_Range_Indi_PVT_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_ROC: // ROC @@ -491,9 +476,8 @@ class Stg_Oscillator_Range : public Strategy { IndiRateOfChangeParams _indi_params(::Oscillator_Range_Indi_ROC_Period, ::Oscillator_Range_Indi_ROC_Applied_Price, ::Oscillator_Range_Indi_ROC_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_ROC_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_RateOfChange(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_RateOfChange(_indi_params, ::Oscillator_Range_Indi_ROC_SourceType), ::Oscillator_Range_Type); break; } */ @@ -501,10 +485,9 @@ class Stg_Oscillator_Range : public Strategy { { IndiRSIParams _indi_params(::Oscillator_Range_Indi_RSI_Period, ::Oscillator_Range_Indi_RSI_Applied_Price, ::Oscillator_Range_Indi_RSI_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_RSI_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_RSI(_indi_params), ::Oscillator_Range_Type); - IndicatorBase *_indi = GetIndicator(::Oscillator_Range_Type); + SetIndicator(new Indi_RSI(_indi_params, ::Oscillator_Range_Indi_RSI_SourceType), ::Oscillator_Range_Type); + IndicatorData *_indi = GetIndicator(::Oscillator_Range_Type); //_indi.mydata = NULL; // @todo break; } @@ -515,9 +498,8 @@ class Stg_Oscillator_Range : public Strategy { ::Oscillator_Range_Indi_StdDev_MA_Method, ::Oscillator_Range_Indi_StdDev_Applied_Price, ::Oscillator_Range_Indi_StdDev_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_StdDev_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_StdDev(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_StdDev(_indi_params, ::Oscillator_Range_Indi_StdDev_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_STOCH: // Stochastic @@ -526,18 +508,16 @@ class Stg_Oscillator_Range : public Strategy { ::Oscillator_Range_Indi_Stochastic_KPeriod, ::Oscillator_Range_Indi_Stochastic_DPeriod, ::Oscillator_Range_Indi_Stochastic_Slowing, ::Oscillator_Range_Indi_Stochastic_MA_Method, ::Oscillator_Range_Indi_Stochastic_Price_Field, ::Oscillator_Range_Indi_Stochastic_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_Stochastic_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_Stochastic(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_Stochastic(_indi_params, ::Oscillator_Range_Indi_Stochastic_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_TRIX: // TRIX { IndiTRIXParams _indi_params(::Oscillator_Range_Indi_TRIX_InpPeriodEMA, ::Oscillator_Range_Indi_TRIX_Applied_Price, ::Oscillator_Range_Indi_TRIX_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_TRIX_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_TRIX(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_TRIX(_indi_params, ::Oscillator_Range_Indi_TRIX_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_UO: // UO @@ -547,35 +527,31 @@ class Stg_Oscillator_Range : public Strategy { ::Oscillator_Range_Indi_UO_InpSlowPeriod, ::Oscillator_Range_Indi_UO_InpFastK, ::Oscillator_Range_Indi_UO_InpMiddleK, ::Oscillator_Range_Indi_UO_InpSlowK, ::Oscillator_Range_Indi_UO_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_UO_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_UltimateOscillator(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_UltimateOscillator(_indi_params, ::Oscillator_Range_Indi_UO_SourceType), ::Oscillator_Range_Type); break; } case STG_OSCILLATOR_RANGE_TYPE_WAD: // Williams' AD { IndiWilliamsADParams _indi_params(::Oscillator_Range_Indi_WAD_Shift); - _indi_params.SetDataSourceType(Oscillator_Range_Indi_WAD_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_WilliamsAD(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_WilliamsAD(_indi_params, ::Oscillator_Range_Indi_WAD_SourceType), ::Oscillator_Range_Type); break; } */ case STG_OSCILLATOR_RANGE_TYPE_WPR: // WPR { IndiWPRParams _indi_params(::Oscillator_Range_Indi_WPR_Period, ::Oscillator_Range_Indi_WPR_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_WPR_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_WPR(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_WPR(_indi_params, ::Oscillator_Range_Indi_WPR_SourceType), ::Oscillator_Range_Type); break; } /* case STG_OSCILLATOR_RANGE_TYPE_VOL: // Volumes { IndiVolumesParams _indi_params(::Oscillator_Range_Indi_VOL_InpVolumeType, ::Oscillator_Range_Indi_VOL_Shift); - _indi_params.SetDataSourceType(::Oscillator_Range_Indi_VOL_SourceType); _indi_params.SetTf(Get(STRAT_PARAM_TF)); - SetIndicator(new Indi_Volumes(_indi_params), ::Oscillator_Range_Type); + SetIndicator(new Indi_Volumes(_indi_params, ::Oscillator_Range_Indi_VOL_SourceType), ::Oscillator_Range_Type); break; } */ @@ -589,7 +565,7 @@ class Stg_Oscillator_Range : public Strategy { * Check strategy's opening signal. */ bool SignalOpen(ENUM_ORDER_TYPE _cmd, int _method, float _level = 0.0f, int _shift = 0) { - IndicatorBase *_indi = GetIndicator(::Oscillator_Range_Type); + IndicatorData *_indi = GetIndicator(::Oscillator_Range_Type); // uint _ishift = _indi.GetShift(); bool _result = Oscillator_Range_Type != STG_OSCILLATOR_RANGE_TYPE_0_NONE && IsValidEntry(_indi, _shift); if (!_result) {