mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-30 18:47:42 +00:00
060649192f
- 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
99 lines
2.9 KiB
C#
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");
|
|
}
|
|
}
|