#create vectors for tickers
Benchtickers <- c("AML LN EQUITY",
"RNO FP EQUITY",
"MBG GY EQUITY",
"STLA IM EQUITY",
"VOW GR EQUITY",
"BMW GR EQUITY")
Tickers <- c("AML LN EQUITY"
,"RNO FP EQUITY",
"MBG GY EQUITY",
"STLA IM EQUITY",
"VOW GR EQUITY",
"BMW GR EQUITY",
"RACE US EQUITY")
SP500 <- c("SPY")
EsseFerrari <- c("RACE")
#Create vector for risk free rate
rfr <- (.02895)
rfr252 <- rfr/252
#get price data
fieldRets <- "PX_last"
dateStart <- as.Date("1995-12-31")
dateEnd <- as.Date("2022-04-15")
Allprices <- bdh(Tickers, fieldRets,
start.date = dateStart,
end.date = dateEnd,
options = c("currency"="USD"))
Allprices <- lapply(Allprices, function(d) xts(d[,-1], order.by=as.Date(d[,1])))
Allprices <- do.call(merge, Allprices)
BenchPrices <- bdh(Benchtickers, fieldRets,
start.date = dateStart,
end.date = dateEnd,
options = c("currency"="USD"))
BenchPrices <- lapply(BenchPrices, function(d) xts(d[,-1], order.by=as.Date(d[,1])))
BenchPrices <- do.call(merge, BenchPrices)
SPYprices <- NULL
for(ticker in SP500) {
SPYprices <- cbind(SPYprices,
getSymbols(ticker, periodicity = "daily", auto.assign=FALSE)[,4])
}
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
FerrariPrices <- NULL
for(ticker in EsseFerrari) {
FerrariPrices <- cbind(FerrariPrices,
getSymbols(ticker, periodicity = "daily", auto.assign=FALSE)[,4])
}
#get daily returns
BReturns <- na.omit(ROC(BenchPrices))
AllReturns <- na.omit(ROC(Allprices))
FerrariReturns <- na.omit(ROC(FerrariPrices))
SPYreturns <- na.omit(ROC(SPYprices))
AML.L_RET <- na.omit(ROC(Allprices$AML.LN.EQUITY))
RNL_RET <- na.omit(ROC(Allprices$RNO.FP.EQUITY))
MBG_RET <- na.omit(ROC(Allprices$MBG.GY.EQUITY))
STLA_RET <- na.omit(ROC(Allprices$STLA.IM.EQUITY))
VOW_RET <- na.omit(ROC(Allprices$VOW.GR.EQUITY))
BMW_RET <- na.omit(ROC(Allprices$VOW.GR.EQUITY))
#monthly Returns
AllReturnsM <- to.period(AllReturns, period = "months", OHLC = FALSE)
BreturnM <- to.period(BReturns, period = "months", OHLC = FALSE)
FReturnM <- to.period(FerrariReturns, period = "months", indexAt = "lastof")[,4]
SPReturM <- to.period(SPYreturns, period = "months", indexAt = "lastof")[,4]
AML_m <- to.period(AML.L_RET, period = "months", indexAt = "lastof")[,4]
RNL_m <- to.period(RNL_RET, period = "months", indexAt = "lastof")[,4]
MBG_m <- to.period(MBG_RET, period = "months", indexAt = "lastof")[,4]
STLA_m <- to.period(STLA_RET, period = "months", indexAt = "lastof")[,4]
VOW_M <- to.period(VOW_RET, period = "months", indexAt = "lastof")[,4]
BMW_M <- to.period(BMW_RET, period = "months", indexAt = "lastof")[,4]
#average return daily
AvgFerR <- AVERAGE(FerrariReturns)
AvgAmlR <- AVERAGE(AML.L_RET)
AvgRnlR <- AVERAGE(RNL_RET)
AvgMbgR <- AVERAGE(MBG_RET)
AvgStlaR <- AVERAGE(STLA_RET)
AvgVowR <- AVERAGE(VOW_RET)
AvgBmwR <- AVERAGE(BMW_RET)
AvgFerR
## [1] 0.0008503151
AvgAmlR
## [1] -0.003311341
AvgRnlR
## [1] -6.004859e-06
AvgMbgR
## [1] -1.420753e-05
AvgStlaR
## [1] 0.0005999872
AvgVowR
## [1] 0.0002552395
AvgBmwR
## [1] 0.0002552395
#Monthly log returns
highchart(type = "stock") %>%
hc_title(text = "Monthly Log Returns") %>%
hc_add_series(BreturnM$AML.LN.EQUITY,
name = "Aston Martin Lagonda") %>%
hc_add_series(BreturnM$RNO.FP.EQUITY,
name = "Renault") %>%
hc_add_series(BreturnM$MBG.GY.EQUITY,
name = "Daimler Mercedes Benz") %>%
hc_add_series(BreturnM$STLA.IM.EQUITY,
name = "Stelantis") %>%
hc_add_series(BreturnM$VOW.GR.EQUITY,
name = "Volkswagen") %>%
hc_add_series(BreturnM$BMW.GR.EQUITY,
name = "BMW") %>%
hc_add_series(AllReturns$RACE.US.EQUITY,
name = "Ferrari") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE)
#daily log returns
highchart(type = "stock") %>%
hc_title(text = "Daily Log Returns") %>%
hc_add_series(BReturns$AML.LN.EQUITY,
name = "Aston Martin Lagonda") %>%
hc_add_series(BReturns$RNO.FP.EQUITY,
name = "Renault") %>%
hc_add_series(BReturns$MBG.GY.EQUITY,
name = "Daimler Mercedes Benz") %>%
hc_add_series(BReturns$STLA.IM.EQUITY,
name = "Stelantis") %>%
hc_add_series(BReturns$VOW.GR.EQUITY,
name = "Volkswagen") %>%
hc_add_series(BReturns$BMW.GR.EQUITY,
name = "BMW") %>%
hc_add_series(AllReturns$RACE.US.EQUITY,
name = "Ferrari") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE)
#Benchmark Portfolio
EqualWeight <- rep(1 / ncol(BReturns), ncol(BReturns))
BenchmarkPortfolio <- Return.portfolio(BReturns, weights = EqualWeight)
#Comparative Returns
retsofcomps <- cbind(AllReturns, BenchmarkPortfolio)
charts.PerformanceSummary(retsofcomps, main ="P/L Over Time")

