[CodeFactor] Apply fixes to commit 4a01f03

This commit is contained in:
codefactor-io
2026-03-11 03:35:12 +00:00
parent 4a01f03cb4
commit 567fa89465
63 changed files with 293 additions and 302 deletions
@@ -22,7 +22,7 @@ public class TtmSqueezeValidationTests
// Very tight range bars - stddev will be near 0
for (int i = 0; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100.0, 100.01, 99.99, 100.0, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100.0, 100.01, 99.99, 100.0, 1000));
}
// With effectively zero stddev, BB bands collapse to the mean
@@ -45,7 +45,7 @@ public class TtmSqueezeValidationTests
double high = 105;
double low = 95;
double close = (high + low) / 2; // exactly at midline
squeeze.Update(new TBar(baseTime + i * 60000, 100, high, low, close, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, high, low, close, 1000));
}
// Momentum should be near zero since price = midline
@@ -113,7 +113,7 @@ public class TtmSqueezeValidationTests
double midline = 100; // (110 + 90) / 2
double close = midline + (i * 2); // 100, 102, 104, ...
squeeze.Update(new TBar(baseTime + i * 60000, 100, high, low, close, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, high, low, close, 1000));
}
// Momentum should be strongly positive with rising trend
@@ -135,28 +135,28 @@ public class TtmSqueezeValidationTests
// Uptrend (rising above zero - cyan = 0)
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 + i * 2, 105 + i * 2, 95 + i * 2, 103 + i * 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 + (i * 2), 105 + (i * 2), 95 + (i * 2), 103 + (i * 2), 1000));
colorsSeen.Add(squeeze.ColorCode);
}
// Now weakening but still positive (falling above zero - blue = 1)
for (int i = 5; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 115, 118, 112, 114, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 115, 118, 112, 114, 1000));
colorsSeen.Add(squeeze.ColorCode);
}
// Downtrend (falling below zero - red = 2)
for (int i = 10; i < 15; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 - (i - 10) * 3, 102 - (i - 10) * 3, 95 - (i - 10) * 3, 97 - (i - 10) * 3, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 - ((i - 10) * 3), 102 - ((i - 10) * 3), 95 - ((i - 10) * 3), 97 - ((i - 10) * 3), 1000));
colorsSeen.Add(squeeze.ColorCode);
}
// Recovering but still negative (rising below zero - yellow = 3)
for (int i = 15; i < 20; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 80, 85, 78, 82, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 80, 85, 78, 82, 1000));
colorsSeen.Add(squeeze.ColorCode);
}
@@ -173,7 +173,7 @@ public class TtmSqueezeValidationTests
// Strong uptrend to ensure positive and rising momentum
for (int i = 0; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 + i * 5, 105 + i * 5, 95 + i * 5, 103 + i * 5, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 + (i * 5), 105 + (i * 5), 95 + (i * 5), 103 + (i * 5), 1000));
}
if (squeeze.MomentumPositive && squeeze.MomentumRising)
@@ -191,7 +191,7 @@ public class TtmSqueezeValidationTests
// Strong downtrend to ensure negative and falling momentum
for (int i = 0; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 - i * 5, 105 - i * 5, 95 - i * 5, 97 - i * 5, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 - (i * 5), 105 - (i * 5), 95 - (i * 5), 97 - (i * 5), 1000));
}
if (!squeeze.MomentumPositive && !squeeze.MomentumRising)
@@ -215,7 +215,7 @@ public class TtmSqueezeValidationTests
// Start with tight range to build squeeze
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 100.1, 99.9, 100, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 100.1, 99.9, 100, 1000));
if (squeeze.SqueezeFired)
{
squeezeFiredCount++;
@@ -226,7 +226,7 @@ public class TtmSqueezeValidationTests
for (int i = 5; i < 10; i++)
{
double volatility = (i - 4) * 5;
squeeze.Update(new TBar(baseTime + i * 60000, 100, 100 + volatility, 100 - volatility, 100 + volatility - 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 100 + volatility, 100 - volatility, 100 + volatility - 2, 1000));
if (squeeze.SqueezeFired)
{
squeezeFiredCount++;
@@ -250,10 +250,10 @@ public class TtmSqueezeValidationTests
for (int i = 0; i < 50; i++)
{
double price = 100 + Math.Sin(i * 0.2) * 10;
double price = 100 + (Math.Sin(i * 0.2) * 10);
double high = price + 2;
double low = price - 2;
source.Add(new TBar(baseTime + i * 60000, price, high, low, price + 0.5, 1000));
source.Add(new TBar(baseTime + (i * 60000), price, high, low, price + 0.5, 1000));
}
// Batch calculation
@@ -301,7 +301,7 @@ public class TtmSqueezeValidationTests
// All bars identical
for (int i = 0; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 100, 100, 100, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 100, 100, 100, 1000));
}
Assert.True(double.IsFinite(squeeze.Momentum.Value));
@@ -318,7 +318,7 @@ public class TtmSqueezeValidationTests
for (int i = 0; i < 10; i++)
{
double range = (i + 1) * 100; // Increasing volatility
squeeze.Update(new TBar(baseTime + i * 60000, 100, 100 + range, 100 - range, 100 + range / 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 100 + range, 100 - range, 100 + (range / 2), 1000));
}
Assert.True(double.IsFinite(squeeze.Momentum.Value));
@@ -334,7 +334,7 @@ public class TtmSqueezeValidationTests
// Build state well past warmup
for (int i = 0; i < 100; i++)
{
double p = 100.0 + 10.0 * Math.Sin(2.0 * Math.PI * i / 20.0);
double p = 100.0 + (10.0 * Math.Sin(2.0 * Math.PI * i / 20.0));
ind.Update(new TBar(t0.AddMinutes(i), p, p + 2, p - 2, p, 1000), isNew: true);
}
+12 -13
View File
@@ -210,8 +210,8 @@ public sealed class TtmSqueeze : ITValuePublisher
// Precompute linear regression constants
_sumX = 0.5 * momPeriod * (momPeriod - 1);
double sumX2 = (momPeriod - 1.0) * momPeriod * (2.0 * momPeriod - 1.0) / 6.0;
_denominator = momPeriod * sumX2 - _sumX * _sumX;
double sumX2 = (momPeriod - 1.0) * momPeriod * ((2.0 * momPeriod) - 1.0) / 6.0;
_denominator = (momPeriod * sumX2) - (_sumX * _sumX);
Reset();
}
@@ -328,11 +328,11 @@ public sealed class TtmSqueeze : ITValuePublisher
double bbCount = Math.Min(_barCount, _bbPeriod);
double bbMean = bbCount > 0 ? _priceSum / bbCount : close;
double bbVariance = bbCount > 1 ? (_priceSumSquares - _priceSum * _priceSum / bbCount) / bbCount : 0;
double bbVariance = bbCount > 1 ? (_priceSumSquares - (_priceSum * _priceSum / bbCount)) / bbCount : 0;
double bbStdDev = Math.Sqrt(Math.Max(0, bbVariance));
double bbUpper = bbMean + _bbMult * bbStdDev;
double bbLower = bbMean - _bbMult * bbStdDev;
double bbUpper = bbMean + (_bbMult * bbStdDev);
double bbLower = bbMean - (_bbMult * bbStdDev);
// === Keltner Channel Calculation ===
// EMA with warmup compensation
@@ -354,8 +354,8 @@ public sealed class TtmSqueeze : ITValuePublisher
_atrE = Math.FusedMultiplyAdd(_atrE, 1 - atrAlpha, 0);
double atr = _atrE < 1.0 ? _atrRma / (1.0 - _atrE) : _atrRma;
double kcUpper = kcMid + _kcMult * atr;
double kcLower = kcMid - _kcMult * atr;
double kcUpper = kcMid + (_kcMult * atr);
double kcLower = kcMid - (_kcMult * atr);
// === Squeeze Detection ===
bool wasSqueezeOn = _prevSqueezeOn;
@@ -380,7 +380,7 @@ public sealed class TtmSqueeze : ITValuePublisher
{
double oldest = _momentumBuffer[0];
double prevSumY = _momentumSumY;
_momentumSumXY = _momentumSumXY + prevSumY - _momPeriod * oldest;
_momentumSumXY = _momentumSumXY + prevSumY - (_momPeriod * oldest);
_momentumSumY -= oldest;
}
_momentumBuffer.Add(deviation);
@@ -411,8 +411,8 @@ public sealed class TtmSqueeze : ITValuePublisher
if (momCount < _momPeriod)
{
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
{
@@ -426,8 +426,8 @@ public sealed class TtmSqueeze : ITValuePublisher
}
else
{
double slope = (n * _momentumSumXY - sx * _momentumSumY) / denom;
double intercept = (_momentumSumY - slope * sx) / n;
double slope = ((n * _momentumSumXY) - (sx * _momentumSumY)) / denom;
double intercept = (_momentumSumY - (slope * sx)) / n;
// Regression value at current point (x = count - 1)
momentum = Math.FusedMultiplyAdd(slope, n - 1, intercept);
}
@@ -561,5 +561,4 @@ public sealed class TtmSqueeze : ITValuePublisher
_lowBuffer.Restore();
_momentumBuffer.Restore();
}
}