Files
ARM64/MarketData/MarketDataLib/MarketDataModel/Decay.cs
2025-03-25 21:42:32 -04:00

123 lines
2.6 KiB
C#
Executable File

using System;
using System.Text;
// Filename: Decay.cs
// Author:Sean Kessler
// Date:06/2003
// 11/2003 modified as Per W. Stanzl to alleviate problem with potential loss of precision
namespace MarketData.MarketDataModel
{
/// <summary>Decay - decay utility class</summary>
public class Decay
{
private int days;
private int applyDays;
private float[] decays;
private float seed;
private const float SEED=.0116F;
public Decay(int days, float factor, int applyDays)
{
CreateDecay(factor, days, applyDays);
}
public Decay(int days,float factor)
{
CreateDecay(factor,days, days);
}
public Decay(int days)
{
CreateDecay(SEED,days, days);
}
public float this[int day]
{
get{return decays[day];}
set{decays[day]=value;}
}
public int Count
{
get{return decays.Length;}
}
public void Reverse()
{
float[] inverted=new float[this.decays.Length];
for(int index=0;index<this.decays.Length;index++)
{
inverted[index]=this.decays[this.decays.Length-index-1];
}
decays=inverted;
}
public double[] ToDoubleReverse()
{
double[] decays=new double[this.decays.Length];
for(int index=0;index<this.decays.Length;index++)
decays[index]=this.decays[this.decays.Length-index-1];
return decays;
}
public void CreateDecay(int days)
{
CreateDecay(seed,days);
}
public void CreateDecay(float seed,int days)
{
CreateDecay(seed, days, applyDays);
}
public void CreateDecay(float seed,int days, int applyDays)
{
this.seed=seed;
this.days=days;
this.applyDays=applyDays;
decays=new float[days];
if (days > 0)
{
decays[0] = 1F;
if (applyDays > 0) decays[0] -= seed;
for(int index=1;index<days;index++)
{
if (index < applyDays)
decays[index]=(1.00F-seed)*decays[index-1];
else
decays[index] = decays[index-1];
}
}
PostProcess();
}
public virtual void PostProcess()
{
return;
}
public float Seed
{
get{return seed;}
}
public int Days
{
get
{
return days;
}
}
public int ApplyDays
{
get
{
return applyDays;
}
}
public new string ToString()
{
StringBuilder sb=new StringBuilder();
int length=Count;
char[] crlf={'\r','\n'};
for(int day=0;day<length;day++)
{
sb.Append(this[day].ToString()).Append(crlf);
}
return sb.ToString();
}
}
}