mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-20 03:28:05 +00:00
Merge branch 'dev'
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user