LoginSignup
4
7

More than 3 years have passed since last update.

R で米国 ETF パフォーマンス分析

Last updated at Posted at 2019-11-13

米国の ETF について、各資産クラスの代表的な銘柄をリストアップし、主要なパフォーマンス指標をまとめてみたい。データの取得・作図・パフォーマンス指標の計算は、全て R を使って行う。

ライブラリの読み込み

まずは、今回の記事に必要なライブラリを読み込みから。

library(tidyverse)

## 株価の取得
library(tidyquant)

## data.frame から xts 含む時系列データへの変換 (またはその逆)
library(timetk)

## パフォーマンス指標の計算
library(PerformanceAnalytics)

## ggplot2 関連
library(GGally)
library(ggrepel)
library(patchwork)

## データの表示の体裁を整えるパッケージ
library(formattable)

データ

この記事で利用するデータや関数は全て以下の RData ファイルにまとめらている。

ダウンロード us-etf-research.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.csv

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

img

株式 (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
  • Russel US Index

    • Russel 3000
      • Russel 1000 (Upper)
      • Russel 2000 (Lower)

データの準備

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

img

パフォーマンス (テーブル)

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

img

セクター 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

img

パフォーマンス (テーブル)

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

img

米国債 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

img

パフォーマンス (テーブル)

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

img

社債 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

img

パフォーマンス (テーブル)

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

img

不動産 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

img

パフォーマンス (テーブル)

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

img

コモディティ 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

img

パフォーマンス (テーブル)

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

img

ボラティリティ 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

img

パフォーマンス (テーブル)

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

img

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

img

パフォーマンス (テーブル)

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

img

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7