mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-25 05:48:06 +00:00
refactor structs to records, add new classes for financial calculations, implement EMA and SMA with circular buffer. Generate random financial data using GBM model. Also, test the SMA calculation with sample data.
This commit is contained in:
+51
-51
@@ -5,60 +5,60 @@ using QuanTAlib;
|
||||
namespace Pairs;
|
||||
public class DIV_Test
|
||||
{
|
||||
[Fact]
|
||||
public void DIVSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 3 };
|
||||
DIV_Series c = new(a, b);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 3 };
|
||||
DIV_Series c = new(a, b);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DIVSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
DIV_Series c = new(a, 0);
|
||||
Assert.Equal(double.PositiveInfinity, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
DIV_Series c = new(a, 0);
|
||||
Assert.Equal(double.PositiveInfinity, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DIVDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 3.0 };
|
||||
DIV_Series c = new(12.0, a);
|
||||
Assert.Equal(4.0, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 3.0 };
|
||||
DIV_Series c = new(12.0, a);
|
||||
Assert.Equal(4.0, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DIVEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(12.0);
|
||||
b.Add(2);
|
||||
Assert.Equal(6.0, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(12.0);
|
||||
b.Add(2);
|
||||
Assert.Equal(6.0, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DIVUpdatewDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
double b = 2;
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVUpdatewDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
double b = 2;
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DIVUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(2, true);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void DIVUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
DIV_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(2, true);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
}
|
||||
|
||||
+51
-51
@@ -5,60 +5,60 @@ using QuanTAlib;
|
||||
namespace Pairs;
|
||||
public class MUL_Test
|
||||
{
|
||||
[Fact]
|
||||
public void MULSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
MUL_Series c = new(a, b);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
MUL_Series c = new(a, b);
|
||||
Assert.Equal(5, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MULSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
MUL_Series c = new(a, 10.0);
|
||||
Assert.Equal(50, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
MUL_Series c = new(a, 10.0);
|
||||
Assert.Equal(50, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MULDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
MUL_Series c = new(5.0, a);
|
||||
Assert.Equal(25, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
MUL_Series c = new(5.0, a);
|
||||
Assert.Equal(25, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MULEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(2);
|
||||
b.Add(5);
|
||||
Assert.Equal(10, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(2);
|
||||
b.Add(5);
|
||||
Assert.Equal(10, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MULUpdateDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
double b = 10;
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(2, true);
|
||||
Assert.Equal(20, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULUpdateDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
double b = 10;
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(2, true);
|
||||
Assert.Equal(20, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MULUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(10, true);
|
||||
Assert.Equal(100, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void MULUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
MUL_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(10, true);
|
||||
Assert.Equal(100, c.Last().v);
|
||||
}
|
||||
}
|
||||
|
||||
+51
-51
@@ -5,60 +5,60 @@ using QuanTAlib;
|
||||
namespace Pairs;
|
||||
public class SUB_Test
|
||||
{
|
||||
[Fact]
|
||||
public void SUBSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
SUB_Series c = new(a, b);
|
||||
Assert.Equal(4, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBSeriesSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
SUB_Series c = new(a, b);
|
||||
Assert.Equal(4, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SUBSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
SUB_Series c = new(a, 10.0);
|
||||
Assert.Equal(5.0, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBSeriesDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
SUB_Series c = new(a, 10.0);
|
||||
Assert.Equal(5.0, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SUBDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
SUB_Series c = new(10.0, a);
|
||||
Assert.Equal(-5.0, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBDoubleSeries_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15.0 };
|
||||
SUB_Series c = new(10.0, a);
|
||||
Assert.Equal(-5.0, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SUBEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(7.0);
|
||||
b.Add(2);
|
||||
Assert.Equal(5.0, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBEventing_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 0 };
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(7.0);
|
||||
b.Add(2);
|
||||
Assert.Equal(5.0, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SUBUpdatewDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
double b = 10;
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(1, true);
|
||||
Assert.Equal(-9, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBUpdatewDouble_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 15 };
|
||||
double b = 10;
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(1, true);
|
||||
Assert.Equal(-9, c.Last().v);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SUBUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(0, true);
|
||||
Assert.Equal(10, c.Last().v);
|
||||
}
|
||||
[Fact]
|
||||
public void SUBUpdating_Test()
|
||||
{
|
||||
TSeries a = new() { 0, 1, 2, 3, 4, 5 };
|
||||
TSeries b = new() { 5, 4, 3, 2, 1, 1 };
|
||||
SUB_Series c = new(a, b);
|
||||
a.Add(10, true);
|
||||
b.Add(0, true);
|
||||
Assert.Equal(10, c.Last().v);
|
||||
}
|
||||
}
|
||||
|
||||
+45
-45
@@ -10,52 +10,52 @@ public class TBars_Test
|
||||
{
|
||||
TBars s = new() { (t: DateTime.Today, o: double.Epsilon, h: double.NaN, l: Double.MaxValue, c: Double.NegativeInfinity, v: Double.PositiveInfinity) };
|
||||
var tup = (t: DateTime.Today, o: double.Epsilon, h: double.NaN, l: Double.MaxValue,
|
||||
c: Double.NegativeInfinity, v: Double.PositiveInfinity);
|
||||
c: Double.NegativeInfinity, v: Double.PositiveInfinity);
|
||||
Assert.Equal(tup, s[^1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Casting_Parameters()
|
||||
{
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1, false }
|
||||
};
|
||||
Assert.Equal(0.1, s[^1].o);
|
||||
Assert.Equal(1.1, s[^1].h);
|
||||
Assert.Equal(2.1, s[^1].l);
|
||||
Assert.Equal(3.1, s[^1].c);
|
||||
Assert.Equal(4.1, s[^1].v);
|
||||
Assert.Equal(DateTime.Today, s[^1].t);
|
||||
Assert.Single(s);
|
||||
}
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1, false }
|
||||
};
|
||||
Assert.Equal(0.1, s[^1].o);
|
||||
Assert.Equal(1.1, s[^1].h);
|
||||
Assert.Equal(2.1, s[^1].l);
|
||||
Assert.Equal(3.1, s[^1].c);
|
||||
Assert.Equal(4.1, s[^1].v);
|
||||
Assert.Equal(DateTime.Today, s[^1].t);
|
||||
Assert.Single(s);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Updating_Value()
|
||||
{
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1 }
|
||||
};
|
||||
s.Add(DateTime.Today, 1.0, 1.0, 1.0, 1.0, 1.0, update: false);
|
||||
s.Add(DateTime.Today, 0.0, 0.0, 0.0, 0.0, 0.0, update: true);
|
||||
Assert.Equal(0.0, s[^1].o);
|
||||
Assert.Equal(0.0, s[^1].h);
|
||||
Assert.Equal(0.0, s[^1].l);
|
||||
Assert.Equal(0.0, s[^1].c);
|
||||
Assert.Equal(0.0, s[^1].v);
|
||||
Assert.Equal(2, s.Count);
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1 }
|
||||
};
|
||||
s.Add(DateTime.Today, 1.0, 1.0, 1.0, 1.0, 1.0, update: false);
|
||||
s.Add(DateTime.Today, 0.0, 0.0, 0.0, 0.0, 0.0, update: true);
|
||||
Assert.Equal(0.0, s[^1].o);
|
||||
Assert.Equal(0.0, s[^1].h);
|
||||
Assert.Equal(0.0, s[^1].l);
|
||||
Assert.Equal(0.0, s[^1].c);
|
||||
Assert.Equal(0.0, s[^1].v);
|
||||
Assert.Equal(2, s.Count);
|
||||
}
|
||||
[Fact]
|
||||
public void Extracting_TSeries()
|
||||
{
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1 },
|
||||
{ DateTime.Today, 2.1, 3.1, 4.1, 5.1, 6.1 }
|
||||
};
|
||||
TBars s = new()
|
||||
{
|
||||
{ DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1 },
|
||||
{ DateTime.Today, 2.1, 3.1, 4.1, 5.1, 6.1 }
|
||||
};
|
||||
|
||||
TSeries t = s.Open;
|
||||
TSeries t = s.Open;
|
||||
Assert.Equal(t.t, s.Open.t);
|
||||
Assert.Equal(t.v, s.Open.v);
|
||||
|
||||
@@ -91,22 +91,22 @@ public class TBars_Test
|
||||
Assert.Equal(t.t, s.HLC3.t);
|
||||
Assert.Equal(t.v, s.HLC3.v);
|
||||
|
||||
t = s.OHLC4;
|
||||
Assert.Equal(t.t, s.OHLC4.t);
|
||||
Assert.Equal(t.v, s.OHLC4.v);
|
||||
t = s.OHLC4;
|
||||
Assert.Equal(t.t, s.OHLC4.t);
|
||||
Assert.Equal(t.v, s.OHLC4.v);
|
||||
|
||||
t = s.HLCC4;
|
||||
Assert.Equal(t.t, s.HLCC4.t);
|
||||
Assert.Equal(t.v, s.HLCC4.v);
|
||||
}
|
||||
t = s.HLCC4;
|
||||
Assert.Equal(t.t, s.HLCC4.t);
|
||||
Assert.Equal(t.v, s.HLCC4.v);
|
||||
}
|
||||
[Fact]
|
||||
public void Broadcasting_Events()
|
||||
{
|
||||
TBars s = new() { (DateTime.Today, 2.1, 3.1, 4.1, 5.1, 6.1) };
|
||||
TSeries t = new();
|
||||
s.Close.Pub += t.Sub;
|
||||
s.Add(DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1, false);
|
||||
Assert.Equal(s.Close.v, t.v);
|
||||
Assert.Equal(s.Close.Count, t.Count);
|
||||
}
|
||||
TBars s = new() { (DateTime.Today, 2.1, 3.1, 4.1, 5.1, 6.1) };
|
||||
TSeries t = new();
|
||||
s.Close.Pub += t.Sub;
|
||||
s.Add(DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1, false);
|
||||
Assert.Equal(s.Close.v, t.v);
|
||||
Assert.Equal(s.Close.Count, t.Count);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user