mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-16 17:48:05 +00:00
[CodeFactor] Apply fixes to commit 9697fac
This commit is contained in:
@@ -59,7 +59,7 @@ public sealed class Ccyc : AbstractBase
|
||||
throw new ArgumentException("Alpha must be between 0 and 1 (exclusive).", nameof(alpha));
|
||||
}
|
||||
|
||||
double halfAlpha = 1.0 - 0.5 * alpha;
|
||||
double halfAlpha = 1.0 - (0.5 * alpha);
|
||||
_chp = halfAlpha * halfAlpha;
|
||||
double oneMinusAlpha = 1.0 - alpha;
|
||||
_cfb1 = 2.0 * oneMinusAlpha;
|
||||
@@ -125,7 +125,7 @@ public sealed class Ccyc : AbstractBase
|
||||
double price0 = price;
|
||||
|
||||
// 4-tap FIR smoother: smooth = (x + 2*x1 + 2*x2 + x3) / 6
|
||||
double smooth = (price0 + 2.0 * price1 + 2.0 * price2 + price3) / 6.0;
|
||||
double smooth = (price0 + (2.0 * price1) + (2.0 * price2) + price3) / 6.0;
|
||||
|
||||
// Shift smooth history
|
||||
double smooth2 = s.Smooth1;
|
||||
@@ -136,13 +136,13 @@ public sealed class Ccyc : AbstractBase
|
||||
if (count < 7)
|
||||
{
|
||||
// Bootstrap: second-difference of raw price
|
||||
cycle = (price0 - 2.0 * price1 + price2) * 0.25;
|
||||
cycle = (price0 - (2.0 * price1) + price2) * 0.25;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Steady-state: 2-pole high-pass IIR on smoothed input
|
||||
// cycle = c_hp * (smooth - 2*smooth1 + smooth2) + c_fb1*cycle1 + c_fb2*cycle2
|
||||
double diff = smooth0 - 2.0 * smooth1 + smooth2;
|
||||
double diff = smooth0 - (2.0 * smooth1) + smooth2;
|
||||
cycle = Math.FusedMultiplyAdd(_chp, diff,
|
||||
Math.FusedMultiplyAdd(_cfb1, s.Cycle1, _cfb2 * s.Cycle2));
|
||||
}
|
||||
@@ -240,7 +240,7 @@ public sealed class Ccyc : AbstractBase
|
||||
return;
|
||||
}
|
||||
|
||||
double halfAlpha = 1.0 - 0.5 * alpha;
|
||||
double halfAlpha = 1.0 - (0.5 * alpha);
|
||||
double chp = halfAlpha * halfAlpha;
|
||||
double oneMinusAlpha = 1.0 - alpha;
|
||||
double cfb1 = 2.0 * oneMinusAlpha;
|
||||
@@ -263,7 +263,7 @@ public sealed class Ccyc : AbstractBase
|
||||
price1 = price0;
|
||||
price0 = val;
|
||||
|
||||
double smooth = (price0 + 2.0 * price1 + 2.0 * price2 + price3) / 6.0;
|
||||
double smooth = (price0 + (2.0 * price1) + (2.0 * price2) + price3) / 6.0;
|
||||
smooth2 = smooth1;
|
||||
smooth1 = smooth0;
|
||||
smooth0 = smooth;
|
||||
@@ -272,11 +272,11 @@ public sealed class Ccyc : AbstractBase
|
||||
int barNum = i + 1;
|
||||
if (barNum < 7)
|
||||
{
|
||||
cycle = (price0 - 2.0 * price1 + price2) * 0.25;
|
||||
cycle = (price0 - (2.0 * price1) + price2) * 0.25;
|
||||
}
|
||||
else
|
||||
{
|
||||
double diff = smooth0 - 2.0 * smooth1 + smooth2;
|
||||
double diff = smooth0 - (2.0 * smooth1) + smooth2;
|
||||
cycle = Math.FusedMultiplyAdd(chp, diff,
|
||||
Math.FusedMultiplyAdd(cfb1, cycle1, cfb2 * cycle2));
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ public sealed class Cg : AbstractBase
|
||||
private double _p_weightedSum;
|
||||
private double _p_sum;
|
||||
|
||||
|
||||
public override bool IsHot => _buffer.IsFull;
|
||||
|
||||
/// <summary>
|
||||
@@ -112,7 +111,6 @@ public sealed class Cg : AbstractBase
|
||||
// after each update (or track differential updates which is complex)
|
||||
RecalculateSums();
|
||||
|
||||
|
||||
// Calculate CG
|
||||
double cg = CalculateCg();
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@ public sealed class Ebsw : AbstractBase
|
||||
double wave = (filt0 + filt1 + filt2) / 3.0;
|
||||
|
||||
// Power: 3-bar average of squared filtered values
|
||||
double pwr = (filt0 * filt0 + filt1 * filt1 + filt2 * filt2) / 3.0;
|
||||
double pwr = ((filt0 * filt0) + (filt1 * filt1) + (filt2 * filt2)) / 3.0;
|
||||
|
||||
// Automatic gain control: normalize by RMS, clamp to [-1, +1]
|
||||
double sineWave = pwr > 0 ? wave / Math.Sqrt(pwr) : 0;
|
||||
@@ -326,7 +326,7 @@ public sealed class Ebsw : AbstractBase
|
||||
double wave = (filt0 + filt1 + filt2) / 3.0;
|
||||
|
||||
// Power
|
||||
double pwr = (filt0 * filt0 + filt1 * filt1 + filt2 * filt2) / 3.0;
|
||||
double pwr = ((filt0 * filt0) + (filt1 * filt1) + (filt2 * filt2)) / 3.0;
|
||||
|
||||
// AGC normalization
|
||||
double sineWave = pwr > 0 ? wave / Math.Sqrt(pwr) : 0;
|
||||
|
||||
@@ -162,10 +162,10 @@ public sealed class Homod : AbstractBase
|
||||
double price0 = price;
|
||||
|
||||
// Calculate bandwidth based on smooth period
|
||||
double bandwidth = 0.075 * s.SmoothPeriod + 0.54;
|
||||
double bandwidth = (0.075 * s.SmoothPeriod) + 0.54;
|
||||
|
||||
// 4-bar weighted moving average: (4*p0 + 3*p1 + 2*p2 + p3) / 10
|
||||
double smoothPrice = (4.0 * price0 + 3.0 * price1 + 2.0 * price2 + price3) / 10.0;
|
||||
double smoothPrice = ((4.0 * price0) + (3.0 * price1) + (2.0 * price2) + price3) / 10.0;
|
||||
|
||||
// Shift smooth price history
|
||||
double sp6 = s.Sp5;
|
||||
@@ -177,7 +177,7 @@ public sealed class Homod : AbstractBase
|
||||
double sp0 = smoothPrice;
|
||||
|
||||
// Hilbert Transform detrender: coefficients [0.0962, 0, 0.5769, 0, -0.5769, 0, -0.0962] * bandwidth
|
||||
double detrender = (0.0962 * sp0 + 0.5769 * sp2 - 0.5769 * sp4 - 0.0962 * sp6) * bandwidth;
|
||||
double detrender = ((0.0962 * sp0) + (0.5769 * sp2) - (0.5769 * sp4) - (0.0962 * sp6)) * bandwidth;
|
||||
|
||||
// Shift detrender history
|
||||
double det6 = s.Det5;
|
||||
@@ -189,7 +189,7 @@ public sealed class Homod : AbstractBase
|
||||
double det0 = detrender;
|
||||
|
||||
// Q1 via Hilbert Transform of detrender
|
||||
double q1 = (0.0962 * det0 + 0.5769 * det2 - 0.5769 * det4 - 0.0962 * det6) * bandwidth;
|
||||
double q1 = ((0.0962 * det0) + (0.5769 * det2) - (0.5769 * det4) - (0.0962 * det6)) * bandwidth;
|
||||
|
||||
// I1 is detrender delayed by 3 bars
|
||||
double i1 = det3;
|
||||
@@ -213,10 +213,10 @@ public sealed class Homod : AbstractBase
|
||||
double q1_0 = q1;
|
||||
|
||||
// JI = Hilbert Transform of I1
|
||||
double ji = (0.0962 * i1_0 + 0.5769 * i1_2 - 0.5769 * i1_4 - 0.0962 * i1_6) * bandwidth;
|
||||
double ji = ((0.0962 * i1_0) + (0.5769 * i1_2) - (0.5769 * i1_4) - (0.0962 * i1_6)) * bandwidth;
|
||||
|
||||
// JQ = Hilbert Transform of Q1
|
||||
double jq = (0.0962 * q1_0 + 0.5769 * q1_2 - 0.5769 * q1_4 - 0.0962 * q1_6) * bandwidth;
|
||||
double jq = ((0.0962 * q1_0) + (0.5769 * q1_2) - (0.5769 * q1_4) - (0.0962 * q1_6)) * bandwidth;
|
||||
|
||||
// Calculate I2 and Q2 (phasor rotation)
|
||||
double i2Raw = i1 - jq;
|
||||
|
||||
@@ -139,8 +139,8 @@ public sealed class HtDcperiod : AbstractBase
|
||||
double input1 = buffer[KEY_Q1];
|
||||
DoHilbertTransform(buffer, KEY_JQ, input1, true, hilbertIdx, adjustedPrevPeriod);
|
||||
|
||||
q2 = 0.2 * (buffer[KEY_Q1] + buffer[KEY_JI]) + 0.8 * prevQ2;
|
||||
i2 = 0.2 * (i1ForOddPrev3 - buffer[KEY_JQ]) + 0.8 * prevI2;
|
||||
q2 = (0.2 * (buffer[KEY_Q1] + buffer[KEY_JI])) + (0.8 * prevQ2);
|
||||
i2 = (0.2 * (i1ForOddPrev3 - buffer[KEY_JQ])) + (0.8 * prevI2);
|
||||
|
||||
i1ForEvenPrev3 = i1ForEvenPrev2;
|
||||
i1ForEvenPrev2 = buffer[KEY_DETRENDER];
|
||||
@@ -164,8 +164,8 @@ public sealed class HtDcperiod : AbstractBase
|
||||
hilbertIdx = 0;
|
||||
}
|
||||
|
||||
q2 = 0.2 * (buffer[KEY_Q1] + buffer[KEY_JI]) + 0.8 * prevQ2;
|
||||
i2 = 0.2 * (i1ForEvenPrev3 - buffer[KEY_JQ]) + 0.8 * prevI2;
|
||||
q2 = (0.2 * (buffer[KEY_Q1] + buffer[KEY_JI])) + (0.8 * prevQ2);
|
||||
i2 = (0.2 * (i1ForEvenPrev3 - buffer[KEY_JQ])) + (0.8 * prevI2);
|
||||
|
||||
i1ForOddPrev3 = i1ForOddPrev2;
|
||||
i1ForOddPrev2 = buffer[KEY_DETRENDER];
|
||||
@@ -289,7 +289,7 @@ public sealed class HtDcperiod : AbstractBase
|
||||
}
|
||||
|
||||
// Calculate smoothed price using WMA
|
||||
double adjustedPrevPeriod = 0.075 * s.Period + 0.54;
|
||||
double adjustedPrevPeriod = (0.075 * s.Period) + 0.54;
|
||||
|
||||
s.PeriodWMASub += price;
|
||||
s.PeriodWMASub -= s.TrailingWMAValue;
|
||||
|
||||
@@ -142,8 +142,8 @@ public sealed class HtPhasor : AbstractBase
|
||||
double input1 = buffer[KEY_Q1];
|
||||
DoHilbertTransform(buffer, KEY_JQ, input1, true, hilbertIdx, adjustedPrevPeriod);
|
||||
|
||||
q2 = 0.2 * (buffer[KEY_Q1] + buffer[KEY_JI]) + 0.8 * prevQ2;
|
||||
i2 = 0.2 * (i1ForOddPrev3 - buffer[KEY_JQ]) + 0.8 * prevI2;
|
||||
q2 = (0.2 * (buffer[KEY_Q1] + buffer[KEY_JI])) + (0.8 * prevQ2);
|
||||
i2 = (0.2 * (i1ForOddPrev3 - buffer[KEY_JQ])) + (0.8 * prevI2);
|
||||
|
||||
i1ForEvenPrev3 = i1ForEvenPrev2;
|
||||
i1ForEvenPrev2 = buffer[KEY_DETRENDER];
|
||||
@@ -167,8 +167,8 @@ public sealed class HtPhasor : AbstractBase
|
||||
hilbertIdx = 0;
|
||||
}
|
||||
|
||||
q2 = 0.2 * (buffer[KEY_Q1] + buffer[KEY_JI]) + 0.8 * prevQ2;
|
||||
i2 = 0.2 * (i1ForEvenPrev3 - buffer[KEY_JQ]) + 0.8 * prevI2;
|
||||
q2 = (0.2 * (buffer[KEY_Q1] + buffer[KEY_JI])) + (0.8 * prevQ2);
|
||||
i2 = (0.2 * (i1ForEvenPrev3 - buffer[KEY_JQ])) + (0.8 * prevI2);
|
||||
|
||||
i1ForOddPrev3 = i1ForOddPrev2;
|
||||
i1ForOddPrev2 = buffer[KEY_DETRENDER];
|
||||
@@ -178,8 +178,8 @@ public sealed class HtPhasor : AbstractBase
|
||||
private static void CalcSmoothedPeriod(
|
||||
ref double re, double i2, double q2, ref double prevI2, ref double prevQ2, ref double im, ref double period)
|
||||
{
|
||||
re = Math.FusedMultiplyAdd(0.2, i2 * prevI2 + q2 * prevQ2, 0.8 * re);
|
||||
im = Math.FusedMultiplyAdd(0.2, i2 * prevQ2 - q2 * prevI2, 0.8 * im);
|
||||
re = Math.FusedMultiplyAdd(0.2, (i2 * prevI2) + (q2 * prevQ2), 0.8 * re);
|
||||
im = Math.FusedMultiplyAdd(0.2, (i2 * prevQ2) - (q2 * prevI2), 0.8 * im);
|
||||
|
||||
prevQ2 = q2;
|
||||
prevI2 = i2;
|
||||
@@ -228,7 +228,7 @@ public sealed class HtPhasor : AbstractBase
|
||||
double p2 = Get(priceHistory, historyIdx, 2);
|
||||
double p3 = Get(priceHistory, historyIdx, 3);
|
||||
|
||||
double smoothedValue = (4.0 * p0 + 3.0 * p1 + 2.0 * p2 + p3) * 0.1;
|
||||
double smoothedValue = ((4.0 * p0) + (3.0 * p1) + (2.0 * p2) + p3) * 0.1;
|
||||
|
||||
s.PeriodWMASub = p0 + p1 + p2 + p3;
|
||||
s.PeriodWMASum = smoothedValue * 10.0;
|
||||
@@ -306,7 +306,7 @@ public sealed class HtPhasor : AbstractBase
|
||||
double prevQ2 = s.PrevQ2;
|
||||
double period = s.Period;
|
||||
|
||||
double adjustedPrevPeriod = 0.075 * period + 0.54;
|
||||
double adjustedPrevPeriod = (0.075 * period) + 0.54;
|
||||
_smoothPrice[s.SmoothPriceIdx] = smoothedValue;
|
||||
|
||||
double q2, i2;
|
||||
|
||||
Reference in New Issue
Block a user