Add Support For ZigZag Swing Prediction to TestRegression Expert ...

This commit is contained in:
2025-09-22 13:35:43 +03:30
parent 7a4f1aa48b
commit 0a102fb01b
5 changed files with 1064 additions and 210 deletions
+42 -63
View File
@@ -7065,67 +7065,54 @@ bool SetChartVolumesColor(
//
/**
* Linear Regression Based Calculate Data ...
* int this Senario X Axis is Buffer Index ...
* Calculate Slope and Intercept for Linear Regression Predictions ...
*
* @param _slope: double, refrence for Calculated Slope ...
* @param _intercept: double, reference for Calculated Intercept ...
* @param _source: double, Y Axis Valus Collection ...
* @param _start: int, start Index ...
* @param _count: int, number of Calculations ...
* @param _slope: double, refrence to Hold Calculated Slope ...
* @param _intercept: double, reference to Hold Calculated Intercept ...
* @param xData: double, reference Collection to Provides X-Axis Data for Calculations ...
* @param yData: double, reference Collection to Provides Y-Axis Data for Calculations ...
*
* @return ( bool )
* @return ( int )
*/
bool CalculateLinearRegression(
int CalculateSlopeAndIntercept(
double &_slope,
double &_intercept,
double &_source[],
int _start = 0,
int _count = 0 //
double &xData[],
double &yData[] //
)
{
//
bool result = false;
int result = 0;
//
// Prepare ...
_slope = EMPTY_VALUE;
_intercept = EMPTY_VALUE;
bool has = false;
//
// Validate ...
int count = ArraySize(_source);
result = IsValidSize(count);
if (!result)
_slope = 0;
_intercept = 0;
//
if (!HasChild(xData) ||
!HasChild(yData))
{
return result;
}
//
// Normalize ...
_start = NormalizeInt(_start, 0, count - 1);
if (_count == 0 || _count + _start >= count)
{
//
// Get Whole Array ...
_count = count - 1 - _start;
}
int _end = _start + _count;
//
// Define Requirements ...
double sumX = 0;
double sumY = 0;
double sumXY = 0;
double sumX2 = 0;
//
// Looping Through Source Buffer to Cellect Data ...
for (int i = _start; i < _end; i++)
double x = 0;
double y = 0;
int end = MathMin(ArraySize(xData), ArraySize(yData));
for (int i = 0; i < end; i++)
{
//
double x = i + 1;
double y = _source[i];
double x = xData[i];
double y = yData[i];
//
sumX += x;
@@ -7135,54 +7122,46 @@ bool CalculateLinearRegression(
}
//
// Calculate Slope and Intercept ...
int n = _count;
_slope = ((n * sumXY) - (sumX * sumY)) / ((n * sumX2) - (sumX * sumX));
_intercept = ((sumY - _slope) * sumX) / n;
int n = end;
_slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);
_intercept = (sumY - _slope * sumX) / n;
//
result = sumX > 0 &&
sumY > 0 &&
sumXY > 0 &&
sumX2 > 0 &&
NotEmpty(_slope) &&
NotEmpty(_intercept);
if (!result)
{
//
_slope = EMPTY_VALUE;
_intercept = EMPTY_VALUE;
}
result = n;
//
return result;
}
double CalculateValueBySlopeIntercept(
/**
* Predict Value for Specified X ...
*
* @param _sllope: double, Provided Slope ...
* @param _intercept: double, Provided Intercept ...
* @param _forX: double, Specified XValue ...
*
* @return ( double )
*/
double PredictValue(
double _slope,
double _intercept,
int _index //
double _forX //
)
{
//
double result = EMPTY_VALUE;
//
// Normalize Index ...
_index = NormalizeInt(_index, 1);
double result = 0;
//
// Validate ...
if (
if (!NotEmpty(_forX) ||
!NotEmpty(_slope) ||
!NotEmpty(_intercept) ||
!IsValidIndex(_index))
!NotEmpty(_intercept))
{
return result;
}
//
result = (_intercept + _slope * _index);
result = (_intercept + (_slope * _forX));
//
return result;