Add test for RSI Divergence
This commit is contained in:
58
src/Managing.Domain.Tests/Indicators/RsiDivergenceTests.cs
Normal file
58
src/Managing.Domain.Tests/Indicators/RsiDivergenceTests.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using FluentAssertions;
|
||||
using Managing.Domain.Strategies.Signals;
|
||||
using Xunit;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Domain.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for RSI Divergence indicator signal generation.
|
||||
/// Tests verify that the indicator produces a consistent number of signals
|
||||
/// when run on the same historical data.
|
||||
/// </summary>
|
||||
public class RsiDivergenceTests : RunIndicatorsBase
|
||||
{
|
||||
[Fact]
|
||||
public void RsiDivergenceIndicator_Should_Generate_Consistent_Signal_Count()
|
||||
{
|
||||
// Arrange
|
||||
var rsiIndicator = new RsiDivergenceIndicatorBase("RSI_Divergence_Test", 14);
|
||||
|
||||
// Act
|
||||
var signals = RunIndicatorAndGetSignals(rsiIndicator);
|
||||
var signalCount = signals.Count;
|
||||
|
||||
// Assert
|
||||
// The RSI divergence indicator should generate a consistent number of signals
|
||||
// when run on the same historical ETH data.
|
||||
// This test ensures that any changes to the indicator logic don't accidentally
|
||||
// change the signal generation behavior.
|
||||
signalCount.Should().BeGreaterThan(0, "RSI divergence indicator should generate signals from historical data");
|
||||
signalCount.Should().Be(11, "RSI divergence indicator should generate exactly 11 signals with the current ETH dataset");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RsiDivergenceIndicator_Should_Generate_Valid_Signals()
|
||||
{
|
||||
// Arrange
|
||||
var rsiIndicator = new RsiDivergenceIndicatorBase("RSI_Divergence_Test", 14);
|
||||
|
||||
// Act
|
||||
var signals = RunIndicatorAndGetSignals(rsiIndicator);
|
||||
|
||||
// Assert
|
||||
signals.Should().NotBeNull();
|
||||
signals.Should().NotBeEmpty();
|
||||
|
||||
// Verify each signal has required properties
|
||||
foreach (var signal in signals)
|
||||
{
|
||||
signal.Should().NotBeNull();
|
||||
signal.Date.Should().NotBe(default(DateTime));
|
||||
// Enums cannot be null by definition, so we just verify they have valid values
|
||||
signal.Direction.Should().BeOneOf(TradeDirection.Long, TradeDirection.Short);
|
||||
signal.Ticker.Should().NotBe(Ticker.Unknown);
|
||||
signal.Confidence.Should().BeOneOf(Confidence.Low, Confidence.Medium, Confidence.High);
|
||||
}
|
||||
}
|
||||
}
|
||||
33
src/Managing.Domain.Tests/Indicators/RunIndicatorsBase.cs
Normal file
33
src/Managing.Domain.Tests/Indicators/RunIndicatorsBase.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Managing.Core;
|
||||
using Managing.Domain.Candles;
|
||||
using Managing.Domain.Indicators;
|
||||
using Managing.Domain.Strategies;
|
||||
|
||||
namespace Managing.Domain.Tests;
|
||||
|
||||
public class RunIndicatorsBase
|
||||
{
|
||||
protected readonly List<Candle> TestCandles;
|
||||
|
||||
public RunIndicatorsBase()
|
||||
{
|
||||
// Load the ETH Fifteen Minutes candles data for indicator testing
|
||||
TestCandles = FileHelpers.ReadJson<List<Candle>>("Data/ETH-FifteenMinutes-candles-20:44:15 +00:00-.json");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs an indicator on the test candles and returns the signals generated
|
||||
/// </summary>
|
||||
/// <param name="indicator">The indicator to run</param>
|
||||
/// <returns>List of signals generated by the indicator</returns>
|
||||
protected List<LightSignal> RunIndicatorAndGetSignals(IndicatorBase indicator)
|
||||
{
|
||||
// Convert list to HashSet as expected by the Run method
|
||||
var candleSet = TestCandles.ToHashSet();
|
||||
|
||||
// Run the indicator
|
||||
var signals = indicator.Run(candleSet);
|
||||
|
||||
return signals ?? new List<LightSignal>();
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,9 @@
|
||||
<None Update="Data\ETH-FifteenMinutes-candles-large.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="Data\ETH-FifteenMinutes-candles-20:44:15 +00:00-.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user