style patterns

This commit is contained in:
Miha Kralj
2026-01-25 16:01:45 -08:00
parent 2836f253c4
commit e59665c8f0
399 changed files with 6892 additions and 1323 deletions
+33 -8
View File
@@ -137,8 +137,15 @@ public class MamaTests
// Case 2: Update in chunks
var chunk1 = new TSeries();
var chunk2 = new TSeries();
for (int i = 0; i < 25; i++) chunk1.Add(data[i]);
for (int i = 25; i < 50; i++) chunk2.Add(data[i]);
for (int i = 0; i < 25; i++)
{
chunk1.Add(data[i]);
}
for (int i = 25; i < 50; i++)
{
chunk2.Add(data[i]);
}
mama2.Update(chunk1);
var result2 = mama2.Update(chunk2);
@@ -239,7 +246,10 @@ public class MamaTests
const int count = 100;
var data = new double[count];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < count; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < count; i++)
{
data[i] = gbm.Next().Close;
}
var output = new double[count];
Mama.Calculate(data, output);
@@ -309,7 +319,10 @@ public class MamaTests
{
var data = new double[60];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < 60; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < 60; i++)
{
data[i] = gbm.Next().Close;
}
// 1. Prime with all but last value
var mamaPrimed = new Mama();
@@ -336,7 +349,10 @@ public class MamaTests
int count = 100;
var data = new double[count];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < count; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < count; i++)
{
data[i] = gbm.Next().Close;
}
var mamaOutput = new double[count];
var famaOutput = new double[count];
@@ -357,7 +373,10 @@ public class MamaTests
int count = 100;
var data = new double[count];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < count; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < count; i++)
{
data[i] = gbm.Next().Close;
}
var output1 = new double[count];
var output2 = new double[count];
@@ -394,7 +413,10 @@ public class MamaTests
int count = 10;
var data = new double[count];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < count; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < count; i++)
{
data[i] = gbm.Next().Close;
}
// Get values from span calculation
var mamaOutput = new double[count];
@@ -418,7 +440,10 @@ public class MamaTests
int count = 100;
var data = new double[count];
var gbm = new GBM(startPrice: 100, seed: 42);
for (int i = 0; i < count; i++) data[i] = gbm.Next().Close;
for (int i = 0; i < count; i++)
{
data[i] = gbm.Next().Close;
}
// 1. Streaming Mode (instance method)
var mama = new Mama();
+55 -12
View File
@@ -111,8 +111,16 @@ public sealed class Mama : AbstractBase
return 0.0; // Return neutral angle for invalid inputs
}
while (angle <= -Math.PI) angle += TwoPi;
while (angle > Math.PI) angle -= TwoPi;
while (angle <= -Math.PI)
{
angle += TwoPi;
}
while (angle > Math.PI)
{
angle -= TwoPi;
}
return angle;
}
@@ -192,11 +200,25 @@ public sealed class Mama : AbstractBase
double periodCap = _p_state.Period * 1.5;
double periodFloor = _p_state.Period * 0.67;
if (period > periodCap) period = periodCap;
if (period < periodFloor) period = periodFloor;
if (period > periodCap)
{
period = periodCap;
}
if (period < MinPeriod) period = MinPeriod;
if (period > MaxPeriod) period = MaxPeriod;
if (period < periodFloor)
{
period = periodFloor;
}
if (period < MinPeriod)
{
period = MinPeriod;
}
if (period > MaxPeriod)
{
period = MaxPeriod;
}
// Smooth Period (using FMA)
_state.Period = Math.FusedMultiplyAdd(SmoothCoef, period, SmoothPrev * _p_state.Period);
@@ -248,7 +270,10 @@ public sealed class Mama : AbstractBase
public override TSeries Update(TSeries source)
{
if (source.Count == 0) return new TSeries([], []);
if (source.Count == 0)
{
return new TSeries([], []);
}
int len = source.Count;
var v = new List<double>(len);
@@ -307,7 +332,11 @@ public sealed class Mama : AbstractBase
throw new ArgumentOutOfRangeException(nameof(fastLimit), "FastLimit must be > SlowLimit");
}
if (source.Length == 0) return;
if (source.Length == 0)
{
return;
}
if (output.Length < source.Length)
{
throw new ArgumentOutOfRangeException(nameof(output), "Output buffer must be at least as large as the input buffer.");
@@ -427,11 +456,25 @@ public sealed class Mama : AbstractBase
double periodCap = p_period * 1.5;
double periodFloor = p_period * 0.67;
if (newPeriod > periodCap) newPeriod = periodCap;
if (newPeriod < periodFloor) newPeriod = periodFloor;
if (newPeriod > periodCap)
{
newPeriod = periodCap;
}
if (newPeriod < MinPeriod) newPeriod = MinPeriod;
if (newPeriod > MaxPeriod) newPeriod = MaxPeriod;
if (newPeriod < periodFloor)
{
newPeriod = periodFloor;
}
if (newPeriod < MinPeriod)
{
newPeriod = MinPeriod;
}
if (newPeriod > MaxPeriod)
{
newPeriod = MaxPeriod;
}
// Smooth Period (using FMA)
period = Math.FusedMultiplyAdd(SmoothCoef, newPeriod, SmoothPrev * p_period);