[CodeFactor] Apply fixes to commit 0606491

This commit is contained in:
codefactor-io
2026-03-12 19:37:50 +00:00
parent 060649192f
commit 8f79257155
384 changed files with 1197 additions and 1215 deletions
@@ -78,7 +78,7 @@ public sealed class AlligatorValidationTests : IDisposable
// Create strong uptrend
for (int i = 0; i < 100; i++)
{
double price = 100.0 + i * 2.0;
double price = 100.0 + (i * 2.0);
var bar = new TBar(DateTime.UtcNow.AddMinutes(i), price, price + 1, price - 1, price, 1000);
alligator.Update(bar);
}
+4 -4
View File
@@ -83,7 +83,7 @@ public class AmatTests
// Feed rising prices to create bullish trend
for (int i = 0; i < 20; i++)
{
amat.Update(new TValue(DateTime.UtcNow, 100 + i * 2));
amat.Update(new TValue(DateTime.UtcNow, 100 + (i * 2)));
}
// Trend should be +1, -1, or 0
@@ -99,7 +99,7 @@ public class AmatTests
// Feed steadily rising prices
for (int i = 0; i < 50; i++)
{
amat.Update(new TValue(DateTime.UtcNow, 100 + i * 3));
amat.Update(new TValue(DateTime.UtcNow, 100 + (i * 3)));
}
// Should be bullish when fast EMA > slow EMA and both rising
@@ -121,7 +121,7 @@ public class AmatTests
// Feed steadily falling prices
for (int i = 0; i < 50; i++)
{
amat.Update(new TValue(DateTime.UtcNow, 200 - i * 3));
amat.Update(new TValue(DateTime.UtcNow, 200 - (i * 3)));
}
// Should be bearish when fast EMA < slow EMA and both falling
@@ -471,7 +471,7 @@ public class AmatTests
// Feed rising prices to create divergence
for (int i = 0; i < 30; i++)
{
amat.Update(new TValue(DateTime.UtcNow, 100 + i * 5));
amat.Update(new TValue(DateTime.UtcNow, 100 + (i * 5)));
}
// Strength should be positive when there's divergence
@@ -273,7 +273,7 @@ public sealed class AmatValidationTests : IDisposable
// Phase 2: Falling prices (reversal)
for (int i = 50; i < 150; i++)
{
double price = 150 - (i - 50) * 2; // Fall faster than rise
double price = 150 - ((i - 50) * 2); // Fall faster than rise
amat.Update(new TValue(time.AddMinutes(i), price));
}
double bearishTrend = amat.Last.Value;
+1 -1
View File
@@ -34,7 +34,7 @@ public class ChopTests
// Generate trending bars: each bar higher than the last
for (int i = 0; i < 50; i++)
{
double basePrice = 100 + i * 2; // Strong uptrend
double basePrice = 100 + (i * 2); // Strong uptrend
bars.Add(new TBar(
time: DateTime.UtcNow.AddMinutes(i),
open: basePrice - 0.5,
@@ -74,7 +74,7 @@ public sealed class ChopValidationTests : IDisposable
for (int i = 0; i < 100; i++)
{
double price = 100.0 + i * 3.0; // Strong linear uptrend
double price = 100.0 + (i * 3.0); // Strong linear uptrend
var bar = new TBar(DateTime.UtcNow.AddMinutes(i), price, price + 0.5, price - 0.5, price, 1000);
chop.Update(bar);
}
@@ -95,7 +95,7 @@ public sealed class ChopValidationTests : IDisposable
for (int i = 0; i < 100; i++)
{
// Oscillating price with wide range but no trend
double price = 100.0 + 5.0 * Math.Sin(2.0 * Math.PI * i / 3.0);
double price = 100.0 + (5.0 * Math.Sin(2.0 * Math.PI * i / 3.0));
double high = price + 3.0;
double low = price - 3.0;
var bar = new TBar(DateTime.UtcNow.AddMinutes(i), price, high, low, price, 1000);
@@ -60,7 +60,7 @@ public class HtTrendmodeTests
// Feed data
for (int i = 0; i < 50; i++)
{
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + i * 0.5));
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + (i * 0.5)));
}
// TrendMode property should match output
@@ -76,7 +76,7 @@ public class HtTrendmodeTests
// Feed data
for (int i = 0; i < 50; i++)
{
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + Math.Sin(i * 0.2) * 10));
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + (Math.Sin(i * 0.2) * 10)));
}
// SmoothPeriod should be in valid range
@@ -93,7 +93,7 @@ public class HtTrendmodeTests
// Feed data
for (int i = 0; i < 50; i++)
{
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + Math.Sin(i * 0.3) * 8));
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + (Math.Sin(i * 0.3) * 8)));
}
// InstPeriod should be positive
@@ -109,7 +109,7 @@ public class HtTrendmodeTests
// Strong trend: monotonically increasing
for (int i = 0; i < 100; i++)
{
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + i * 2.0));
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), 100.0 + (i * 2.0)));
}
// With strong trend, inst_period should be larger → trend mode likely
@@ -126,7 +126,7 @@ public class HtTrendmodeTests
// Pure sinusoidal data (strong cycle)
for (int i = 0; i < 100; i++)
{
double value = 100.0 + Math.Sin(i * 0.4) * 10.0;
double value = 100.0 + (Math.Sin(i * 0.4) * 10.0);
indicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), value));
}
@@ -195,7 +195,7 @@ public class HtTrendmodeTests
for (int i = 0; i < 100; i++)
{
series.Add(DateTime.UtcNow.AddMinutes(i), 100.0 + Math.Sin(i * 0.2) * 10);
series.Add(DateTime.UtcNow.AddMinutes(i), 100.0 + (Math.Sin(i * 0.2) * 10));
}
var result = indicator.Update(series);
@@ -218,7 +218,7 @@ public class HtTrendmodeTests
for (int i = 0; i < input.Length; i++)
{
input[i] = 100.0 + Math.Sin(i * 0.15) * 8;
input[i] = 100.0 + (Math.Sin(i * 0.15) * 8);
}
HtTrendmode.Batch(input.AsSpan(), output.AsSpan());
@@ -238,7 +238,7 @@ public class HtTrendmodeTests
for (int i = 0; i < 100; i++)
{
series.Add(DateTime.UtcNow.AddMinutes(i), 100.0 + Math.Sin(i * 0.25) * 12);
series.Add(DateTime.UtcNow.AddMinutes(i), 100.0 + (Math.Sin(i * 0.25) * 12));
}
var result = HtTrendmode.Batch(series);
@@ -278,7 +278,7 @@ public class HtTrendmodeTests
for (int i = 0; i < 100; i++)
{
double value = 100.0 + Math.Sin(i * 0.2) * 10 + Math.Cos(i * 0.3) * 5;
double value = 100.0 + (Math.Sin(i * 0.2) * 10) + (Math.Cos(i * 0.3) * 5);
series.Add(DateTime.UtcNow.AddMinutes(i), value);
var result = streamingIndicator.Update(new TValue(DateTime.UtcNow.AddMinutes(i), value));
@@ -303,7 +303,7 @@ public class HtTrendmodeTests
double[] primeData = new double[70];
for (int i = 0; i < primeData.Length; i++)
{
primeData[i] = 100.0 + i * 0.5;
primeData[i] = 100.0 + (i * 0.5);
}
indicator.Prime(primeData);
@@ -174,7 +174,7 @@ public class IchimokuIndicatorTests
var now = DateTime.UtcNow;
for (int i = 0; i < 20; i++)
{
double basePrice = 100 + i * 2;
double basePrice = 100 + (i * 2);
indicator.HistoricalData.AddBar(now.AddMinutes(i), basePrice, basePrice + 5, basePrice - 5, basePrice);
var args = new UpdateArgs(UpdateReason.HistoricalBar);
indicator.ProcessUpdate(args);
+16 -16
View File
@@ -83,7 +83,7 @@ public class IchimokuTests
for (int i = 0; i < 52; i++)
{
var bar = new TBar(baseTime + i * 60000, 100 + i, 105 + i, 95 + i, 102 + i, 1000);
var bar = new TBar(baseTime + (i * 60000), 100 + i, 105 + i, 95 + i, 102 + i, 1000);
ichimoku.Update(bar);
}
@@ -241,18 +241,18 @@ public class IchimokuTests
// Add some initial bars
for (int i = 0; i < 3; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 100, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 100, 1000));
}
// Capture state before update (use underscore to indicate intentionally unused)
_ = ichimoku.Tenkan.Value;
// Update with new bar
ichimoku.Update(new TBar(baseTime + 3 * 60000, 110, 120, 100, 115, 1000), isNew: true);
ichimoku.Update(new TBar(baseTime + (3 * 60000), 110, 120, 100, 115, 1000), isNew: true);
double tenkanAfterNew = ichimoku.Tenkan.Value;
// Correct the bar (isNew=false) with different values
ichimoku.Update(new TBar(baseTime + 3 * 60000, 90, 95, 85, 90, 1000), isNew: false);
ichimoku.Update(new TBar(baseTime + (3 * 60000), 90, 95, 85, 90, 1000), isNew: false);
double tenkanAfterCorrection = ichimoku.Tenkan.Value;
// Values should differ based on the correction
@@ -268,17 +268,17 @@ public class IchimokuTests
// Fill buffer
for (int i = 0; i < 5; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 100, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 100, 1000));
}
// First update
ichimoku.Update(new TBar(baseTime + 5 * 60000, 105, 110, 100, 105, 1000), isNew: true);
ichimoku.Update(new TBar(baseTime + (5 * 60000), 105, 110, 100, 105, 1000), isNew: true);
double firstTenkan = ichimoku.Tenkan.Value;
// Multiple corrections should converge
for (int i = 0; i < 3; i++)
{
ichimoku.Update(new TBar(baseTime + 5 * 60000, 105, 110, 100, 105, 1000), isNew: false);
ichimoku.Update(new TBar(baseTime + (5 * 60000), 105, 110, 100, 105, 1000), isNew: false);
}
Assert.Equal(firstTenkan, ichimoku.Tenkan.Value, Precision);
@@ -344,7 +344,7 @@ public class IchimokuTests
// Process some bars
for (int i = 0; i < 60; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100 + i, 105 + i, 95 + i, 100 + i, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100 + i, 105 + i, 95 + i, 100 + i, 1000));
}
Assert.True(ichimoku.IsHot);
@@ -368,7 +368,7 @@ public class IchimokuTests
// First use
for (int i = 0; i < 10; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100, 110, 90, 100, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100, 110, 90, 100, 1000));
}
double firstTenkan = ichimoku.Tenkan.Value;
@@ -378,7 +378,7 @@ public class IchimokuTests
for (int i = 0; i < 10; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100, 110, 90, 100, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100, 110, 90, 100, 1000));
}
Assert.Equal(firstTenkan, ichimoku.Tenkan.Value, Precision);
@@ -396,7 +396,7 @@ public class IchimokuTests
for (int i = 0; i < 60; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100, 110, 90, 100, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100, 110, 90, 100, 1000));
}
var (tenkan, kijun, senkouA, senkouB, chikou) = Ichimoku.Batch(source);
@@ -430,7 +430,7 @@ public class IchimokuTests
for (int i = 0; i < 20; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100 + i, 110 + i, 90 + i, 100 + i, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100 + i, 110 + i, 90 + i, 100 + i, 1000));
}
var (tenkan, _, _, _, _) = Ichimoku.Batch(source, 3, 5, 10, 5);
@@ -446,7 +446,7 @@ public class IchimokuTests
for (int i = 0; i < 60; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100, 110, 90, 100, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100, 110, 90, 100, 1000));
}
var (results, indicator) = Ichimoku.Calculate(source);
@@ -469,7 +469,7 @@ public class IchimokuTests
// Constant high=low=close=100
for (int i = 0; i < 10; i++)
{
ichimoku.Update(new TBar(baseTime + i * 60000, 100, 100, 100, 100, 1000));
ichimoku.Update(new TBar(baseTime + (i * 60000), 100, 100, 100, 100, 1000));
}
Assert.Equal(100.0, ichimoku.Tenkan.Value, Precision);
@@ -506,8 +506,8 @@ public class IchimokuTests
// Uptrend: increasing highs and lows
for (int i = 0; i < 15; i++)
{
double basePrice = 100 + i * 2;
ichimoku.Update(new TBar(baseTime + i * 60000, basePrice, basePrice + 5, basePrice - 5, basePrice, 1000));
double basePrice = 100 + (i * 2);
ichimoku.Update(new TBar(baseTime + (i * 60000), basePrice, basePrice + 5, basePrice - 5, basePrice, 1000));
}
// In uptrend, Tenkan should be above Kijun (faster vs slower)
+2 -2
View File
@@ -507,8 +507,8 @@ public class QstickTests
for (int i = 0; i < 20; i++)
{
double open = 100.0 + i * 0.5;
double close = open + (i % 3 - 1); // varies between -1, 0, 1
double open = 100.0 + (i * 0.5);
double close = open + ((i % 3) - 1); // varies between -1, 0, 1
bars.Add(new TBar(time.AddMinutes(i).Ticks, open, open + 2, open - 1, close, 1000));
}
@@ -123,7 +123,7 @@ public sealed class QstickValidationTests : IDisposable
// Bar 2: diff = 3, EMA = alpha * 3 + (1-alpha) * 6-
qstick.Update(new TBar(time.AddMinutes(1).Ticks, 100.0, 108.0, 96.0, 103.0, 1000));
expectedEma = alpha * 3 + (1 - alpha) * expectedEma;
expectedEma = (alpha * 3) + ((1 - alpha) * expectedEma);
Assert.Equal(expectedEma, qstick.Last.Value, 10);
}
@@ -87,7 +87,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 4; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
Assert.False(squeeze.IsHot);
@@ -101,7 +101,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
Assert.True(squeeze.IsHot);
@@ -120,7 +120,7 @@ public class TtmSqueezeTests
// Low volatility: tight range bars
for (int i = 0; i < 10; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 100.5, 99.5, 100, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 100.5, 99.5, 100, 1000));
}
// With tight range (0.5 from mid), low stddev means BB should be tighter
@@ -139,7 +139,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 10; i++)
{
double offset = (i % 2 == 0) ? 10 : -10;
squeeze.Update(new TBar(baseTime + i * 60000, 100, 110 + offset, 90 + offset, 100 + offset, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 110 + offset, 90 + offset, 100 + offset, 1000));
}
Assert.True(double.IsFinite(squeeze.Momentum.Value));
@@ -154,11 +154,11 @@ public class TtmSqueezeTests
// Start with tight range (likely squeeze on)
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));
}
// Sudden volatility expansion (removed unused initialSqueezeOn variable)
squeeze.Update(new TBar(baseTime + 5 * 60000, 100, 120, 80, 115, 1000));
squeeze.Update(new TBar(baseTime + (5 * 60000), 100, 120, 80, 115, 1000));
// The squeeze state should have changed
// (The exact behavior depends on the calculation)
@@ -210,12 +210,12 @@ public class TtmSqueezeTests
// Flat then accelerating up
for (int i = 0; i < 3; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 101, 99, 100, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 101, 99, 100, 1000));
}
// Strong up move
squeeze.Update(new TBar(baseTime + 3 * 60000, 100, 115, 99, 112, 1000));
squeeze.Update(new TBar(baseTime + 4 * 60000, 112, 125, 110, 122, 1000));
squeeze.Update(new TBar(baseTime + (3 * 60000), 100, 115, 99, 112, 1000));
squeeze.Update(new TBar(baseTime + (4 * 60000), 112, 125, 110, 122, 1000));
Assert.True(squeeze.MomentumRising);
}
@@ -233,7 +233,7 @@ public class TtmSqueezeTests
// Strong uptrend with rising momentum
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 + i * 2, 105 + i * 2, 98 + i * 2, 103 + i * 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 + (i * 2), 105 + (i * 2), 98 + (i * 2), 103 + (i * 2), 1000));
}
// Should be MomentumPositive and MomentumRising = ColorCode 0 (Cyan)
@@ -252,7 +252,7 @@ public class TtmSqueezeTests
// Strong downtrend with falling momentum
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 - i * 2, 102 - i * 2, 95 - i * 2, 97 - i * 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 - (i * 2), 102 - (i * 2), 95 - (i * 2), 97 - (i * 2), 1000));
}
// Should be !MomentumPositive and !MomentumRising = ColorCode 2 (Red)
@@ -274,15 +274,15 @@ public class TtmSqueezeTests
for (int i = 0; i < 3; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
// Add new bar
squeeze.Update(new TBar(baseTime + 3 * 60000, 100, 110, 98, 108, 1000), isNew: true);
squeeze.Update(new TBar(baseTime + (3 * 60000), 100, 110, 98, 108, 1000), isNew: true);
double valueAfterNew = squeeze.Momentum.Value;
// Correct the bar with different data
squeeze.Update(new TBar(baseTime + 3 * 60000, 108, 112, 105, 92, 1000), isNew: false);
squeeze.Update(new TBar(baseTime + (3 * 60000), 108, 112, 105, 92, 1000), isNew: false);
double valueAfterCorrection = squeeze.Momentum.Value;
Assert.NotEqual(valueAfterNew, valueAfterCorrection);
@@ -296,18 +296,18 @@ public class TtmSqueezeTests
for (int i = 0; i < 3; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
// New bar
squeeze.Update(new TBar(baseTime + 3 * 60000, 100, 110, 98, 108, 1000), isNew: true);
squeeze.Update(new TBar(baseTime + (3 * 60000), 100, 110, 98, 108, 1000), isNew: true);
double firstValue = squeeze.Momentum.Value;
// Correction 1
squeeze.Update(new TBar(baseTime + 3 * 60000, 108, 115, 105, 90, 1000), isNew: false);
squeeze.Update(new TBar(baseTime + (3 * 60000), 108, 115, 105, 90, 1000), isNew: false);
// Correction 2 - same as first new bar
squeeze.Update(new TBar(baseTime + 3 * 60000, 100, 110, 98, 108, 1000), isNew: false);
squeeze.Update(new TBar(baseTime + (3 * 60000), 100, 110, 98, 108, 1000), isNew: false);
double secondValue = squeeze.Momentum.Value;
Assert.Equal(firstValue, secondValue, Precision);
@@ -355,7 +355,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
Assert.True(squeeze.IsHot);
@@ -375,7 +375,7 @@ public class TtmSqueezeTests
// Uptrend
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));
}
double upTrendMomentum = squeeze.Momentum.Value;
@@ -385,7 +385,7 @@ public class TtmSqueezeTests
// Downtrend
for (int i = 0; i < 5; i++)
{
squeeze.Update(new TBar(baseTime + i * 60000, 100 - i * 2, 102 - i * 2, 95 - i * 2, 97 - i * 2, 1000));
squeeze.Update(new TBar(baseTime + (i * 60000), 100 - (i * 2), 102 - (i * 2), 95 - (i * 2), 97 - (i * 2), 1000));
}
Assert.NotEqual(upTrendMomentum, squeeze.Momentum.Value);
@@ -404,7 +404,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 10; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
squeeze.Prime(source);
@@ -424,7 +424,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 20; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100 + i, 105 + i, 95 + i, 102 + i, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100 + i, 105 + i, 95 + i, 102 + i, 1000));
}
var result = TtmSqueeze.Batch(source);
@@ -449,7 +449,7 @@ public class TtmSqueezeTests
for (int i = 0; i < 20; i++)
{
source.Add(new TBar(baseTime + i * 60000, 100, 105, 95, 102, 1000));
source.Add(new TBar(baseTime + (i * 60000), 100, 105, 95, 102, 1000));
}
var (results, indicator) = TtmSqueeze.Calculate(source, bbPeriod: 10, bbMult: 2.0, kcPeriod: 10, kcMult: 1.5, momPeriod: 10);
@@ -303,14 +303,14 @@ public class TtmTrendIndicatorTests
// Feed historical bars
for (int i = 0; i < 5; i++)
{
indicator.HistoricalData.AddBar(now.AddMinutes(i), 100 + i * 2, 110 + i * 2, 90 + i * 2, 105 + i * 2);
indicator.HistoricalData.AddBar(now.AddMinutes(i), 100 + (i * 2), 110 + (i * 2), 90 + (i * 2), 105 + (i * 2));
indicator.ProcessUpdate(new UpdateArgs(UpdateReason.HistoricalBar));
}
// Feed new bars
for (int i = 5; i < 8; i++)
{
indicator.HistoricalData.AddBar(now.AddMinutes(i), 100 + i * 2, 110 + i * 2, 90 + i * 2, 105 + i * 2);
indicator.HistoricalData.AddBar(now.AddMinutes(i), 100 + (i * 2), 110 + (i * 2), 90 + (i * 2), 105 + (i * 2));
indicator.ProcessUpdate(new UpdateArgs(UpdateReason.NewBar));
}
@@ -81,7 +81,7 @@ public class TtmTrendBasicTests
// EMA = alpha * value + (1 - alpha) * prevEMA
// EMA = 0.2857 * 107 + 0.7143 * 100 = 30.57 + 71.43 = 102.0
double alpha = 2.0 / 7.0;
double expected = alpha * 107.0 + (1 - alpha) * 100.0;
double expected = (alpha * 107.0) + ((1 - alpha) * 100.0);
Assert.Equal(expected, result.Value, 10);
}
@@ -360,7 +360,7 @@ public class TtmTrendBarCorrectionTests
// Should use 105 instead of 110
double alpha = 2.0 / 7.0;
double expected = alpha * 105.0 + (1 - alpha) * 100.0;
double expected = (alpha * 105.0) + ((1 - alpha) * 100.0);
Assert.Equal(expected, corrected.Value, 10);
}
}
@@ -64,7 +64,7 @@ public class TtmTrendValidationTests
// Feed enough bars to warm up, then inject consistently rising prices
for (int i = 0; i < 20; i++)
{
double price = basePrice + i * 2.0;
double price = basePrice + (i * 2.0);
var bar = new TBar(
DateTime.UtcNow.AddMinutes(i),
price - 0.5, price + 0.5, price - 0.5, price, 1000);
@@ -84,7 +84,7 @@ public class TtmTrendValidationTests
// Feed enough bars to warm up, then inject consistently falling prices
for (int i = 0; i < 20; i++)
{
double price = basePrice - i * 2.0;
double price = basePrice - (i * 2.0);
var bar = new TBar(
DateTime.UtcNow.AddMinutes(i),
price + 0.5, price + 0.5, price - 0.5, price, 1000);
+6 -6
View File
@@ -172,8 +172,8 @@ public class VortexTests
// VI- = 17 / 27 ≈ 0.630
Assert.True(vortex.IsHot);
Assert.True(Math.Abs(vortex.ViPlus.Value - 32.0 / 27.0) < 0.001);
Assert.True(Math.Abs(vortex.ViMinus.Value - 17.0 / 27.0) < 0.001);
Assert.True(Math.Abs(vortex.ViPlus.Value - (32.0 / 27.0)) < 0.001);
Assert.True(Math.Abs(vortex.ViMinus.Value - (17.0 / 27.0)) < 0.001);
}
[Fact]
@@ -205,8 +205,8 @@ public class VortexTests
for (int i = 0; i < 50; i++)
{
double price = basePrice + i * 2; // Strong uptrend
var bar = new TBar(baseTime + i * 60000, price, price + 1, price - 0.5, price + 0.5, 1000);
double price = basePrice + (i * 2); // Strong uptrend
var bar = new TBar(baseTime + (i * 60000), price, price + 1, price - 0.5, price + 0.5, 1000);
vortex.Update(bar);
}
@@ -225,8 +225,8 @@ public class VortexTests
for (int i = 0; i < 50; i++)
{
double price = basePrice - i * 2; // Strong downtrend
var bar = new TBar(baseTime + i * 60000, price, price + 0.5, price - 1, price - 0.5, 1000);
double price = basePrice - (i * 2); // Strong downtrend
var bar = new TBar(baseTime + (i * 60000), price, price + 0.5, price - 1, price - 0.5, 1000);
vortex.Update(bar);
}