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