mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-06 04:57:44 +00:00
67 lines
2.3 KiB
Plaintext
67 lines
2.3 KiB
Plaintext
#!csharp
|
|
|
|
#r "nuget:QuanTAlib;"
|
|
using QuanTAlib;
|
|
|
|
#!csharp
|
|
|
|
public class GBM1_Feed : TBars
|
|
{
|
|
static double seed;
|
|
readonly double drift, volatility;
|
|
public GBM1_Feed(int Bars = 252, double Volatility = 1.0, double Drift = 0.05, double Seed = 100.0) {
|
|
seed = Seed;
|
|
volatility = Volatility*0.01;
|
|
drift = Drift*0.01;
|
|
for (int i = 0; i <Bars; i++) {
|
|
DateTime Timestamp = DateTime.Today.AddDays(i - Bars);
|
|
this.Add(Timestamp);
|
|
}
|
|
}
|
|
|
|
public void Add(DateTime timestamp, bool update = false) {
|
|
double Open = GBM_value(seed, volatility*volatility, drift);
|
|
double Close = GBM_value(Open, volatility, drift);
|
|
|
|
double OCMax = Math.Max(Open,Close);
|
|
double High = (GBM_value(seed, volatility*0.5, 0));
|
|
High = (High<OCMax)? 2*OCMax-High : High;
|
|
|
|
double OCMin = Math.Min(Open,Close);
|
|
double Low = (GBM_value(seed, volatility*0.5, 0));
|
|
Low = (Low>OCMin)? 2*OCMin-Low : Low;
|
|
|
|
double Volume = GBM_value(seed*10, volatility*2, Drift:0);
|
|
|
|
base.Add((timestamp, Open, High, Low, Close, Volume), update);
|
|
seed = Close;
|
|
}
|
|
|
|
private static double GBM_value (double Seed, double Volatility, double Drift) {
|
|
Random rnd = new((int)(DateTime.UtcNow.Ticks));
|
|
double U1 = 1.0-rnd.NextDouble();
|
|
double U2 = 1.0-rnd.NextDouble();
|
|
double Z = Math.Sqrt(-2.0 * Math.Log(U1)) * Math.Sin(2.0 * Math.PI * U2);
|
|
return Seed * Math.Exp( Drift - (Volatility*Volatility*0.5) + Volatility * Z);
|
|
}
|
|
}
|
|
|
|
#!csharp
|
|
|
|
GBM1_Feed tqqq = new(30);
|
|
TSeries data = tqqq.Close;
|
|
SMA_Series sma = new(data, 5, false);
|
|
MED_Series med = new(data, 5);
|
|
WMA_Series wma = new(data, 5, false);
|
|
EMA_Series ema = new(data, 5, false);
|
|
HMA_Series hma = new(data, 5, false);
|
|
DEMA_Series dema = new(data, 5, false);
|
|
TEMA_Series tema = new(data, 5, false);
|
|
ZLEMA_Series zlema = new(data, 5, false);
|
|
JMA_Series jma = new(data, 10, 0.0, false);
|
|
|
|
Console.WriteLine($"date\t\t Value\t SMA\t MED\t WMA\t EMA\t HMA\t DEMA\t TEMA \tZLEMA\t JMA");
|
|
for (int i=0; i < data.Length; i++) {
|
|
Console.Write($"{data[i].t:yyyy-MM-dd}\t {data[i].v:f2}\t {sma[i].v:f2}\t {med[i].v:f2}\t {wma[i].v:f2}\t {ema[i].v:f2}\t {hma[i].v:f2}\t {dema[i].v:f2}\t {tema[i].v:f2}\t {zlema[i].v:f2}\t {jma[i].v:f2}\n");
|
|
}
|