RetsVsMarket <- cbind(FerrariReturns, SPYreturns)
charts.PerformanceSummary(RetsVsMarket, main ="P/L Over Time")

#Reggression of Ferrari
Comb_Ret <- cbind(FerrariReturns, SPYreturns)
Comb_Ret %>%
ggplot(aes(x =Comb_Ret$RACE.Close, y = Comb_Ret$SPY.Close)) +
geom_point(alpha = 0.3) +
geom_smooth(method = lm) +
theme_classic()+
labs(x = 'Benchmark Returns',
y= 'Ferrari Returns',
title = "Ferrari Returns vs Benchmark returns") +
scale_x_continuous(breaks = seq(-0.1,0.1,0.01),
labels = scales::percent) +
scale_y_continuous(breaks = seq(-0.1,0.1,0.01),
labels = scales::percent)

model <- lm(Comb_Ret$RACE.Close ~ Comb_Ret$SPY.Close)
model_alpha <- model$coefficients[1]
model_beta <- model$coefficients[2]
cat("The portfolio alpha is", model_alpha, "and the portfolio beta is", model_beta)
## The portfolio alpha is 0.000358173 and the portfolio beta is 1.037492
#Ferrari Beta
CAPM.beta(FerrariReturns, SPYreturns, rfr252)
## [1] 1.037492
#beta in positive Market conditions only
CAPM.beta.bull(FerrariReturns, SPYreturns, rfr252)
## [1] 0.9891982
#beta in negative market conditions only
CAPM.beta.bear(FerrariReturns, SPYreturns, rfr252)
## [1] 0.9582951
#Alpha of Ferrari
CAPM.alpha(FerrariReturns, SPYreturns, rfr)
## [1] 0.001443575
#Jensen Alpha calculation for Ferrari
CAPM.jensenAlpha(FerrariReturns, SPYreturns, rfr252)
## [1] 0.1238625
#Treynor Ratio
TreynorRatio(FerrariReturns,SPYreturns,Rf = rfr252)
## [1] 0.1417575
#Active Premium over the market, this is annualized
ActivePremium(FReturnM, SPReturM, scale = 12)
## [1] 0.04063503
#SharpeRatio
SharpeRatio(FerrariReturns, Rf = rfr252)
## RACE.Close
## StdDev Sharpe (Rf=0%, p=95%): 0.03770897
## VaR Sharpe (Rf=0%, p=95%): 0.02464961
## ES Sharpe (Rf=0%, p=95%): 0.01404839
#Information Ratio
InformationRatio(FerrariReturns, SPYreturns)
## [1] 0.1841517
#standard deviation
FerrariSD <- StdDev(FReturnM)
FerrariSD <- round(FerrariSD * 100, 2)
AML_SD <- StdDev(AML_m)
AML_SD <- round(AML_SD * 100, 2)
RNL_SD <- StdDev(RNL_m)
RNL_SD <- round(RNL_SD * 100, 2)
MBG_SD <- StdDev(MBG_m)
MBG_SD <- round(MBG_SD * 100, 2)
STLA_SD <- StdDev(STLA_m)
STLA_SD <- round(STLA_SD * 100, 2)
VOW_SD <- StdDev(VOW_M)
VOW_SD <- round(VOW_SD * 100, 2)
BMW_SD <- StdDev(BMW_M)
BMW_SD <- round(BMW_SD * 100, 2)
SPYsd <- StdDev(SPReturM)
SPYsd <- round(SPYsd * 100, 2)
B_sd <- StdDev(BreturnM)
B_sd <- round(B_sd * 100, 2)
B_sd
## AML.LN.EQUITY RNO.FP.EQUITY MBG.GY.EQUITY STLA.IM.EQUITY VOW.GR.EQUITY
## StdDev 6.58 2.62 1.51 2.12 2.09
## BMW.GR.EQUITY
## StdDev 1.28
FerrariSD
## [,1]
## StdDev 1.68
AML_SD
## [,1]
## StdDev 6.59
RNL_SD
## [,1]
## StdDev 2.6
MBG_SD
## [,1]
## StdDev 1.92
STLA_SD
## [,1]
## StdDev 2.03
VOW_SD
## [,1]
## StdDev 2.08
BMW_SD
## [,1]
## StdDev 2.08
SPYsd
## [,1]
## StdDev 1
#rolling standard deviation
window <- 24
Ferrari_Rolling_SD <- rollapply(FReturnM, FUN = sd, width = window)%>%
na.omit
Ferrari_Rolling_SD <- round(Ferrari_Rolling_SD, 4) * 100
AML_roll_sd <- rollapply(AML_m, FUN = sd, width = window)%>%
na.omit
AML_roll_sd <- round(Ferrari_Rolling_SD, 4) * 100
RNL_roll_sd <- rollapply(RNL_m, FUN = sd, width = window)%>%
na.omit
RNL_roll_sd <- round(RNL_roll_sd, 4) * 100
MBG_roll_sd <- rollapply(MBG_m, FUN = sd, width = window)%>%
na.omit
MBG_roll_sd <- round(MBG_roll_sd, 4) * 100
STLA_roll_sd <- rollapply(STLA_m, FUN = sd, width = window)%>%
na.omit
STLA_roll_sd <- round(STLA_roll_sd, 4) * 100
VOW_roll_sd <- rollapply(VOW_M, FUN = sd, width = window)%>%
na.omit
VOW_roll_sd <- round(VOW_roll_sd, 4) * 100
BMW_roll_sd <- rollapply(BMW_M, FUN = sd, width = window)%>%
na.omit
BMW_roll_sd <- round(BMW_roll_sd, 4) * 100
highchart(type = "stock") %>%
hc_title(text = "24-Month Rolling Volatility") %>%
hc_add_series(Ferrari_Rolling_SD, color = "red", name = "Ferrari") %>%
hc_add_series(RNL_roll_sd, name = "Renault") %>%
hc_add_series(MBG_roll_sd, name = "Daimler Mercedes Benz") %>%
hc_add_series(STLA_roll_sd, name = "Stellantis") %>%
hc_add_series(VOW_roll_sd, name = "VolksWagen") %>%
hc_add_series(BMW_roll_sd, name = "BMW") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_yAxis(
labels = list(format = "{value}%"),
opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled= TRUE) %>%
hc_legend(enabled = TRUE)
#operating leverage
OpLev <- bdp(Tickers, "DEGREE_OPERATING_LEVERAGE")
tick <- as.data.frame(Tickers)
OpLev <- cbind(OpLev, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = OpLev$Tickers) %>%
hc_add_series(data = OpLev$DEGREE_OPERATING_LEVERAGE, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Operating Leverage") %>%
hc_legend(enabled = FALSE)
#Asset Turnover
AssetTurnover <- bdp(Tickers, "ASSET_TURNOVER")
AssetTurnover <- cbind(AssetTurnover, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = AssetTurnover$Tickers) %>%
hc_add_series(data = AssetTurnover$ASSET_TURNOVER, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Asset Turnover") %>%
hc_legend(enabled = FALSE)
#Fixed Asset Turnover
FAssetTurnover <- bdp(Tickers, "NET_FIX_ASSET_TURN")
FAssetTurnover <- cbind(FAssetTurnover, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = FAssetTurnover$Tickers) %>%
hc_add_series(data = FAssetTurnover$NET_FIX_ASSET_TURN, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Fixed Asset Turnover") %>%
hc_legend(enabled = FALSE)
#Return on equity
ROE <- bdp(Tickers, "RETURN_COM_EQY")
ROE <- cbind(ROE, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = ROE$Tickers) %>%
hc_add_series(data = ROE$RETURN_COM_EQY, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Return on Equity") %>%
hc_legend(enabled = FALSE)
#Profit Margin
PM <- bdp(Tickers, "PROF_MARGIN")
PM <- cbind(PM, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = PM$Tickers) %>%
hc_add_series(data = PM$PROF_MARGIN, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Profit Margin") %>%
hc_legend(enabled = FALSE)
#inventory Turnover
INTturn <- bdp(Tickers, "INVENT_TURN")
INTturn <- cbind(INTturn, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = INTturn$Tickers) %>%
hc_add_series(data = INTturn$INVENT_TURN, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Inventory Turnover Ratio") %>%
hc_legend(enabled = FALSE)
#days in accounts receivable
DIAR <- bdp(Tickers, "DAYS_ACCOUNTS_RECEIVABLE")
DIAR <- cbind(DIAR, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = DIAR$Tickers) %>%
hc_add_series(data = DIAR$DAYS_ACCOUNTS_RECEIVABLE, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Days in Accounts Receivable") %>%
hc_legend(enabled = FALSE)
#current ratio
CR <- bdp(Tickers, "CUR_RATIO")
CR <- cbind(CR, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = CR$Tickers) %>%
hc_add_series(data = CR$CUR_RATIO, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Current Ratio") %>%
hc_legend(enabled = FALSE)
#quick ratio
QR <- bdp(Tickers, "QUICK_RATIO")
QR <- cbind(QR, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = QR$Tickers) %>%
hc_add_series(data = QR$QUICK_RATIO, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Quick Ratio") %>%
hc_legend(enabled = FALSE)
#Price to book ratio
PB <- bdp(Tickers, "PX_TO_BOOK_RATIO")
PB <- cbind(PB, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = PB$Tickers) %>%
hc_add_series(data = PB$PX_TO_BOOK_RATIO, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Price to Book Ratio") %>%
hc_legend(enabled = FALSE)
#price to earnings
PE <- bdp(Tickers, "PE_RATIO")
PE <- cbind(PE, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = PE$Tickers) %>%
hc_add_series(data = PE$PE_RATIO, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Price to Earnings Ratio") %>%
hc_legend(enabled = FALSE)
#free cash flow
FCF <- bdp(Tickers, "CF_FREE_CASH_FLOW")
FCF <- cbind(FCF, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = FCF$Tickers) %>%
hc_add_series(data = FCF$CF_FREE_CASH_FLOW, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Free Cash Flow") %>%
hc_legend(enabled = FALSE)
#free cash flow to firm
FCFF <- bdp(Tickers, "CF_FREE_CASH_FLOW_FIRM")
FCFF <- cbind(FCFF, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = FCFF$Tickers) %>%
hc_add_series(data = FCFF$CF_FREE_CASH_FLOW_FIRM, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Free Cash Flow to Firm") %>%
hc_legend(enabled = FALSE)
#free cash to equity
FCFE <- bdp(Tickers, "FREE_CASH_FLOW_EQUITY")
FCFE <- cbind(FCFE, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = FCFE$Tickers) %>%
hc_add_series(data = FCFE$FREE_CASH_FLOW_EQUITY, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Free Cash Flow to Equity") %>%
hc_legend(enabled = FALSE)
#return on assets
ROA <- bdp(Tickers, "RETURN_ON_ASSET")
ROA <- cbind(ROA, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = ROA$Tickers) %>%
hc_add_series(data = ROA$RETURN_ON_ASSET
, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Return on Assets") %>%
hc_legend(enabled = FALSE)
#return on Capital
ROCap <- bdp(Tickers, "RETURN_ON_CAP")
ROCap <- cbind(ROCap, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = ROCap$Tickers) %>%
hc_add_series(data = ROCap$RETURN_ON_CAP, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Return on Capital") %>%
hc_legend(enabled = FALSE)
#Return on Invested Capital
ROIC <- bdp(Tickers, "RETURN_ON_INV_CAPITAL")
ROIC <- cbind(ROIC, tick)
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = ROIC$Tickers) %>%
hc_add_series(data = ROIC$RETURN_ON_INV_CAPITAL, color = "red") %>%
hc_add_theme(hc_theme_flat()) %>%
hc_title(text = "Return on Invested Capital") %>%
hc_legend(enabled = FALSE)