mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-08-26 02:38:05 +00:00
refactor: Upgraded with strict internal chronological sorting safeguards
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Stochastic_Adaptive_on_DMI_Calculator.mqh |
|
//| Stochastic_Adaptive_on_DMI_Calculator.mqh |
|
||||||
//| Engine: Adaptive Stochastic applied to DMI Oscillator. |
|
//| Copyright 2026, xxxxxxxx|
|
||||||
//| VERSION 2.10: ER Calculated on DMI (Pure Logic). |
|
|
||||||
//| Copyright 2026, xxxxxxxx |
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
#property copyright "Copyright 2026, xxxxxxxx"
|
#property copyright "Copyright 2026, xxxxxxxx"
|
||||||
#property version "2.10" // Validated: Pure DMI-based Adaptivity with Kaufman Inversion
|
#property version "2.20" // Upgraded with strict internal chronological sorting safeguards
|
||||||
|
|
||||||
|
#ifndef STOCHASTIC_ADAPTIVE_ON_DMI_CALCULATOR_MQH
|
||||||
|
#define STOCHASTIC_ADAPTIVE_ON_DMI_CALCULATOR_MQH
|
||||||
|
|
||||||
#include <MyIncludes\DMI_Engine.mqh>
|
#include <MyIncludes\DMI_Engine.mqh>
|
||||||
#include <MyIncludes\MovingAverage_Engine.mqh>
|
#include <MyIncludes\MovingAverage_Engine.mqh>
|
||||||
@@ -52,7 +53,7 @@ public:
|
|||||||
CStochAdaptiveOnDMICalculator();
|
CStochAdaptiveOnDMICalculator();
|
||||||
virtual ~CStochAdaptiveOnDMICalculator();
|
virtual ~CStochAdaptiveOnDMICalculator();
|
||||||
|
|
||||||
bool Init(int dmi_p, ENUM_DMI_OSC_TYPE osc_type, int er_p, int min_p, int max_p, int slow_p, ENUM_MA_TYPE slow_ma, int d_p, ENUM_MA_TYPE d_ma);
|
bool Init(double gamma, int dmi_p, ENUM_DMI_OSC_TYPE osc_type, int er_p, int min_p, int max_p, int slow_p, ENUM_MA_TYPE slow_ma, int d_p, ENUM_MA_TYPE d_ma);
|
||||||
|
|
||||||
// CRITICAL: Calculates state incrementally based on prev_calculated
|
// CRITICAL: Calculates state incrementally based on prev_calculated
|
||||||
void Calculate(int rates_total, int prev_calculated,
|
void Calculate(int rates_total, int prev_calculated,
|
||||||
@@ -71,7 +72,7 @@ CStochAdaptiveOnDMICalculator::CStochAdaptiveOnDMICalculator() : m_dmi_engine(NU
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
CStochAdaptiveOnDMICalculator::~CStochAdaptiveOnDMICalculator()
|
CStochAdaptiveOnDMICalculator::~CStochAdaptiveOnDMICalculator()
|
||||||
{
|
{
|
||||||
if(CheckPointer(m_dmi_engine) == POINTER_DYNAMIC)
|
if(CheckPointer(m_dmi_engine) != POINTER_INVALID)
|
||||||
delete m_dmi_engine;
|
delete m_dmi_engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +87,7 @@ void CStochAdaptiveOnDMICalculator::CreateDMIEngine()
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Initialization phase |
|
//| Initialization phase |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
bool CStochAdaptiveOnDMICalculator::Init(int dmi_p, ENUM_DMI_OSC_TYPE osc_type, int er_p, int min_p, int max_p, int slow_p, ENUM_MA_TYPE slow_ma, int d_p, ENUM_MA_TYPE d_ma)
|
bool CStochAdaptiveOnDMICalculator::Init(double gamma, int dmi_p, ENUM_DMI_OSC_TYPE osc_type, int er_p, int min_p, int max_p, int slow_p, ENUM_MA_TYPE slow_ma, int d_p, ENUM_MA_TYPE d_ma)
|
||||||
{
|
{
|
||||||
m_dmi_p = dmi_p;
|
m_dmi_p = dmi_p;
|
||||||
m_osc_type = osc_type;
|
m_osc_type = osc_type;
|
||||||
@@ -96,7 +97,7 @@ bool CStochAdaptiveOnDMICalculator::Init(int dmi_p, ENUM_DMI_OSC_TYPE osc_type,
|
|||||||
|
|
||||||
CreateDMIEngine();
|
CreateDMIEngine();
|
||||||
|
|
||||||
if(!m_dmi_engine.Init(m_dmi_p))
|
if(CheckPointer(m_dmi_engine) == POINTER_INVALID || !m_dmi_engine.Init(m_dmi_p))
|
||||||
return false;
|
return false;
|
||||||
if(!m_slowing_engine.Init(slow_p, slow_ma))
|
if(!m_slowing_engine.Init(slow_p, slow_ma))
|
||||||
return false;
|
return false;
|
||||||
@@ -117,10 +118,13 @@ void CStochAdaptiveOnDMICalculator::Calculate(int rates_total, int prev_calculat
|
|||||||
if(rates_total < m_dmi_p + m_er_p + m_max_stoch_p)
|
if(rates_total < m_dmi_p + m_er_p + m_max_stoch_p)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if(CheckPointer(m_dmi_engine) == POINTER_INVALID)
|
||||||
|
return;
|
||||||
|
|
||||||
// O(1) Pointer
|
// O(1) Pointer
|
||||||
int start_index = (prev_calculated > 0) ? prev_calculated - 1 : 0;
|
int start_index = (prev_calculated > 0) ? prev_calculated - 1 : 0;
|
||||||
|
|
||||||
// 1. Dynamic Buffer Resizing
|
// 1. Dynamic Buffer Resizing and chronological sorting safety kényszerítés
|
||||||
if(ArraySize(m_pDI) != rates_total)
|
if(ArraySize(m_pDI) != rates_total)
|
||||||
{
|
{
|
||||||
ArrayResize(m_pDI, rates_total);
|
ArrayResize(m_pDI, rates_total);
|
||||||
@@ -129,6 +133,13 @@ void CStochAdaptiveOnDMICalculator::Calculate(int rates_total, int prev_calculat
|
|||||||
ArrayResize(m_er_buffer, rates_total);
|
ArrayResize(m_er_buffer, rates_total);
|
||||||
ArrayResize(m_nsp_buffer, rates_total);
|
ArrayResize(m_nsp_buffer, rates_total);
|
||||||
ArrayResize(m_raw_k, rates_total);
|
ArrayResize(m_raw_k, rates_total);
|
||||||
|
|
||||||
|
ArraySetAsSeries(m_pDI, false);
|
||||||
|
ArraySetAsSeries(m_nDI, false);
|
||||||
|
ArraySetAsSeries(m_dmi_osc, false);
|
||||||
|
ArraySetAsSeries(m_er_buffer, false);
|
||||||
|
ArraySetAsSeries(m_nsp_buffer, false);
|
||||||
|
ArraySetAsSeries(m_raw_k, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Base DMI Calculation via encapsulated Engine
|
// 2. Base DMI Calculation via encapsulated Engine
|
||||||
@@ -215,3 +226,4 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
#endif // STOCHASTIC_ADAPTIVE_ON_DMI_CALCULATOR_MQH
|
||||||
Reference in New Issue
Block a user