米国の ETF について、各資産クラスの代表的な銘柄をリストアップし、主要なパフォーマンス指標をまとめてみたい。データの取得・作図・パフォーマンス指標の計算は、全て R を使って行う。
ライブラリの読み込み
まずは、今回の記事に必要なライブラリを読み込みから。
library(tidyverse)
## 株価の取得
library(tidyquant)
## data.frame から xts 含む時系列データへの変換 (またはその逆)
library(timetk)
## パフォーマンス指標の計算
library(PerformanceAnalytics)
## ggplot2 関連
library(GGally)
library(ggrepel)
library(patchwork)
## データの表示の体裁を整えるパッケージ
library(formattable)
データ
この記事で利用するデータや関数は全て以下の RData
ファイルにまとめらている。
以降の記事で、全ての関数やデータのダウンロード方法をコード付きで解説するが、このファイルダウンロードし読み込めば、手元で環境を再現することが可能だ。
load("us-etf-research.RData")
ETF リスト
分析対象の ETF を tibble
形式でリストアップする。ETFdb を参考に、主要なインデックスから、資産規模 (AUM) が大きく、上場からの期間が長いものを選択している。信託報酬などのコストの多寡は考慮していない。
これは、もちろん網羅的なリストではなく、それを目指したものでもないが、今後順次増やしていく予定だ。
etfs <- tribble(
~class, ~symbol, ~index,
"Equity", "SPY", "S&P 500",
"Equity", "IJH", "S&P MidCap 400",
"Equity", "IJR", "S&P SmallCap 600",
"Equity", "IWB", "Russel 1000",
"Equity", "IWM", "Russel 2000",
"Equity", "QQQ", "NASDAQ 100",
"Equity", "DIA", "Dow 30",
"US Sector", "XLE", "Energy",
"US Sector", "XLF", "Financials",
"US Sector", "XLU", "Utilities",
"US Sector", "XLI", "Industrial",
"US Sector", "XLK", "Technology",
"US Sector", "XLV", "Health",
"US Sector", "XLY", "Consumer Discretionary",
"US Sector", "XLP", "Consumer Staples",
"US Sector", "XLB", "Materials",
"Treasury", "SHV", "Short Term",
"Treasury", "SHY", "1-3 Year",
"Treasury", "IEF", "7-10 Year",
"Treasury", "TLT", "20+ Year",
"Treasury", "TIP", "Inflation Protected",
"Corp Bond", "LQD", "Investment Grade",
"Corp Bond", "HYG", "High Yield",
"Corp Bond", "PFF", "Preffered Stock",
"Real Estate", "IYR", "Dow Jones U.S. Real Estate",
"Commodity", "GLD", "Gold",
"Commodity", "SLV", "Silver",
"Commodity", "USO", "Crude Oil",
"Forex", "UUP", "USD",
"Forex", "FXY", "JPY",
"Forex", "FXE", "EUR",
"Forex", "FXB", "GBP",
"Forex", "FXF", "CHF",
"Volatility", "VXX", "S&P 500 VIX Short-Term Future"
)
データのダウンロード
Yahoo Finance からダウンロード
{tidyquant}
を利用して Yahoo Finance からデータを取得する。 {tidyquant}
は Tidy な data.frame
として株価をダウンロードしてくれるので便利だ。
R から Yahoo Finance のデータを読み込む際には、一般的に、 {quantmod}
が利用されることが多いようだ。しかし {quantmod}
では、 xts
でデータが取得されるため {tidyverse}
のパッケージ群を利用することができない。個人的には、データは data.frame
(tibble 含む
) に統一しておき {dplyr}
や {ggplot2}
などのパッケージの関数を扱えるようにしておいたほうが、快適にデータ分析を進められると思う。
ただし、一部の時系列分析用のパッケージなどでは、入力に xts
を求めるものがあるので、その場合は都度変換して対処する方針だ。今回も {PerformanceAnalytics}
を利用する際に xts
に変換する処理が必要になる。
それでは、先程用意した ETF リストの銘柄の株価を全て取得してみよう。
rawdata <- tq_get(etfs$symbol, from = "1993-01-01")
データは、典型的な四本値 + 分割・配当調整済みの終値 (adjusted) という構成だ。
head(rawdata) %>% mutate_if(is.numeric, round, digits = 2)
symbol | date | open | high | low | close | volume | adjusted |
---|---|---|---|---|---|---|---|
SPY | 1993-01-29 | 43.97 | 43.97 | 43.75 | 43.94 | 1003200 | 26.58 |
SPY | 1993-02-01 | 43.97 | 44.25 | 43.97 | 44.25 | 480500 | 26.77 |
SPY | 1993-02-02 | 44.22 | 44.38 | 44.12 | 44.34 | 201300 | 26.83 |
SPY | 1993-02-03 | 44.41 | 44.84 | 44.38 | 44.81 | 529400 | 27.11 |
SPY | 1993-02-04 | 44.97 | 45.09 | 44.47 | 45 | 531500 | 27.23 |
SPY | 1993-02-05 | 44.97 | 45.06 | 44.72 | 44.97 | 492100 | 27.21 |
VXX を結合
VIX 短期先物の ETN として有名な VXX は、2019 年 1 月 30 日に償還を迎えてしまっている。後継となる銘柄が VXXB として登場しているが、まだ 2 年弱しか取引されておらず、分析対象として不十分である。そのため、VXX のデータを別途 csv で用意し、Yahoo からダウンロードした最新の情報と結合する。(ちなみに、VXXB はその後、元々と同じ VXX に名称変更された。上述の ETF リストには、名称変更後の VXX を指定している。この方が、旧 VXX と結合する際にも好都合である。)
vxx <- read_csv("VXX.csv") %>% mutate(date = ymd(date))
rawdata <- rawdata %>%
filter(!(symbol == "VXX" & date <= ymd("2019-01-29"))) %>%
bind_rows(vxx) %>%
arrange(symbol, date)
日次リターンを計算
分析対象となる日次リターンを計算する。
data <- rawdata %>%
group_by(symbol) %>%
tq_transmute(adjusted, mutate_fun = dailyReturn, col_rename = "ret") %>%
slice(-1) %>% # リターン計算による先頭 0 を削除
ungroup() %>%
left_join(etfs, by = "symbol") # インデックスでもアクセスできるように結合しておく
データの確認
データの前処理が完了したタイミングで、利用可能期間や NA
の有無などを確認しておく。
data %>%
group_by(symbol, index) %>%
summarize(start = min(date), end = max(date), na = sum(is.na(ret)))
symbol | index | start | end | na | |
---|---|---|---|---|---|
1 | DIA | Dow 30 | 1998-01-21 | 2019-11-12 | 0 |
2 | FXB | GBP | 2006-06-27 | 2019-11-12 | 0 |
3 | FXE | EUR | 2005-12-13 | 2019-11-12 | 0 |
4 | FXF | CHF | 2006-06-27 | 2019-11-12 | 0 |
5 | FXY | JPY | 2007-02-14 | 2019-11-12 | 0 |
6 | GLD | Gold | 2004-11-19 | 2019-11-12 | 0 |
7 | HYG | High Yield | 2007-04-12 | 2019-11-12 | 0 |
8 | IEF | 7-10 Year | 2002-07-31 | 2019-11-12 | 0 |
9 | IJH | S&P MidCap 400 | 2000-05-30 | 2019-11-12 | 0 |
10 | IJR | S&P SmallCap 600 | 2000-05-30 | 2019-11-12 | 0 |
11 | IWB | Russel 1000 | 2000-05-22 | 2019-11-12 | 0 |
12 | IWM | Russel 2000 | 2000-05-30 | 2019-11-12 | 0 |
13 | IYR | Dow Jones U.S. Real Estate | 2000-06-20 | 2019-11-12 | 0 |
14 | LQD | Investment Grade | 2002-07-31 | 2019-11-12 | 0 |
15 | PFF | Preffered Stock | 2007-04-02 | 2019-11-12 | 0 |
16 | QQQ | NASDAQ 100 | 1999-03-11 | 2019-11-12 | 0 |
17 | SHV | Short Term | 2007-01-12 | 2019-11-12 | 0 |
18 | SHY | 1-3 Year | 2002-07-31 | 2019-11-12 | 0 |
19 | SLV | Silver | 2006-05-01 | 2019-11-12 | 0 |
20 | SPY | S&P 500 | 1993-02-01 | 2019-11-12 | 0 |
21 | TIP | Inflation Protected | 2003-12-08 | 2019-11-12 | 0 |
22 | TLT | 20+ Year | 2002-07-31 | 2019-11-12 | 0 |
23 | USO | Crude Oil | 2006-04-11 | 2019-11-12 | 0 |
24 | UUP | USD | 2007-03-02 | 2019-11-12 | 0 |
25 | VXX | S&P 500 VIX Short-Term Future | 2009-02-02 | 2019-11-12 | 0 |
26 | XLB | Materials | 1998-12-23 | 2019-11-12 | 0 |
27 | XLE | Energy | 1998-12-23 | 2019-11-12 | 0 |
28 | XLF | Financials | 1998-12-23 | 2019-11-12 | 0 |
29 | XLI | Industrial | 1998-12-23 | 2019-11-12 | 0 |
30 | XLK | Technology | 1998-12-23 | 2019-11-12 | 0 |
31 | XLP | Consumer Staples | 1998-12-23 | 2019-11-12 | 0 |
32 | XLU | Utilities | 1998-12-23 | 2019-11-12 | 0 |
33 | XLV | Health | 1998-12-23 | 2019-11-12 | 0 |
34 | XLY | Consumer Discretionary | 1998-12-23 | 2019-11-12 | 0 |
関数リスト
記事内で利用する関数を読み込む。現時点で全てを理解する必要はなく、以降の記事で登場してきたタイミングで見返してもらえればよい。 {ggplot2}
のテーマである theme_my()
以外の関数は全て、引数に前述までに用意した data
を受け取る関数である。
## 複数の銘柄の中で、最も遅い取引開始日を返す
get_start_date <- function(data) {
data %>%
group_by(symbol) %>%
summarise(start_date = min(date)) %>%
pull(start_date) %>%
max()
}
## get_start_date() の日付に全ての銘柄の開始日を合わせる
align_start_date <- function(data) {
start_date <- get_start_date(data)
filter(data, date >= start_date)
}
## 累積リターンとドローダウンを追加する
add_cumret_dd <- function(data) {
## PerformanceAnalytics::Drawdowns() 関数の warning を抑制
suppressWarnings(
data %>%
group_by(symbol) %>%
mutate(cum_ret = cumprod(1 + ret) - 1,
drawdown = Drawdowns(ret)) %>%
ungroup()
)
}
## data.frame から xts へ変換
convert_to_xts <- function(data, name_col, value_col) {
name_col <- enquo(name_col)
value_col <- enquo(value_col)
data %>%
select(date, !!name_col, !!value_col) %>%
pivot_wider(names_from = !!name_col, values_from = !!value_col) %>%
tk_xts(-date, date)
}
## 凡例なしのシンプルな ggplot2 テーマ
theme_my <- function() {
theme_light() + theme(
plot.title = element_text(face = "bold.italic"),
axis.title = element_blank(),
legend.position = "none")
}
## 線グラフをプロット (累積リターン・ドローダウン・リターンで共通して利用)
plot_lines <- function(data, y_var, color_var, alpha = 0.6, offset = 0.2, label = TRUE) {
y_var <- enquo(y_var)
color_var <- enquo(color_var)
min_date <- min(data$date)
max_date <- max(data$date)
range <- c(min_date, max_date + ((max_date - min_date) * offset))
p <- data %>%
group_by(!!color_var) %>%
mutate(label = if_else(date == max(date), !!color_var, NA_character_)) %>%
ggplot(aes(x = date, y = !!y_var, color = !!color_var)) +
geom_line(alpha = alpha) +
scale_x_date(limits = range) +
theme_my()
if (label) {
p + geom_label_repel(aes(label = label), na.rm = TRUE, xlim = c(max_date, NA), size = 3)
} else {
p
}
}
## {patchwork} を利用して複数の ggplot を 1 つに結合
plot_perf_summary <- function(data, alpha = 0.6, offset = 0.2) {
p1 <- plot_lines(data, cum_ret, index, alpha, offset) +
ggtitle("Cumulative Returns")
p2 <- plot_lines(data, drawdown, index, alpha, offset, label = FALSE) +
ggtitle("Drawdowns")
p3 <- plot_lines(data, ret, index, alpha, offset, label = FALSE) +
ggtitle("Daily Returns")
p1 + p2 + p3 + plot_layout(ncol = 1, heights = c(2, 1, 1))
}
## {GGally} で散布図行列
plot_ggpairs <- function(data) {
## ベンチマークとの相関が高い順に並べる
cors <- map_dfr(unique(data$symbol), function(symbol) {
d1 <- filter(data, symbol == !!symbol) %>% pull(ret)
d2 <- filter(data, symbol == !!benchmark) %>% pull(ret)
cor <- cor(d1, d2)
data.frame(symbol = symbol, cor = cor, stringsAsFactors = FALSE)
})
symbol_order <- arrange(cors, -cor) %>% pull(symbol)
data %>%
select(symbol, date, ret) %>%
pivot_wider(names_from = symbol, values_from = ret) %>%
select(-date) %>%
ggpairs(aes(alpha = 0.1), columns = symbol_order, lower = list(continuous = "smooth")) +
theme_my()
}
## 銘柄毎のパフォーマンス指標を計算して data.frame で返す
calc_perf_metrices <- function(data, etfs, benchmark = "SPY") {
xts_data <- convert_to_xts(data, symbol, ret)
rb <- xts_data[, benchmark]
map_dfr(names(xts_data), function(symbol) {
ra <- xts_data[, symbol]
data.frame(
Symbol = symbol,
Index = etfs[etfs$symbol == symbol, ]$index,
Sharpe = round(as.numeric(SharpeRatio(ra, annualize = TRUE, FUN = "StdDev")), 2),
Alpha = round(CAPM.alpha(ra, rb), 5),
Beta = round(CAPM.beta(ra, rb), 2),
Avg_Ret = as.numeric(Return.annualized(ra)),
Cum_Ret = as.numeric(Return.cumulative(ra)),
StdDev = as.numeric(StdDev.annualized(ra)),
MaxDD = as.numeric(maxDrawdown(ra)),
stringsAsFactors = FALSE
)
}) %>%
mutate_at(vars(Avg_Ret, Cum_Ret, StdDev, MaxDD), percent, digits = 1) %>%
arrange(-Sharpe)
}
資産クラス間の相関係数
ETF を分析する目的は、様々な資産クラスへの分散投資にるリスク分散だ。まず、株式・米国債・不動産・コモディティ・ボラティリティの 5 つの資産クラスから代表的な銘柄を選んで、相関関係を見てみる。
asset_class <- list()
asset_class$symbols <- c("SPY", "IYR", "GLD", "TLT", "VXX")
asset_class$data <- data %>%
filter(symbol %in% asset_class$symbols) %>%
align_start_date()
asset_class$cor_plot <- plot_ggpairs(asset_class$data)
asset_class$cor_plot
株式 (SPY) との関係でみると、
- 不動産 (IYR) は 「強い正の相関」
- 金 (GLD) は 「無相関」
- 米国債 (TLT) は 「負の相関」
- ボラティリティ (VXX) は 「強い負の相関」
という、概ね想像通りの結果になった。
なお、資産クラス間の相関関係は、常に一定ではなく、時期によって変動する。特に金融危機時には、多くの資産が正の相関になることが知られている。こうした時変的な相関係数は、DCC モデルなどによってモデル化することができるが、この記事では触れない。
各資産クラス毎の分析
以降で、淡々と各資産クラスごとのパフォーマンスを見ていく。パフォーマンスのプロットは PerformanceAnalytics::charts.PerformanceSummary
を参考に {ggplot2}
で作成したものである。
パフォーマンス指標の説明は以下の通りだ。これらも順次増やしていきたい。
指標 | 説明 |
---|---|
Sharpe |
シャープレシオ (年換算) |
Alpha |
CAPM アルファ |
Beta |
CAPM ベータ |
Avg_Ret |
年率リターン |
Cum_Ret |
累積リターン |
StdDev |
標準偏差 (年換算) |
MaxDD |
最大ドローダウン |
エクイティ ETFs
インデックスの種類
S&P 指数とラッセル指数は、階層構造になっていて、若干覚えにくいため、ここに整理しておく。
-
S&P US Index
- S&P Composite 1500
- S&P 500
- S&P MidCap 400
- S&P SmallCap 600
- S&P 900 (Upper)
- S&P 500
- S&P MidCap 400
- S&P 1000 (Lower)
- S&P MidCap 400
- S&P SmallCap 600
- S&P Composite 1500
-
Russel US Index
- Russel 3000
- Russel 1000 (Upper)
- Russel 2000 (Lower)
- Russel 3000
データの準備
equity <- list()
equity$data <- data %>%
filter(class == "Equity") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
equity$perf_plot <- plot_perf_summary(equity$data, offset = 0.15)
equity$perf_plot
パフォーマンス (テーブル)
equity$perf_table <- calc_perf_metrices(equity$data, etfs, benchmark = "SPY")
equity$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 IJH S&P MidCap 400 0.45 0.00012 1.01 9.3% 458.9% 20.5% 55.1%
2 IJR S&P SmallCap 600 0.45 0.00015 1.04 10.0% 532.6% 22.0% 58.2%
3 DIA Dow 30 0.43 0.00007 0.92 7.6% 317.0% 17.9% 51.9%
4 IWB Russel 1000 0.35 0.00002 0.97 6.4% 234.5% 18.6% 55.4%
5 IWM Russel 2000 0.35 0.00007 1.10 8.0% 348.3% 23.1% 58.6%
6 SPY S&P 500 0.33 0.00000 1.00 6.2% 223.3% 18.8% 55.2%
7 QQQ NASDAQ 100 0.22 -0.00001 1.18 5.7% 195.5% 26.2% 80.5%
相関係数
equity$cor_plot <- plot_ggpairs(equity$data)
equity$cor_plot
セクター ETFs
セクターの分類
セクターの分類方法にはいくつかの種類があるが、ここでは GICS Sector の分類に従った Select Sector SPDR ETFs シリーズの ETF を利用する。現在 11 のセクターに分類されているが、XLRE と XLC は近年追加されたものであるため、今回は除外する。
シンボル | セクター | 主要銘柄 | メモ |
---|---|---|---|
XLB | Materials | LIN, DD, ECL | |
XLE | Energy | XOM, CVX, COP | |
XLF | Finance | BRK.B, JPM, BAC | |
XLI | Industrial | BA, HON, UNP | |
XLK | Technology | MSFT, AAPL, V | |
XLP | Consumer Staples | PG, KO, PEP | 生活必需品 |
XLU | Utilities | NEE, DUK, D | |
XLV | Health | JNJ, PFE, UNH | |
XLY | Consumer Discretionary | AMZN, HD, MCD | 一般消費財 |
XLRE | Real Estate | AMT, CCI, PLD | 2015-10-08 から取引開始 |
XLC | Communication Service | FB, GOOG, DIS | 2018-11-03 から取引開始 |
データの準備
us_sector <- list()
us_sector$data <- data %>%
filter(class == "US Sector" | symbol == "SPY") %>% # ベンチマークとして SPY を含める
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
us_sector$perf_plot <- plot_perf_summary(us_sector$data, offset = 0.15)
us_sector$perf_plot
パフォーマンス (テーブル)
us_sector$perf_table <- calc_perf_metrices(us_sector$data, etfs, benchmark = "SPY")
us_sector$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 XLV Health 0.45 0.00014 0.73 8.1% 407.6% 17.8% 39.2%
2 XLP Consumer Staples 0.43 0.00012 0.53 6.4% 266.1% 14.9% 35.9%
3 XLY Consumer Discretionary 0.41 0.00012 0.97 9.1% 509.5% 21.8% 59.0%
4 XLI Industrial 0.39 0.00008 0.96 8.1% 410.5% 20.8% 62.3%
5 XLU Utilities 0.39 0.00016 0.58 7.3% 330.8% 18.4% 52.3%
6 SPY S&P 500 0.34 0.00000 1.00 6.5% 274.6% 19.0% 55.2%
7 XLB Materials 0.32 0.00009 0.96 7.6% 363.1% 23.8% 59.8%
8 XLE Energy 0.25 0.00009 0.97 6.7% 288.0% 26.8% 57.4%
9 XLK Technology 0.24 0.00000 1.14 6.1% 242.8% 25.4% 82.0%
10 XLF Financials 0.18 -0.00002 1.28 5.5% 207.4% 30.2% 82.7%
相関係数
us_sector$cor_plot <- plot_ggpairs(us_sector$data)
us_sector$cor_plot
米国債 ETFs
データの準備
treasury <- list()
treasury$data <- data %>%
filter(class == "Treasury" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
treasury$perf_plot <- plot_perf_summary(treasury$data, offset = 0.12)
treasury$perf_plot
パフォーマンス (テーブル)
treasury$perf_table <- calc_perf_metrices(treasury$data, etfs, benchmark = "SPY")
treasury$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 SHV Short Term 2.72 0.00004 0.00 1.0% 13.8% 0.4% 0.4%
2 SHY 1-3 Year 1.42 0.00009 -0.03 1.9% 27.6% 1.4% 2.2%
3 IEF 7-10 Year 0.75 0.00026 -0.15 5.0% 87.2% 6.7% 10.4%
4 TIP Inflation Protected 0.66 0.00019 -0.07 4.0% 66.2% 6.1% 14.4%
5 TLT 20+ Year 0.48 0.00043 -0.32 6.8% 131.6% 14.2% 26.6%
6 SPY S&P 500 0.43 0.00000 1.00 8.4% 181.9% 19.4% 55.2%
相関係数
treasury$cor_plot <- plot_ggpairs(treasury$data)
treasury$cor_plot
社債 ETFs
データの準備
corp_bond <- list()
corp_bond$data <- data %>%
filter(class == "Corp Bond" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
corp_bond$perf_plot <- plot_perf_summary(corp_bond$data, offset = 0.15)
corp_bond$perf_plot
パフォーマンス (テーブル)
corp_bond$perf_table <- calc_perf_metrices(corp_bond$data, etfs, benchmark = "SPY")
corp_bond$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 LQD Investment Grade 0.69 0.00021 0.04 5.6% 98.5% 8.1% 21.5%
2 HYG High Yield 0.46 0.00008 0.38 5.4% 92.7% 11.6% 34.2%
3 SPY S&P 500 0.43 0.00000 1.00 8.4% 177.2% 19.5% 55.2%
4 PFF Preffered Stock 0.21 0.00002 0.57 4.2% 67.8% 20.2% 65.5%
相関係数
corp_bond$cor_plot <- plot_ggpairs(corp_bond$data)
corp_bond$cor_plot
不動産 ETFs
データの準備
real_estate <- list()
real_estate$data <- data %>%
filter(class == "Real Estate" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
real_estate$perf_plot <- plot_perf_summary(real_estate$data, offset = 0.2)
real_estate$perf_plot
パフォーマンス (テーブル)
real_estate$perf_table <- calc_perf_metrices(real_estate$data, etfs, benchmark = "SPY")
real_estate$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 IYR Dow Jones U.S. Real Estate 0.36 0.00022 0.98 9.7% 495.9% 26.7% 74.1%
2 SPY S&P 500 0.31 0.00000 1.00 5.8% 199.8% 18.8% 55.2%
相関係数
real_estate$cor_plot <- plot_ggpairs(real_estate$data)
real_estate$cor_plot
コモディティ ETFs
データの準備
commodity <- list()
commodity$data <- data %>%
filter(class == "Commodity" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
commodity$perf_plot <- plot_perf_summary(commodity$data, offset = 0.1)
commodity$perf_plot
パフォーマンス (テーブル)
commodity$perf_table <- calc_perf_metrices(commodity$data, etfs, benchmark = "SPY")
commodity$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 SPY S&P 500 0.46 0.00000 1.00 8.7% 209.2% 19.0% 55.2%
2 GLD Gold 0.31 0.00028 0.02 5.7% 111.1% 18.4% 45.6%
3 SLV Silver 0.03 0.00010 0.33 1.0% 13.8% 31.2% 72.4%
4 USO Crude Oil -0.36 -0.00058 0.72 -12.3% -83.0% 33.8% 93.2%
相関係数
commodity$cor_plot <- plot_ggpairs(commodity$data)
commodity$cor_plot
ボラティリティ ETFs
データの準備
volatility <- list()
volatility$data <- data %>%
filter(class == "Volatility" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
volatility$perf_plot <- plot_perf_summary(volatility$data, offset = 0.2)
volatility$perf_plot
パフォーマンス (テーブル)
volatility$perf_table <- calc_perf_metrices(volatility$data, etfs, benchmark = "SPY")
volatility$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 SPY S&P 500 0.96 0.00000 1.00 15.3% 363.9% 15.9% 21.8%
2 VXX S&P 500 VIX Short-Term Future -0.88 -0.00047 -3.17 -55.3% -100.0% 62.9% 100.0%
相関係数
volatility$cor_plot <- plot_ggpairs(volatility$data)
volatility$cor_plot
FX ETFs
データの準備
forex <- list()
forex$data <- data %>%
filter(class == "Forex" | symbol == "SPY") %>%
align_start_date() %>%
add_cumret_dd()
パフォーマンス (プロット)
forex$perf_plot <- plot_perf_summary(forex$data, offset = 0.1)
forex$perf_plot
パフォーマンス (テーブル)
forex$perf_table <- calc_perf_metrices(forex$data, etfs, benchmark = "SPY")
forex$perf_table
Symbol Index Sharpe Alpha Beta Avg_Ret Cum_Ret StdDev MaxDD
1 SPY S&P 500 0.44 0.00000 1.00 8.6% 185.2% 19.4% 55.2%
2 FXF CHF 0.10 0.00008 -0.01 1.2% 16.3% 11.4% 33.4%
3 UUP USD 0.09 0.00008 -0.09 0.8% 10.6% 8.5% 22.2%
4 FXY JPY 0.02 0.00012 -0.22 0.2% 2.3% 10.3% 40.6%
5 FXE EUR -0.14 -0.00009 0.13 -1.3% -15.5% 9.7% 35.4%
6 FXB GBP -0.29 -0.00016 0.14 -2.9% -31.2% 9.8% 42.1%
相関係数
forex$cor_plot <- plot_ggpairs(forex$data)
forex$cor_plot