Merge branch 'dev'

This commit is contained in:
Miha Kralj
2024-09-30 09:07:08 -07:00
95 changed files with 7982 additions and 2375 deletions
-883
View File
@@ -1,883 +0,0 @@
using Xunit;
using QuanTAlib;
public class Consistency
{
Random rnd;
int series_len = 1000;
int corrections = 100;
public Consistency()
{ //constructor
rnd = new((int)DateTime.Now.Ticks);
}
[Fact]
public void CanUpdate()
{
GbmFeed gbm = new();
TSeries input = new(gbm.Close);
TSeries output = new(input);
gbm.Add(10000);
Assert.Equal(input.Count, output.Count);
for (int i = 0; i < input.Count; i++)
{
Assert.Equal(input[i].v, output[i].v);
}
}
[Fact]
public void Alma_isNew()
{
int p = (int)rnd.Next(2, 100);
double offset = rnd.Next();
double sigma = rnd.Next(1, 100);
Alma ma1 = new(period: p, offset: offset, sigma: sigma);
Alma ma2 = new(period: p, offset: offset, sigma: sigma);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Convolution_isNew()
{
Convolution ma1 = new(new double[] { 1.0, 2, 3, 2, 1 });
Convolution ma2 = new(new double[] { 1.0, 2, 3, 2, 1 });
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Dema_isNew()
{
int p = (int)rnd.Next(2, 100);
Dema ma1 = new(p);
Dema ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Dsma_isNew()
{
int p = (int)rnd.Next(2, 100);
Dsma ma1 = new(p);
Dsma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Dwma_isNew()
{
int p = (int)rnd.Next(2, 100);
Dwma ma1 = new(p);
Dwma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void EmaSma_isNew()
{
int p = (int)rnd.Next(2, 100);
Ema ma1 = new(p, useSma: true);
Ema ma2 = new(p, useSma: true);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Ema_isNew()
{
int p = (int)rnd.Next(2, 100);
Ema ma1 = new(p, useSma: false);
Ema ma2 = new(p, useSma: false);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Sma_isNew()
{
int p = (int)rnd.Next(2, 100);
Sma ma1 = new(p);
Sma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Epma_isNew()
{
int p = (int)rnd.Next(2, 100);
Epma ma1 = new(p);
Epma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Frama_isNew()
{
int p = (int)rnd.Next(2, 100);
Frama ma1 = new(p);
Frama ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Fwma_isNew()
{
int p = (int)rnd.Next(2, 100);
Fwma ma1 = new(p);
Fwma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Gma_isNew()
{
int p = (int)rnd.Next(2, 100);
Gma ma1 = new(p);
Gma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Hma_isNew()
{
int p = (int)rnd.Next(2, 100);
Hma ma1 = new(p);
Hma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Hwma_isNew()
{
int p = (int)rnd.Next(2, 100);
Hwma ma1 = new(p);
Hwma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
/*
[Fact]
public void Jma_isNew()
{
int p = (int)rnd.Next(2, 100);
Jma ma1 = new(p);
Jma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
//Assert.Equal(ma1.Value, ma2.Value);
Assert.True(ma1.Value == ma2.Value, $"Assertion failed at p={p}, Value={item1.Value}. ma1.Value={ma1.Value}, ma2.Value={ma2.Value}");
}
}
*/
[Fact]
public void Kama_isNew()
{
int p = (int)rnd.Next(2, 100);
Kama ma1 = new(p);
Kama ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Ltma_isNew()
{
int p = rnd.Next(0, 1);
Ltma ma1 = new(p);
Ltma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Mama_isNew()
{
int p = rnd.Next(0, 1);
Mama ma1 = new(p, p * 0.1);
Mama ma2 = new(p, p * 0.1);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
Assert.True(ma1.Value == ma2.Value, $"Assertion failed for p={p}, i={i}. Expected {ma1.Value} but got {ma2.Value}.");
}
}
[Fact]
public void Mgdi_isNew()
{
int p = (int)rnd.Next(2, 100);
Mgdi ma1 = new(p);
Mgdi ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Mma_isNew()
{
int p = (int)rnd.Next(2, 100);
Mma ma1 = new(p);
Mma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Qema_isNew()
{
int p = (int)rnd.Next(2, 100);
Qema ma1 = new();
Qema ma2 = new();
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Rema_isNew()
{
int p = (int)rnd.Next(2, 100);
Rema ma1 = new(p);
Rema ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Rma_isNew()
{
int p = (int)rnd.Next(2, 100);
Rma ma1 = new(p);
Rma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Sinema_isNew()
{
int p = (int)rnd.Next(2, 100);
Sinema ma1 = new(p);
Sinema ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Smma_isNew()
{
int p = (int)rnd.Next(2, 100);
Smma ma1 = new(p);
Smma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void T3_isNew()
{
int p = (int)rnd.Next(2, 100);
T3 ma1 = new(p);
T3 ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Tema_isNew()
{
int p = (int)rnd.Next(2, 100);
Tema ma1 = new(p);
Tema ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Trima_isNew()
{
int p = (int)rnd.Next(2, 100);
Trima ma1 = new(p);
Trima ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Vidya_isNew()
{
int p = (int)rnd.Next(2, 100);
Vidya ma1 = new(p);
Vidya ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Wma_isNew()
{
int p = (int)rnd.Next(2, 100);
Wma ma1 = new(p);
Wma ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Zlema_isNew()
{
int p = (int)rnd.Next(2, 100);
Zlema ma1 = new(p);
Zlema ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Entropy_isNew()
{
int p = (int)rnd.Next(2, 100);
Entropy ma1 = new(p);
Entropy ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Kurtosis_isNew()
{
int p = (int)rnd.Next(2, 100);
Kurtosis ma1 = new(p);
Kurtosis ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Max_isNew()
{
int p = (int)rnd.Next(2, 100);
Max ma1 = new(p, 0.01);
Max ma2 = new(p, 0.01);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Min_isNew()
{
int p = (int)rnd.Next(2, 100);
Min ma1 = new(p, 0.01);
Min ma2 = new(p, 0.01);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Med_isNew()
{
int p = (int)rnd.Next(2, 100);
Median ma1 = new(p);
Median ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Mode_isNew()
{
int p = (int)rnd.Next(2, 100);
Mode ma1 = new(p);
Mode ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Percentile_isNew()
{
int p = (int)rnd.Next(2, 100);
Percentile ma1 = new(p, 50);
Percentile ma2 = new(p, 50);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Skew_isNew()
{
int p = (int)rnd.Next(2, 100);
Skew ma1 = new(p);
Skew ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Stddev_isNew()
{
int p = (int)rnd.Next(2, 100);
Stddev ma1 = new(p);
Stddev ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Variance_isNew()
{
int p = (int)rnd.Next(2, 100);
Variance ma1 = new(p);
Variance ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
[Fact]
public void Zscore_isNew()
{
int p = (int)rnd.Next(2, 100);
Zscore ma1 = new(p);
Zscore ma2 = new(p);
for (int i = 0; i < series_len; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
ma1.Calc(item1);
for (int j = 0; j < corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
ma1.Calc(item1);
}
ma2.Calc(new TValue(item1.Time, item1.Value, IsNew: true));
Assert.Equal(ma1.Value, ma2.Value);
}
}
}
+58
View File
@@ -0,0 +1,58 @@
using Xunit;
using System.Reflection;
namespace QuanTAlib
{
public class BarIndicatorTests
{
private Random rnd;
private const int SeriesLen = 1000;
private const int Corrections = 100;
public BarIndicatorTests()
{
rnd = new Random((int)DateTime.Now.Ticks);
}
private static readonly iTValue[] indicators = new iTValue[]
{
new Atr(period: 14),
};
[Theory]
[MemberData(nameof(GetIndicators))]
public void IndicatorIsNew(iTValue indicator)
{
var indicator1 = indicator;
var indicator2 = indicator;
MethodInfo calcMethod = indicator.GetType().GetMethod("Calc")!;
if (calcMethod == null)
{
throw new Exception($"Calc method not found for indicator type: {indicator.GetType().Name}");
}
for (int i = 0; i < SeriesLen; i++)
{
TBar item1 = new(Time: DateTime.Now, Open: rnd.Next(-100, 100), High: rnd.Next(-100, 100), Low: rnd.Next(-100, 100), Close: rnd.Next(-100, 100), Volume: rnd.Next(-1000, 1000), IsNew: true);
calcMethod.Invoke(indicator1, new object[] { item1 });
for (int j = 0; j < Corrections; j++)
{
item1 = new(Time: DateTime.Now, Open: rnd.Next(-100, 100), High: rnd.Next(-100, 100), Low: rnd.Next(-100, 100), Close: rnd.Next(-100, 100), Volume: rnd.Next(-1000, 1000), IsNew: false);
calcMethod.Invoke(indicator1, new object[] { item1 });
}
var item2 = new TBar (item1.Time, item1.Open, item1.High, item1.Low, item1.Close, item1.Volume , IsNew: true);
calcMethod.Invoke(indicator2, new object[] { item2 });
Assert.Equal(indicator1.Value, indicator2.Value);
}
}
public static IEnumerable<object[]> GetIndicators()
{
return indicators.Select(indicator => new object[] { indicator });
}
}
}
+98
View File
@@ -0,0 +1,98 @@
using Xunit;
using System.Reflection;
namespace QuanTAlib
{
public class IndicatorTests
{
private Random rnd;
private const int SeriesLen = 1000;
private const int Corrections = 100;
public IndicatorTests()
{
rnd = new Random((int)DateTime.Now.Ticks);
}
private static readonly iTValue[] indicators =
[
new Ema(period: 10, useSma: true),
new Alma(period: 14, offset: 0.85, sigma: 6),
new Afirma(periods: 4, taps: 4, window: Afirma.WindowType.Blackman),
new Convolution(new double[] { 1.0, 2, 3, 2, 1 }),
new Dema(period: 14),
new Dsma(period: 14),
new Dwma(period: 14),
new Epma(period: 14),
new Frama(period: 14),
new Fwma(period: 14),
new Gma(period: 14),
new Hma(period: 14),
new Hwma(period: 14),
new Kama(period: 14),
new Mama(fastLimit: 0.5, slowLimit: 0.05),
new Mgdi(period: 14),
new Mma(period: 14),
new Qema(),
new Rema(period: 14),
new Rma(period: 14),
new Sinema(period: 14),
new Sma(period: 14),
new Smma(period: 14),
new T3(period: 14),
new Tema(period: 14),
new Trima(period: 14),
new Vidya(shortPeriod: 14, longPeriod: 30, alpha: 0.2),
new Wma(period: 14),
new Zlema(period: 14),
new Entropy(period: 14),
new Kurtosis(period: 14),
new Max(period: 14, decay: 0.01),
new Min(period: 14, decay: 0.01),
new Median(period: 14),
new Mode(period: 14),
new Percentile(period: 14, percent: 50),
new Skew(period: 14),
new Stddev(period: 14),
new Variance(period: 14),
new Zscore(period: 14)
];
[Theory]
[MemberData(nameof(GetIndicators))]
public void IndicatorIsNew(iTValue indicator)
{
var indicator1 = indicator;
var indicator2 = indicator;
MethodInfo calcMethod = indicator.GetType().GetMethod("Calc")!;
if (calcMethod == null)
{
throw new Exception($"Calc method not found for indicator type: {indicator.GetType().Name}");
}
for (int i = 0; i < SeriesLen; i++)
{
TValue item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: true);
calcMethod.Invoke(indicator1, new object[] { item1 });
for (int j = 0; j < Corrections; j++)
{
item1 = new(Time: DateTime.Now, Value: rnd.Next(-100, 100), IsNew: false);
calcMethod.Invoke(indicator1, new object[] { item1 });
}
var item2 = new TValue(item1.Time, item1.Value, IsNew: true);
calcMethod.Invoke(indicator2, new object[] { item2 });
Assert.Equal(indicator1.Value, indicator2.Value);
}
}
public static IEnumerable<object[]> GetIndicators()
{
return indicators.Select(indicator => new object[] { indicator });
}
}
}
+20
View File
@@ -321,4 +321,24 @@ public class SkenderTests
}
}
[Fact]
public void ATR()
{
for (int run = 0; run < iterations; run++)
{
period = rnd.Next(50) + 5;
Atr ma = new(period: period);
TSeries QL = new();
foreach (TBar item in bars) { QL.Add(ma.Calc(item)); }
var SK = quotes.GetAtr(lookbackPeriods: period).Select(i => i.Atr.Null2NaN()!);
Assert.Equal(QL.Length, QL.Length);
for (int i = QL.Length - 1; i > period +500; i--)
{
Assert.InRange(SK.ElementAt(i) - QL[i].Value, -range, range);
}
}
}
}