Add Support For ZigZag Swing Prediction to TestRegression Expert ...
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user