knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, error = FALSE)
library(InvMgmt) library(kableExtra) load('data.Rds') data(ret) colnames(ret) <- c('date', 'US Large Cap', 'US Small Cap', 'US Value', 'US Growth', 'EAFA', 'Em Mkt Stock', 'US Treas Long', 'US Treas Interm', 'Em Mkt Bond', 'US Inv Grade', 'US High Yield', 'Real Estate', 'MLP', 'Infrastructure', 'Nat. Resources', 'Gold') fundret <- combineRet(fund, bench, freq = 'd', method = 'matrix')
\newpage
Catalyst Millburn Hedged Strategy (MBXIX)
SPDR S&P 500 ETF (SPY)
The investment seeks long-term capital appreciation. The fund seeks to achieve its investment objective by investing in a portfolio comprised of (i) futures contracts, forward and spot contracts, and/or options on futures contracts on or related to the following sectors: currencies, interest rate instruments, stock indices, metals, energy and agricultural commodities, (the "Futures Component") and (ii) equity ETFs, common stocks (the "Equity Component"), intended to capitalize on the non-correlated, long term historical performance of the equities and managed futures asset classes.
US Fund Multialternative
2.02%
$5,300
Catalyst / Millburn
\newpage
chartWealth(fundret) + labs(title = '', subtitle = '') + scale_color_manual(values = c('dodgerblue', 'darkgrey')) + theme_bw() + theme(legend.position = 'bottom') ann_ret <- annRet(fundret, 'd') sharpe <- sharpeRatio(fundret, rf, 'd') sortino <- sortinoRatio(fundret, rf, 'd') %>% select(-excess_ret) worst_dd <- drawdown(fundret) %>% select(-date) %>% apply(2, min) %>% enframe() %>% rename('asset' = 'name') dat <- reduce(list(ann_ret, sharpe, sortino, worst_dd), full_join, by = 'asset') %>% mutate_at(vars(-asset, -sharpe, -sortino), fPercent) %>% mutate_at(vars(sharpe, sortino), fNum) colnames(dat) <- c('Asset', 'Annual Return', 'Excess Return', 'Volatility', 'Sharpe', 'Down Volatility', 'Sortino', 'Worst Drawdown') kableExtra::kable(dat, 'latex') %>% kableExtra::kable_styling(latex_options = 'striped')
$$E[\mu]=3.6, E[\sigma]=11.0$$
chartCone(fundret[, 1:2], 0.0363, 0.11, 'd') + labs(title = '', subtitle = '') + theme(legend.position = 'bottom')
corr_ret <- combineRet(fund, ret, freq = 'd', method = 'matrix') corr_ret %>% select(-date) %>% cor() %>% chartCorr() chartDendro(corr_ret)
\newpage
chartPCA(fund, ret, rf, n_pc = 2) + xlab('') + ylab('') + theme_bw()
chartRollUniReg(fund, bench, rf, 'd', 90) + labs(title = '', subtitle = '') + geom_hline(yintercept = 0, color = 'black') + theme_bw() + theme(legend.position = 'none')
\newpage
chartRollSd(fundret, 'd', 90, TRUE) + scale_color_manual(values = c('dodgerblue', 'darkgrey')) + labs(title = '', subtitle = '') + xlab('') + ylab('') + theme_bw() + theme(legend.position = 'bottom')
chartPDF(fund, 'd') + theme_bw() + theme(legend.position = 'top') chartPDF(fund, 'm', 12) + theme_bw() + theme(legend.position = 'top') chartPDF(fund, 'q', 4) + theme_bw() + theme(legend.position = 'top')
\newpage
sysRiskPerf(fundret, sys_risk, 'd') %>% mutate_at(vars(-Asset), fPercent) %>% kableExtra::kable('latex') %>% kableExtra::kable_styling(latex_options = 'striped')
\vspace{18pt}
hline_df <- tibble(series = c('Std. Change of Absorp. Ratio', 'Turbulence Percentile'), yintercept = c(1.75, 0.90)) sys_risk %>% select(date, delta.ar, percentile) %>% rename('Std. Change of Absorp. Ratio' = 'delta.ar', 'Turbulence Percentile' = 'percentile') %>% left_join(drawdown(fund), by = 'date') %>% pivot_longer(-date, names_to = 'series', values_to = 'values') %>% ggplot(aes(x = date, y = values, color = series)) + geom_bar(stat = 'identity', position = 'dodge') + geom_hline(data = hline_df, aes(yintercept = yintercept)) + facet_wrap(series ~., scales = 'free', ncol = 1) + ylab('') + xlab('') + theme_bw() + theme(legend.position = 'none')
mu <- annRet(ret, 'd') sigma <- annSd(ret, 'd') fund_mu <- annRet(fundret, 'd') fund_sigma <- annSd(fundret, 'd') fund_dat <- left_join(fund_mu, fund_sigma, by = 'asset') left_join(mu, sigma, by = 'asset') %>% ggplot(aes(x = sd, y = ann_ret, label = asset)) + geom_point(size = 3) + ggrepel::geom_text_repel(size = 3.5) + geom_point(data = fund_dat, aes(x = sd, y = ann_ret, color = asset, label = asset), show.legend = FALSE, size = 3) + ggrepel::geom_text_repel(data = fund_dat, size = 3.5) + ylab('Annualized Return') + xlab('Annualized Volatility') + scale_y_continuous(labels = scales::percent) + scale_x_continuous(labels = scales::percent) + theme_bw() max_dd <- drawdown(ret) %>% select(-date) %>% apply(2, min) %>% tibble() %>% add_column(asset = ret %>% select(-date) %>% colnames()) %>% rename('max_dd' = '.') fund_max_dd <- drawdown(fundret) %>% select(-date) %>% apply(2, min) %>% tibble() %>% add_column(asset = fundret %>% select(-date) %>% colnames()) %>% rename('max_dd' = '.') fund_dat <- left_join(fund_mu, fund_max_dd, by = 'asset') left_join(mu, max_dd, by = 'asset') %>% ggplot(aes(x = max_dd, y = ann_ret, label = asset)) + geom_point(size = 3) + ggrepel::geom_text_repel(size = 3.5) + geom_point(data = fund_dat, aes(x = max_dd, y = ann_ret, color = asset, label = asset), show.legend = FALSE, size = 3) + ggrepel::geom_text_repel(data = fund_dat, size = 3.5) + ylab('Annualized Return') + xlab('Worst Drawdown') + scale_y_continuous(labels = scales::percent) + scale_x_reverse(labels = scales::percent) + theme_bw()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.