116 lines
4.0 KiB
C#
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; }
|
|
}
|
|
}
|
|
}
|