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

318 lines
9.4 KiB
C#

using System;
using System.Text;
using System.Collections.Generic;
using MarketData.Utils;
namespace MarketData.MarketDataModel
{
public class Enhancements
{
public bool DebtLoad { get; set; }
public double ROIC { get; set; }
public double ROICGrowth { get; set; }
public double EPSGrowth { get; set; }
public double RevenueGrowth { get; set; }
public double BVPS { get; set; }
public double PBVPS { get; set; }
public double EPS { get; set; }
public double PE { get; set; }
public double PEG { get; set; }
public double MOS { get; set; }
public double MOS80 { get; set; }
public double IntrinsicValue { get; set; } // Benjamin Graham original intrinsic value
public double IntrinsicValueRevised { get; set; } // Benjamin Graham revised instrinsic value (uses the yield on 20 year corporate bonds
public double RGVIntrinsic { get; set; }
public double RGVIntrinsicRevised { get; set; }
public Enhancements()
{
DebtLoad = false;
ROIC = double.NaN;
ROICGrowth = double.NaN;
EPSGrowth = double.NaN;
RevenueGrowth = double.NaN;
BVPS = double.NaN;
PBVPS = double.NaN;
EPS = double.NaN;
PE = double.NaN;
PEG = double.NaN;
MOS = double.NaN;
MOS80 = double.NaN;
IntrinsicValue = double.NaN;
RGVIntrinsic = double.NaN;
IntrinsicValueRevised = double.NaN;
RGVIntrinsicRevised = double.NaN;
}
}
public class DCFValuation
{
public const double MARKET_RETURN=.11;
private String symbol;
private double wacc=double.NaN;
private double costOfEquity=double.NaN;
private double costOfDebt=double.NaN;
private double marketValueOfEquity=double.NaN;
private double marketValueOfDebt = double.NaN;
private double totalCapitalInvested = double.NaN;
private double corporateTaxRate = double.NaN;
private double beta = double.NaN;
private double riskFreeRate = double.NaN;
private double interestExpense = double.NaN;
private double interestRate = double.NaN;
private double totalDebt = double.NaN;
private double outstandingShares = double.NaN;
private double freeCashflowGrowth = double.NaN;
private double presentValue = double.NaN;
private double stockPriceValuation = double.NaN;
private double marketReturn=MARKET_RETURN;
private Price currentPrice;
private Cashflows cashflows = new Cashflows();
private ReturnItems returnItems = new ReturnItems();
private Enhancements enhancements = new Enhancements();
private String message;
private bool useMarketReturn = false;
public bool success = false;
public bool UseMarketReturn
{
get { return useMarketReturn; }
set { useMarketReturn = value; if (useMarketReturn)marketReturn = 0.00; else marketReturn = MARKET_RETURN; }
}
public String Symbol
{
get { return symbol; }
set { symbol = value; }
}
public Price CurrentPrice
{
get { return currentPrice; }
set { currentPrice = value; }
}
public double WACC
{
get { return wacc; }
set { wacc = value; }
}
public double CostOfEquity
{
get { return costOfEquity; }
set { costOfEquity = value; }
}
public double CostOfDebt
{
get { return costOfDebt; }
set { costOfDebt = value; }
}
public double MarketValueOfEquity
{
get { return marketValueOfEquity; }
set { marketValueOfEquity = value; }
}
public double MarketValueOfDebt
{
get { return marketValueOfDebt; }
set { marketValueOfDebt = value; }
}
public double TotalCapitalInvested
{
get { return totalCapitalInvested; }
set { totalCapitalInvested = value; }
}
public double CorporateTaxRate
{
get { return corporateTaxRate; }
set { corporateTaxRate = value; }
}
public double Beta
{
get { return beta; }
set { beta = value; }
}
public double RiskFreeRate
{
get { return riskFreeRate; }
set { riskFreeRate = value; }
}
public double InterestExpense
{
get { return interestExpense; }
set { interestExpense = value; }
}
public double InterestRate
{
get { return interestRate; }
set { interestRate = value; }
}
public double TotalDebt
{
get { return totalDebt; }
set { totalDebt = value; }
}
public double FreeCashflowGrowth
{
get { return freeCashflowGrowth; }
set { freeCashflowGrowth = value; }
}
public double OutstandingShares
{
get { return outstandingShares; }
set { outstandingShares = value; }
}
public ReturnItems ReturnItems
{
get { return returnItems; }
}
public Cashflows Cashflows
{
get { return cashflows; }
}
public double StockPriceValuation
{
get { return stockPriceValuation; }
set { stockPriceValuation = value; }
}
public double PresentValue
{
get { return presentValue; }
set { presentValue = value; }
}
public double MarketReturn
{
get { return marketReturn; }
set { marketReturn = value; }
}
public String Message
{
get { return message; }
set { message = value; }
}
public bool Success
{
get { return success; }
set { success = value; }
}
public Enhancements Enhancements
{
get { return enhancements; }
set { enhancements = value; }
}
public override String ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append(Symbol).Append(",");
sb.Append(Success).Append(",");
if (!Success)
{
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(",");
sb.Append(Message);
}
else
{
sb.Append(WACC).Append(",");
sb.Append(MarketReturn).Append(",");
sb.Append(CostOfEquity).Append(",");
sb.Append(CostOfDebt).Append(",");
sb.Append(MarketValueOfEquity).Append(",");
sb.Append(MarketValueOfDebt).Append(",");
sb.Append(TotalCapitalInvested).Append(",");
sb.Append(CorporateTaxRate).Append(",");
sb.Append(Beta).Append(",");
sb.Append(RiskFreeRate).Append(",");
sb.Append(InterestExpense).Append(",");
sb.Append(InterestRate).Append(",");
sb.Append(TotalDebt).Append(",");
sb.Append(OutstandingShares).Append(",");
sb.Append(FreeCashflowGrowth).Append(",");
sb.Append(PresentValue).Append(",");
sb.Append(StockPriceValuation).Append(",");
if (null == currentPrice)
{
sb.Append(",");
sb.Append(",");
}
else
{
sb.Append(CurrentPrice.Close).Append(",");
sb.Append(Utility.DateTimeToStringMMSDDSYYYY(CurrentPrice.Date)).Append(",");
}
sb.Append(Enhancements.DebtLoad?"PASS":"FAIL").Append(",");
sb.Append(Enhancements.ROIC).Append(",");
sb.Append(Enhancements.ROICGrowth).Append(",");
sb.Append(Enhancements.EPSGrowth).Append(",");
sb.Append(Enhancements.RevenueGrowth).Append(",");
sb.Append(Enhancements.BVPS).Append(",");
sb.Append(Enhancements.PBVPS).Append(",");
sb.Append(Enhancements.EPS).Append(",");
sb.Append(Enhancements.PEG).Append(",");
sb.Append(Enhancements.MOS).Append(",");
sb.Append(Enhancements.MOS80).Append(",");
sb.Append(Enhancements.IntrinsicValue).Append(",");
sb.Append(Enhancements.IntrinsicValueRevised).Append(",");
sb.Append(Enhancements.RGVIntrinsic).Append(",");
sb.Append(Enhancements.RGVIntrinsicRevised).Append(",");
sb.Append(Message);
}
return sb.ToString();
}
public static String Header
{
get
{
StringBuilder sb = new StringBuilder();
sb.Append("SYMBOL,STATUS,WACC,MARKET_RETURN,COST_OF_EQUITY,COST_OF_DEBT,MARKET_VALUE_OF_EQUITY,MARKET_VALUE_OF_DEBT,TOTAL_CAPITAL_INVESTED,CORPORATE_TAX_RATE,BETA,RISK_FREE_RATE,INTEREST_EXPENSE,INTEREST_RATE,TOTAL_DEBT,OUTSTANDING_SHARES,FREE_CASHFLOW_GROWTH,PRESENT_VALUE,STOCK_PRICE_VALUATION,CURRENT_STOCK_PRICE,PRICING_DATE,");
sb.Append("DEBT_LOAD,");
sb.Append("ROIC_GROWTH,");
sb.Append("EPS_GROWTH,");
sb.Append("REVENUE_GROWTH,");
sb.Append("BVPS,");
sb.Append("PBVPS,");
sb.Append("EPS,");
sb.Append("PEG,");
sb.Append("MOS,");
sb.Append("MOS80,");
sb.Append("INTRINSIC_VALUE,");
sb.Append("INSTRINSIC_VALUE_REVISED,");
sb.Append("RGV_INSTRINSIC_VALUE,");
sb.Append("RGV_INSTRINSIC_VALUE_REVISED,");
sb.Append("MESSAGE");
return sb.ToString();
}
}
}
}