mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-17 01:58:06 +00:00
[CodeFactor] Apply fixes to commit 9697fac
This commit is contained in:
@@ -223,7 +223,7 @@ public sealed class Bbands : AbstractBase
|
||||
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), isNew: true);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), isNew: true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,5 +367,4 @@ public sealed class Bbands : AbstractBase
|
||||
TSeries results = indicator.Update(source);
|
||||
return (results, indicator);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ public sealed class JbandsIndicator : Indicator, IWatchlistIndicator
|
||||
|
||||
private Jbands? _indicator;
|
||||
|
||||
public int MinHistoryDepths => (int)Math.Ceiling(20.0 + 80.0 * Math.Pow(Period, 0.36));
|
||||
public int MinHistoryDepths => (int)Math.Ceiling(20.0 + (80.0 * Math.Pow(Period, 0.36)));
|
||||
public override string ShortName => $"Jbands({Period},{Phase})";
|
||||
|
||||
public JbandsIndicator()
|
||||
|
||||
@@ -99,7 +99,7 @@ public sealed class Jbands : ITValuePublisher, IDisposable
|
||||
_logLengthDivider = Math.Log(Math.Max(_lengthDivider, 1e-12));
|
||||
_logSqrtDivider = Math.Log(Math.Max(sqrtDivider, 1e-12));
|
||||
|
||||
WarmupPeriod = (int)Math.Ceiling(20.0 + 80.0 * Math.Pow(period, 0.36));
|
||||
WarmupPeriod = (int)Math.Ceiling(20.0 + (80.0 * Math.Pow(period, 0.36)));
|
||||
|
||||
_handler = Handle;
|
||||
Name = $"Jbands({period},{phase})";
|
||||
|
||||
@@ -197,7 +197,7 @@ public sealed class Kchannel : ITValuePublisher
|
||||
double trueRange = Math.Max(tr1, Math.Max(tr2, tr3));
|
||||
|
||||
// ATR using RMA with warmup compensation
|
||||
double newRawRma = (_state.RawRma * (_period - 1) + trueRange) / _period;
|
||||
double newRawRma = ((_state.RawRma * (_period - 1)) + trueRange) / _period;
|
||||
double newE = (1.0 - _atrAlpha) * _state.E;
|
||||
double atrValue = newE > Epsilon ? newRawRma / (1.0 - newE) : newRawRma;
|
||||
|
||||
@@ -360,7 +360,7 @@ public sealed class Kchannel : ITValuePublisher
|
||||
double tr = Math.Max(tr1, Math.Max(tr2, tr3));
|
||||
|
||||
// ATR (RMA with warmup)
|
||||
rawRma = (rawRma * (period - 1) + tr) / period;
|
||||
rawRma = ((rawRma * (period - 1)) + tr) / period;
|
||||
e = (1.0 - atrAlpha) * e;
|
||||
double atr = e > Epsilon ? rawRma / (1.0 - e) : rawRma;
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ public sealed class Starchannel : ITValuePublisher
|
||||
double trueRange = Math.Max(tr1, Math.Max(tr2, tr3));
|
||||
|
||||
// ATR using RMA with warmup compensation (uses _atrPeriod for separate ATR smoothing)
|
||||
double newRawRma = (_state.RawRma * (_atrPeriod - 1) + trueRange) / _atrPeriod;
|
||||
double newRawRma = ((_state.RawRma * (_atrPeriod - 1)) + trueRange) / _atrPeriod;
|
||||
double newE = (1.0 - _atrAlpha) * _state.E;
|
||||
double atrValue = newE > Epsilon ? newRawRma / (1.0 - newE) : newRawRma;
|
||||
|
||||
@@ -406,7 +406,7 @@ public sealed class Starchannel : ITValuePublisher
|
||||
double tr = Math.Max(tr1, Math.Max(tr2, tr3));
|
||||
|
||||
// ATR (RMA with warmup compensation, uses effectiveAtrPeriod)
|
||||
rawRma = (rawRma * (effectiveAtrPeriod - 1) + tr) / effectiveAtrPeriod;
|
||||
rawRma = ((rawRma * (effectiveAtrPeriod - 1)) + tr) / effectiveAtrPeriod;
|
||||
e = (1.0 - atrAlpha) * e;
|
||||
double atr = e > Epsilon ? rawRma / (1.0 - e) : rawRma;
|
||||
|
||||
|
||||
@@ -279,7 +279,7 @@ public sealed class Stbands : AbstractBase
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
// Treat as close price only
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), isNew: true);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), isNew: true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -406,5 +406,4 @@ public sealed class Stbands : AbstractBase
|
||||
TSeries results = indicator.Update(source);
|
||||
return (results, indicator);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -136,9 +136,9 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
// sumX = 0 + 1 + ... + (n-1) = n(n-1)/2
|
||||
_sumX = 0.5 * period * (period - 1);
|
||||
// sumX² = 0² + 1² + ... + (n-1)² = (n-1)n(2n-1)/6
|
||||
double sumX2 = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double sumX2 = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
// denominator = n * sumX² - sumX²
|
||||
_denominator = period * sumX2 - _sumX * _sumX;
|
||||
_denominator = (period * sumX2) - (_sumX * _sumX);
|
||||
|
||||
Reset();
|
||||
}
|
||||
@@ -253,8 +253,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
if (count < _period)
|
||||
{
|
||||
sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
denom = (n * sx2) - (sx * sx);
|
||||
}
|
||||
|
||||
double slope, intercept, regression;
|
||||
@@ -267,8 +267,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
}
|
||||
else
|
||||
{
|
||||
slope = (n * sumXY - sx * sumY) / denom;
|
||||
intercept = (sumY - slope * sx) / n;
|
||||
slope = ((n * sumXY) - (sx * sumY)) / denom;
|
||||
intercept = (sumY - (slope * sx)) / n;
|
||||
// Regression value at current point (x = count - 1)
|
||||
regression = Math.FusedMultiplyAdd(slope, count - 1, intercept);
|
||||
}
|
||||
@@ -304,8 +304,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
Midline = new TValue(input.Time, regression);
|
||||
Upper1 = new TValue(input.Time, regression + stdDev);
|
||||
Lower1 = new TValue(input.Time, regression - stdDev);
|
||||
Upper2 = new TValue(input.Time, regression + 2.0 * stdDev);
|
||||
Lower2 = new TValue(input.Time, regression - 2.0 * stdDev);
|
||||
Upper2 = new TValue(input.Time, regression + (2.0 * stdDev));
|
||||
Lower2 = new TValue(input.Time, regression - (2.0 * stdDev));
|
||||
|
||||
PubEvent(Midline, isNew);
|
||||
return Midline;
|
||||
@@ -412,8 +412,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
|
||||
// Precompute constants for full period
|
||||
double sumXFull = 0.5 * period * (period - 1);
|
||||
double sumX2Full = (period - 1.0) * period * (2.0 * period - 1.0) / 6.0;
|
||||
double denomFull = period * sumX2Full - sumXFull * sumXFull;
|
||||
double sumX2Full = (period - 1.0) * period * ((2.0 * period) - 1.0) / 6.0;
|
||||
double denomFull = (period * sumX2Full) - (sumXFull * sumXFull);
|
||||
|
||||
// Track last valid value for NaN substitution
|
||||
double lastValid = double.NaN;
|
||||
@@ -483,8 +483,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
if (count < period)
|
||||
{
|
||||
sx = 0.5 * n * (n - 1);
|
||||
double sx2 = (n - 1.0) * n * (2.0 * n - 1.0) / 6.0;
|
||||
denom = n * sx2 - sx * sx;
|
||||
double sx2 = (n - 1.0) * n * ((2.0 * n) - 1.0) / 6.0;
|
||||
denom = (n * sx2) - (sx * sx);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -502,8 +502,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
}
|
||||
else
|
||||
{
|
||||
slope = (n * sumXY - sx * sumY) / denom;
|
||||
intercept = (sumY - slope * sx) / n;
|
||||
slope = ((n * sumXY) - (sx * sumY)) / denom;
|
||||
intercept = (sumY - (slope * sx)) / n;
|
||||
regression = Math.FusedMultiplyAdd(slope, count - 1, intercept);
|
||||
}
|
||||
|
||||
@@ -533,8 +533,8 @@ public sealed class TtmLrc : ITValuePublisher
|
||||
midline[i] = regression;
|
||||
upper1[i] = regression + stdDev;
|
||||
lower1[i] = regression - stdDev;
|
||||
upper2[i] = regression + 2.0 * stdDev;
|
||||
lower2[i] = regression - 2.0 * stdDev;
|
||||
upper2[i] = regression + (2.0 * stdDev);
|
||||
lower2[i] = regression - (2.0 * stdDev);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ public sealed class Ubands : AbstractBase
|
||||
|
||||
// Precompute coefficients for FMA optimization
|
||||
_k0 = 1.0 - c1; // coefficient for val
|
||||
_k1 = 2.0 * c1 - _c2; // coefficient for PrevInput1
|
||||
_k1 = (2.0 * c1) - _c2; // coefficient for PrevInput1
|
||||
_k2 = -(c1 + _c3); // coefficient for PrevInput2
|
||||
|
||||
WarmupPeriod = period;
|
||||
@@ -261,7 +261,7 @@ public sealed class Ubands : AbstractBase
|
||||
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), isNew: true);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), isNew: true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ public sealed class Ubands : AbstractBase
|
||||
double c1 = (1.0 + c2 - c3) / 4.0;
|
||||
|
||||
double k0 = 1.0 - c1;
|
||||
double k1 = 2.0 * c1 - c2;
|
||||
double k1 = (2.0 * c1) - c2;
|
||||
double k2 = -(c1 + c3);
|
||||
|
||||
// Use stackalloc for residual buffer if small enough
|
||||
@@ -404,5 +404,4 @@ public sealed class Ubands : AbstractBase
|
||||
TSeries results = indicator.Update(source);
|
||||
return (results, indicator);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ public sealed class Uchannel : AbstractBase
|
||||
{
|
||||
// USF: (1-c1)*s0 + (2*c1-c2)*s1 - (c1+c3)*s2 + c2*usf1 + c3*usf2
|
||||
strValue = Math.FusedMultiplyAdd(1 - _c1_str, str_s0,
|
||||
Math.FusedMultiplyAdd(2 * _c1_str - _c2_str, str_s1,
|
||||
Math.FusedMultiplyAdd((2 * _c1_str) - _c2_str, str_s1,
|
||||
Math.FusedMultiplyAdd(-(_c1_str + _c3_str), str_s2,
|
||||
Math.FusedMultiplyAdd(_c2_str, usStr1, _c3_str * usStr2))));
|
||||
}
|
||||
@@ -237,7 +237,7 @@ public sealed class Uchannel : AbstractBase
|
||||
else
|
||||
{
|
||||
cenValue = Math.FusedMultiplyAdd(1 - _c1_cen, cen_s0,
|
||||
Math.FusedMultiplyAdd(2 * _c1_cen - _c2_cen, cen_s1,
|
||||
Math.FusedMultiplyAdd((2 * _c1_cen) - _c2_cen, cen_s1,
|
||||
Math.FusedMultiplyAdd(-(_c1_cen + _c3_cen), cen_s2,
|
||||
Math.FusedMultiplyAdd(_c2_cen, usCen1, _c3_cen * usCen2))));
|
||||
}
|
||||
@@ -337,7 +337,7 @@ public sealed class Uchannel : AbstractBase
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
// Treat as close price only
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), isNew: true);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), isNew: true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -471,7 +471,7 @@ public sealed class Uchannel : AbstractBase
|
||||
else
|
||||
{
|
||||
strValue = Math.FusedMultiplyAdd(1 - c1_str, str_s0,
|
||||
Math.FusedMultiplyAdd(2 * c1_str - c2_str, str_s1,
|
||||
Math.FusedMultiplyAdd((2 * c1_str) - c2_str, str_s1,
|
||||
Math.FusedMultiplyAdd(-(c1_str + c3_str), str_s2,
|
||||
Math.FusedMultiplyAdd(c2_str, usStr1, c3_str * usStr2))));
|
||||
}
|
||||
@@ -489,7 +489,7 @@ public sealed class Uchannel : AbstractBase
|
||||
else
|
||||
{
|
||||
cenValue = Math.FusedMultiplyAdd(1 - c1_cen, cen_s0,
|
||||
Math.FusedMultiplyAdd(2 * c1_cen - c2_cen, cen_s1,
|
||||
Math.FusedMultiplyAdd((2 * c1_cen) - c2_cen, cen_s1,
|
||||
Math.FusedMultiplyAdd(-(c1_cen + c3_cen), cen_s2,
|
||||
Math.FusedMultiplyAdd(c2_cen, usCen1, c3_cen * usCen2))));
|
||||
}
|
||||
|
||||
@@ -206,9 +206,9 @@ public sealed class Vwapbands : AbstractBase
|
||||
{
|
||||
_state = _state with
|
||||
{
|
||||
SumPV = _state.SumPV + price * vol,
|
||||
SumPV = _state.SumPV + (price * vol),
|
||||
SumVol = _state.SumVol + vol,
|
||||
SumPV2 = _state.SumPV2 + price * price * vol,
|
||||
SumPV2 = _state.SumPV2 + (price * price * vol),
|
||||
Count = _state.Count + 1
|
||||
};
|
||||
}
|
||||
@@ -228,10 +228,10 @@ public sealed class Vwapbands : AbstractBase
|
||||
double stdev = Math.Sqrt(variance);
|
||||
|
||||
// Calculate bands
|
||||
double upper1 = vwap + _multiplier * stdev;
|
||||
double lower1 = vwap - _multiplier * stdev;
|
||||
double upper2 = vwap + 2.0 * _multiplier * stdev;
|
||||
double lower2 = vwap - 2.0 * _multiplier * stdev;
|
||||
double upper1 = vwap + (_multiplier * stdev);
|
||||
double lower1 = vwap - (_multiplier * stdev);
|
||||
double upper2 = vwap + (2.0 * _multiplier * stdev);
|
||||
double lower2 = vwap - (2.0 * _multiplier * stdev);
|
||||
|
||||
// Update output values
|
||||
Vwap = new TValue(input.Time, vwap);
|
||||
@@ -316,7 +316,7 @@ public sealed class Vwapbands : AbstractBase
|
||||
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), 1.0, isNew: true, reset: false);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), 1.0, isNew: true, reset: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -423,10 +423,10 @@ public sealed class Vwapbands : AbstractBase
|
||||
|
||||
vwap[i] = vwapVal;
|
||||
stdDev[i] = stdev;
|
||||
upper1[i] = vwapVal + multiplier * stdev;
|
||||
lower1[i] = vwapVal - multiplier * stdev;
|
||||
upper2[i] = vwapVal + 2.0 * multiplier * stdev;
|
||||
lower2[i] = vwapVal - 2.0 * multiplier * stdev;
|
||||
upper1[i] = vwapVal + (multiplier * stdev);
|
||||
lower1[i] = vwapVal - (multiplier * stdev);
|
||||
upper2[i] = vwapVal + (2.0 * multiplier * stdev);
|
||||
lower2[i] = vwapVal - (2.0 * multiplier * stdev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,9 +200,9 @@ public sealed class Vwapsd : AbstractBase
|
||||
{
|
||||
_state = _state with
|
||||
{
|
||||
SumPV = _state.SumPV + price * vol,
|
||||
SumPV = _state.SumPV + (price * vol),
|
||||
SumVol = _state.SumVol + vol,
|
||||
SumPV2 = _state.SumPV2 + price * price * vol,
|
||||
SumPV2 = _state.SumPV2 + (price * price * vol),
|
||||
Count = _state.Count + 1
|
||||
};
|
||||
}
|
||||
@@ -222,8 +222,8 @@ public sealed class Vwapsd : AbstractBase
|
||||
double stdev = Math.Sqrt(variance);
|
||||
|
||||
// Calculate bands
|
||||
double upper = vwap + _numDevs * stdev;
|
||||
double lower = vwap - _numDevs * stdev;
|
||||
double upper = vwap + (_numDevs * stdev);
|
||||
double lower = vwap - (_numDevs * stdev);
|
||||
|
||||
// Update output values
|
||||
Vwap = new TValue(input.Time, vwap);
|
||||
@@ -302,7 +302,7 @@ public sealed class Vwapsd : AbstractBase
|
||||
|
||||
for (int i = 0; i < source.Length; i++)
|
||||
{
|
||||
Update(new TValue(startTime + i * step.Value, source[i]), 1.0, isNew: true, reset: false);
|
||||
Update(new TValue(startTime + (i * step.Value), source[i]), 1.0, isNew: true, reset: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,8 +405,8 @@ public sealed class Vwapsd : AbstractBase
|
||||
|
||||
vwap[i] = vwapVal;
|
||||
stdDev[i] = stdev;
|
||||
upper[i] = vwapVal + numDevs * stdev;
|
||||
lower[i] = vwapVal - numDevs * stdev;
|
||||
upper[i] = vwapVal + (numDevs * stdev);
|
||||
lower[i] = vwapVal - (numDevs * stdev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user