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

116 lines
4.0 KiB
C#

using System;
using System.Text;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using MarketData.DataAccess;
using MarketData.Numerical;
namespace MarketData.MarketDataModel
{
public class StickerPrice
{
private double marginOfSafety = double.NaN;
private double marginOfSafety80Pcnt = double.NaN;
private double lowPE = double.NaN;
private double trailingPE = double.NaN;
private double averageLowTrailing = double.NaN;
private double currentStockEstimatePrice = double.NaN;
private double priceEstimate10y = double.NaN;
private double todaysPriceForRequiredReturn = double.NaN;
private double averageBVPSGrowth = double.NaN;
private ReturnItems bvpsItems = null;
// public StickerPrice(String symbol, int growthYears = -1)
public StickerPrice(String symbol,double bvpsGrowthOverride)
{
try
{
double requiredReturn = 15.00 / 100.00;
// TimeSeriesCollection bookValuePerShareCollection = HistoricalDA.GetTimeSeries(symbol, TimeSeriesElement.ElementType.BVPS);
Fundamental fundamental = FundamentalDA.GetFundamental(symbol);
// bvpsItems = new ReturnItems();
// averageBVPSGrowth = Numerics.AverageReturnWithSpline(bookValuePerShareCollection,bvpsItems);
averageBVPSGrowth=bvpsGrowthOverride;
lowPE = fundamental.EPS * 2.00;
trailingPE = fundamental.TrailingPE;
averageLowTrailing = (lowPE + trailingPE) / 2.00;
currentStockEstimatePrice = fundamental.EPS * averageLowTrailing;
priceEstimate10y = currentStockEstimatePrice * Math.Pow((1.00 + averageBVPSGrowth), 10.00);
todaysPriceForRequiredReturn = priceEstimate10y / Math.Pow((1.00 + requiredReturn), 10.00);
marginOfSafety = todaysPriceForRequiredReturn * .50;
marginOfSafety80Pcnt = todaysPriceForRequiredReturn * .80;
}
catch (Exception)
{
}
}
public StickerPrice(String symbol)
{
try
{
double requiredReturn = 15.00 / 100.00;
TimeSeriesCollection bookValuePerShareCollection = HistoricalDA.GetTimeSeries(symbol, TimeSeriesElement.ElementType.BVPS);
Fundamental fundamental = FundamentalDA.GetFundamental(symbol);
bvpsItems = new ReturnItems();
averageBVPSGrowth = Numerics.AverageReturnWithSpline(bookValuePerShareCollection,bvpsItems);
//if (-1 == growthYears) averageGrowth = Numerics.AverageReturn(ref bookValuesPerShareSeries);
//else averageGrowth = Numerics.AverageReturnTop(ref bookValuesPerShareSeries, growthYears);
lowPE = fundamental.EPS * 2.00;
trailingPE = fundamental.TrailingPE;
averageLowTrailing = (lowPE + trailingPE) / 2.00;
currentStockEstimatePrice = fundamental.EPS * averageLowTrailing;
priceEstimate10y = currentStockEstimatePrice * Math.Pow((1.00 + averageBVPSGrowth), 10.00);
todaysPriceForRequiredReturn = priceEstimate10y / Math.Pow((1.00 + requiredReturn), 10.00);
marginOfSafety = todaysPriceForRequiredReturn * .50;
marginOfSafety80Pcnt = todaysPriceForRequiredReturn * .80;
}
catch (Exception)
{
}
}
public ReturnItems BVPSItems
{
get
{
return bvpsItems;
}
}
public double AverageBVPSGrowth
{
get { return averageBVPSGrowth; }
}
public double MarginOfSafety
{
get { return marginOfSafety; }
}
public double MarginOfSafety80Pcnt
{
get { return marginOfSafety80Pcnt; }
}
public double LowPE
{
get { return lowPE; }
}
public double TrailingPE
{
get { return trailingPE; }
}
public double AverageLowTrailing
{
get { return averageLowTrailing; }
}
public double CurrentStockEstimatePrice
{
get { return currentStockEstimatePrice; }
}
public double PriceEstimate10y
{
get { return priceEstimate10y; }
}
public double TodaysPriceForRequiredReturn
{
get { return todaysPriceForRequiredReturn; }
}
}
}