Files
Miha Kralj 060649192f docs: remove C# Implementation Considerations sections, clean up temp scripts, reorganize test files
- Remove 'C# Implementation Considerations' sections from 34 indicator .md files
- Delete 29 temp PowerShell scripts (_fix_mojibake.ps1, _hex_scan.ps1, etc.)
- Move test files into tests/ subdirectories for consistent project structure
- Add trader-focused bullet points to indicator documentation
2026-03-12 12:34:16 -07:00

99 lines
2.9 KiB
C#

using Xunit.Abstractions;
namespace QuanTAlib.Tests;
public class DmxValidationTests
{
private readonly ITestOutputHelper _output;
public DmxValidationTests(ITestOutputHelper output)
{
_output = output;
}
[Fact]
public void Validate_Consistency_UpdateVsSeries()
{
var gbm = new GBM();
var bars = gbm.Fetch(1000, DateTime.UtcNow.Ticks, TimeSpan.FromMinutes(1));
var dmx = new Dmx(14);
var streamResult = new TSeries();
for (int i = 0; i < bars.Count; i++)
{
streamResult.Add(dmx.Update(bars[i]));
}
var dmx2 = new Dmx(14);
var seriesResult = dmx2.Update(bars);
Assert.Equal(streamResult.Count, seriesResult.Count);
for (int i = 0; i < bars.Count; i++)
{
Assert.Equal(streamResult[i].Value, seriesResult[i].Value, ValidationHelper.DefaultTolerance);
}
_output.WriteLine("DMX Update vs Series validated successfully");
}
[Fact]
public void Validate_Range()
{
var gbm = new GBM();
var bars = gbm.Fetch(1000, DateTime.UtcNow.Ticks, TimeSpan.FromMinutes(1));
var dmx = new Dmx(14);
for (int i = 0; i < bars.Count; i++)
{
var val = dmx.Update(bars[i]).Value;
Assert.True(val >= -100.0 && val <= 100.0, $"DMX value {val} out of range [-100, 100]");
}
_output.WriteLine("DMX range validated successfully");
}
[Fact]
public void Validate_Trend_Direction()
{
// Create a synthetic uptrend
var bars = new TBarSeries();
var time = DateTime.UtcNow;
double price = 100;
for (int i = 0; i < 100; i++)
{
bars.Add(time, price, price + 2, price - 1, price + 1, 1000);
time = time.AddMinutes(1);
price += 1.0; // Steady uptrend
}
var dmx = new Dmx(14);
var result = dmx.Update(bars);
// Check the last few values, they should be positive
for (int i = 80; i < 100; i++)
{
Assert.True(result[i].Value > 0, $"DMX should be positive in uptrend at index {i}, got {result[i].Value}");
}
// Create a synthetic downtrend
bars = new TBarSeries();
time = DateTime.UtcNow;
price = 200;
for (int i = 0; i < 100; i++)
{
bars.Add(time, price, price + 1, price - 2, price - 1, 1000);
time = time.AddMinutes(1);
price -= 1.0; // Steady downtrend
}
dmx = new Dmx(14);
result = dmx.Update(bars);
// Check the last few values, they should be negative
for (int i = 80; i < 100; i++)
{
Assert.True(result[i].Value < 0, $"DMX should be negative in downtrend at index {i}, got {result[i].Value}");
}
_output.WriteLine("DMX trend direction validated successfully");
}
}