mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-08-26 02:38:05 +00:00
refactor: Optimized for incremental calculation
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| MovingAverage_Ribbon_Calculator.mqh|
|
//| MovingAverage_Ribbon_Calculator.mqh|
|
||||||
//| VERSION 2.01: Corrected method definition placement. |
|
//| VERSION 2.10: Optimized for incremental calculation. |
|
||||||
//| Copyright 2025, xxxxxxxx |
|
//| Copyright 2025, xxxxxxxx |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
#property copyright "Copyright 2025, xxxxxxxx"
|
#property copyright "Copyright 2025, xxxxxxxx"
|
||||||
@@ -21,7 +21,8 @@ public:
|
|||||||
bool Init(int p1, ENUM_MA_TYPE t1, int p2, ENUM_MA_TYPE t2,
|
bool Init(int p1, ENUM_MA_TYPE t1, int p2, ENUM_MA_TYPE t2,
|
||||||
int p3, ENUM_MA_TYPE t3, int p4, ENUM_MA_TYPE t4);
|
int p3, ENUM_MA_TYPE t3, int p4, ENUM_MA_TYPE t4);
|
||||||
|
|
||||||
void Calculate(int rates_total, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[],
|
//--- Updated: Accepts prev_calculated
|
||||||
|
void Calculate(int rates_total, int prev_calculated, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[],
|
||||||
double &ma1_buffer[], double &ma2_buffer[], double &ma3_buffer[], double &ma4_buffer[]);
|
double &ma1_buffer[], double &ma2_buffer[], double &ma3_buffer[], double &ma4_buffer[]);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -37,7 +38,7 @@ protected:
|
|||||||
//+==================================================================+
|
//+==================================================================+
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| |
|
//| Constructor |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
CMovingAverageRibbonCalculator::CMovingAverageRibbonCalculator(void)
|
CMovingAverageRibbonCalculator::CMovingAverageRibbonCalculator(void)
|
||||||
{
|
{
|
||||||
@@ -48,7 +49,7 @@ CMovingAverageRibbonCalculator::CMovingAverageRibbonCalculator(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| |
|
//| Destructor |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
CMovingAverageRibbonCalculator::~CMovingAverageRibbonCalculator(void)
|
CMovingAverageRibbonCalculator::~CMovingAverageRibbonCalculator(void)
|
||||||
{
|
{
|
||||||
@@ -63,7 +64,7 @@ CMovingAverageRibbonCalculator::~CMovingAverageRibbonCalculator(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| |
|
//| Factory Method |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
CMovingAverageCalculator *CMovingAverageRibbonCalculator::CreateMAInstance(void)
|
CMovingAverageCalculator *CMovingAverageRibbonCalculator::CreateMAInstance(void)
|
||||||
{
|
{
|
||||||
@@ -71,7 +72,7 @@ CMovingAverageCalculator *CMovingAverageRibbonCalculator::CreateMAInstance(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| |
|
//| Initialization |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
bool CMovingAverageRibbonCalculator::Init(int p1, ENUM_MA_TYPE t1, int p2, ENUM_MA_TYPE t2,
|
bool CMovingAverageRibbonCalculator::Init(int p1, ENUM_MA_TYPE t1, int p2, ENUM_MA_TYPE t2,
|
||||||
int p3, ENUM_MA_TYPE t3, int p4, ENUM_MA_TYPE t4)
|
int p3, ENUM_MA_TYPE t3, int p4, ENUM_MA_TYPE t4)
|
||||||
@@ -91,26 +92,25 @@ bool CMovingAverageRibbonCalculator::Init(int p1, ENUM_MA_TYPE t1, int p2, ENUM_
|
|||||||
}
|
}
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| |
|
//| Main Calculation (Optimized) |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
void CMovingAverageRibbonCalculator::Calculate(int rates_total, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[],
|
void CMovingAverageRibbonCalculator::Calculate(int rates_total, int prev_calculated, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[],
|
||||||
double &ma1_buffer[], double &ma2_buffer[], double &ma3_buffer[], double &ma4_buffer[])
|
double &ma1_buffer[], double &ma2_buffer[], double &ma3_buffer[], double &ma4_buffer[])
|
||||||
{
|
{
|
||||||
if(CheckPointer(m_ma1) == POINTER_INVALID || CheckPointer(m_ma2) == POINTER_INVALID ||
|
if(CheckPointer(m_ma1) == POINTER_INVALID || CheckPointer(m_ma2) == POINTER_INVALID ||
|
||||||
CheckPointer(m_ma3) == POINTER_INVALID || CheckPointer(m_ma4) == POINTER_INVALID)
|
CheckPointer(m_ma3) == POINTER_INVALID || CheckPointer(m_ma4) == POINTER_INVALID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_ma1.Calculate(rates_total, price_type, open, high, low, close, ma1_buffer);
|
//--- Delegate to individual MA calculators, passing prev_calculated
|
||||||
m_ma2.Calculate(rates_total, price_type, open, high, low, close, ma2_buffer);
|
m_ma1.Calculate(rates_total, prev_calculated, price_type, open, high, low, close, ma1_buffer);
|
||||||
m_ma3.Calculate(rates_total, price_type, open, high, low, close, ma3_buffer);
|
m_ma2.Calculate(rates_total, prev_calculated, price_type, open, high, low, close, ma2_buffer);
|
||||||
m_ma4.Calculate(rates_total, price_type, open, high, low, close, ma4_buffer);
|
m_ma3.Calculate(rates_total, prev_calculated, price_type, open, high, low, close, ma3_buffer);
|
||||||
|
m_ma4.Calculate(rates_total, prev_calculated, price_type, open, high, low, close, ma4_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//+==================================================================+
|
//+==================================================================+
|
||||||
//| METHOD IMPLEMENTATIONS: CMovingAverageRibbonCalculator_HA |
|
//| METHOD IMPLEMENTATIONS: CMovingAverageRibbonCalculator_HA |
|
||||||
//+==================================================================+
|
//+==================================================================+
|
||||||
|
|
||||||
//--- CORRECTED: This method definition now belongs to the _HA class ---
|
|
||||||
CMovingAverageCalculator *CMovingAverageRibbonCalculator_HA::CreateMAInstance(void)
|
CMovingAverageCalculator *CMovingAverageRibbonCalculator_HA::CreateMAInstance(void)
|
||||||
{
|
{
|
||||||
return new CMovingAverageCalculator_HA();
|
return new CMovingAverageCalculator_HA();
|
||||||
|
|||||||
Reference in New Issue
Block a user