Files
2024-02-22 14:52:53 -05:00

53 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using MarketData.MarketDataModel;
using MarketData.Utils;
using MarketData.DataAccess;
using MarketData.Numerical;
namespace MarketData.Generator.ModelGenerators
{
public class TrueRangeGenerator
{
private TrueRangeGenerator()
{
}
// Prices : Where most recent price is at lowest index
public static TrueRangeResult GenerateAverageTrueRange(String symbol, DateTime startDate, int atrDays = 14)
{
Prices prices = PricingDA.GetPrices(symbol, startDate, atrDays + 1);
if (null == prices || prices.Count < 2 || 0 == prices[0].Close) return null;
double[] values = new double[prices.Count - 1];
for (int index = 0; index < prices.Count - 1; index++)
{
Price price = prices[index];
Price prevPrice = prices[index + 1];
double levelA = price.High - price.Low;
double levelB = Math.Abs(price.High - prevPrice.Close);
double levelC = Math.Abs(price.Low - prevPrice.Close);
values[index] = Math.Max(levelA, levelB);
values[index] = Math.Max(values[index], levelC);
}
double averageTrueRange = Numerics.Mean(ref values);
return new TrueRangeResult(averageTrueRange, (averageTrueRange / prices[0].Close) * 2.00);
}
}
public class TrueRangeResult
{
public TrueRangeResult()
{
}
public TrueRangeResult(double averageTrueRange,double shortTermVolatility)
{
AverageTrueRange=averageTrueRange;
ShortTermVolatility=shortTermVolatility;
}
public double AverageTrueRange{get;set;}
public double ShortTermVolatility{get;set;}
}
}