ETFS (Exchange Traded Funds) werden immer beliebter bei Privatanlegern. Mit geringen Kosten bilden sie einen Index nach; beliebt ist v.a. die Investition in einen ETF, welcher den MSCI World Index nachbildet. Doch gibt es noch sehr viel mehr ETFs auf dem Markt. Im Folgenden eine kleine Analyse der vielen Möglichkeiten; jeweils mit Blick auf die relative Entwicklung, um die unterschiedlichen Kurse vergleichen zu können.
Als Erstes betrachten wir den Unterschied in der Auszahlung: entweder werden die Dividenden der Aktien im Index ausgeschüttet oder thesauriert - also wieder neu in den ETF investiert. Der Wert von thesaurierenden ETFs entwickelt sich somit mehr als bei ausschüttenden ETFs:
ETFs zu MSCI World sind so beliebt, weil sie einfach die gesamte Weltwirtschaft abdecken und somit eine bequeme Kapitalanlage ermöglichen. Wobei dazu gesagt werden muss, dass der MSCI World nur Aktien in Industrieländern abbildet. Im Index MSCI ACWI sind auch 27 Schwellenländer dabei (im folgenden mit dem Label "incl.emerging"):
Doch kann man mit ETFs auch differenzierter investieren; zB in Regionen:
Auch in unterschiedliche Firmengrößen kann investiert werden:Dass die Wertentwicklung eine Frage der Zeit ist zeigt der Vergleich der gleichen ETFs mit der Entwicklung ab 2019, also ein Jahr später. Hier zeigt sich das klassische Muster, dass sich der Kurs kleinerer Firmen langfristig besser entwickelt:Eine große Auswahl an Möglichkeiten zum Investieren also. Und welcher der hier gezeigten ETFs entwickelte sich am besten (ausgehend vom 01.01.2018)?
library(tidyquant)
library(dplyr)
library(ggplot2)
library(viridis)
library(directlabels)
library(dplyr)
library(gridExtra)
# Funktionalität von tidyquant
tq_get_options() #
# 1) thesaurierend vs. ausschüttend
etfs_v1 <- c("LCWL.L", #Aktien Industrieländer - thesaurierend, MSCI World Net Total Return USD Index
"WLD.MI" #Aktien Industrieländer - ausschüttend, MSCI World Net Total Return USD Index
)
prices_v1 <- tq_get(etfs_v1, get = "stock.prices", from = "2017-01-01")
prices_v1 %>%
mutate(etf = ifelse(symbol == "LCWL.L", "thesaurierend",
ifelse(symbol == "WLD.MI", "ausschüttend",
symbol))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
#scale_color_viridis(discrete=TRUE, option="magma") +
scale_x_date(expand = c(0,0,0.1, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("Ausschüttung"),
subtitle = ("MSCI World ETFs, relative Entwicklung"),
caption = "Plot1")
etfs_v1b <- c("LCWL.L", #Aktien Industrieländer - thesaurierend, MSCI World Net Total Return USD Index
"ACWI.PA" #Aktien weltweit - thesaurierend, MSCI AC World Net Return USD Index
)
prices_v1b <- tq_get(etfs_v1b, get = "stock.prices", from = "2017-01-01")
prices_v1b %>%
mutate(etf = ifelse(symbol == "LCWL.L", "Developed",
ifelse(symbol == "ACWI.PA", "incl.emerging",
symbol))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
#scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.1, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("'Worldwide'"),
subtitle = ("MSCI World ETFs, relative Entwicklung"),
caption = "Plot2")
# 2) Regionen ESG ETFs
etfs_v2 <- c("LESG.DE", #ESG Schwellenländer - thesaurierend, MSCI Emerging Markets Climate Change Net Total Return Index
"UESG.L", #ESG USA - thesaurierend, MSCI USA Climate Change Net Total Return Index
"WESG.L", #ESG Industrieländer - thesaurierend, MSCI World Select ESG Rating and Trend Leaders Net Return USD Index
"EESG.L", #ESG EU-Zone - thesaurierend, MSCI EMU Select ESG Rating and Trend Leaders Net Return (Verbesserung in ESG)
"ESGE.PA" #ESG europ. Industrieländer - thesaurierend, MSCI Europe ESG Leaders Net Total Return Index
)
prices_v2 <- tq_get(etfs_v2, get = "stock.prices", from = "2017-01-01")
prices_v2 %>%
mutate(etf = ifelse(symbol == "LESG.DE", "ESG_Emerging", ifelse(symbol == "UESG.L", "ESG_USA",
ifelse(symbol == "WESG.L", "ESG_Developed", ifelse(symbol == "EESG.L", "ESG_Euro",
ifelse(symbol == "ESGE.PA", "ESG_European", ifelse(symbol == "ACWI.PA", "ESG_Eur.Developed",
ifelse(symbol == "LCWL.L", "Developed", symbol)))))))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.15, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("Regionen"),
subtitle = ("Regionale ETFs - relative Entwicklung"),
caption = "Plot3")
# 3) Cap
etfs_v3 <- c("IS3G.DE", #Europa Large Cap - thesaurierend, MSCI EMU Large Cap Index
"EL43.DE", #Europa Mid Cap - ausschüttend, MSCI Europe Mid Cap Index
"MMS.PA" #Europa Small Cap - ausschüttend, MSCI EMU Small Cap Net Return EUR Index
)
prices_v3 <- tq_get(etfs_v3, get = "stock.prices", from = "2017-01-01")
prices_v3 %>%
mutate(etf = ifelse(symbol == "IS3G.DE", "Large_Cap",
ifelse(symbol == "EL43.DE", "Mid_Cap",
ifelse(symbol == "MMS.PA", "Small_Cap",
symbol)))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.1, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("Kapitalisierung"),
subtitle = ("European Market ETFS, relative Entwicklung"),
caption = "Plot4")
prices_v3 %>%
mutate(etf = ifelse(symbol == "IS3G.DE", "Large_Cap",
ifelse(symbol == "EL43.DE", "Mid_Cap",
ifelse(symbol == "MMS.PA", "Small_Cap",
symbol)))) %>%
subset(., date >= "2019-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.1, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("Kapitalisierung"),
subtitle = ("European Market ETFS, relative Entwicklung"),
caption = "Plot5")
# 4) Sektoren
etfs_v4 <- c("NRGW.L", #Energy Industrieländer - thesaurierend, MSCI World Energy Sector Net TR USD
"LYPD.DE", #Financials Industrieländer - thesaurierend, MSCI Daily TR World Net Financials USD
"LYHLTW.SW", #Healthcare Industrieländer - thesaurierend, MSCI Daily TR World Net Health Care USD
"STAW.L", #Basiskonsumgüter-Sektor Industrieländern - thesaurierend, MSCI Daily TR World Net Consumer Staples
"LYCODW.SW", #Nicht-Basiskonsumgüter-Sektor Industrieländern - thesaurierend, MSCI Daily TR World Net Consumer Discretionary USD
"LYPI.DE", #Medien Industrieländer - thesaurierend, MSCI Daily TR World Net Communication Services Sector USD
"LYPH.DE", #Rohstoffe Industrieländer - thesaurierend, MSCI Daily TR World Net Materials USD
"TNOW.PA" #IT Industrieländer, thesaurierend, MSCI Daily TR World Net Information Technology USD
)
prices_v4 <- tq_get(etfs_v4, get = "stock.prices", from = "2017-01-01")
prices_v4 %>%
mutate(etf = ifelse(symbol == "NRGW.L", "Energy",
ifelse(symbol == "LYPD.DE", "Financials",
ifelse(symbol == "LYHLTW.SW", "Healthcare",
ifelse(symbol == "STAW.L", "Consumer_Staples",
ifelse(symbol == "LYCODW.SW", "Consumer_Discretionary",
ifelse(symbol == "LYPI.DE", "Media",
ifelse(symbol == "LYPH.DE", "RawMaterial",
ifelse(symbol == "TNOW.PA", "IT",
symbol))))))))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.2, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("Sektoren"),
subtitle = ("worldwide ETFs - relative Entwicklung"),
caption = "Plot6")
# 5) strategische ETFs
etfs_v5_lyxor <- c("IQCY.L", #Smart Cities - thesaurierend, Basis MSCI ACWI IMI Smart Cities ESG Filtered Net Total Return Index
"GENY.L", #Millenials - thesaurierend, Basis MSCI ACWI IMI Millennials ESG Filtered Net Total Return Index
"MOBI.L", #Future Mobility - thesaurierend, Basis MSCI ACWI IMI Future Mobility ESG Filtered Net Total Return Index
"DIGE.L", #Digital Economy - thesaurierend, Basis MSCI ACWI IMI Digital Economy ESG Filtered Net Total Return Index
"UNIC.L" #Disruptive Technologies - thesaurierend, Basis MSCI ACWI IMI Disruptive technology ESG Filtered Index
)
prices_v5_lyxor <- tq_get(etfs_v5_lyxor, get = "stock.prices", from = "2017-01-01")
prices_v5_lyxor %>%
mutate(etf = ifelse(symbol == "IQCY.L", "Smart_Cities",
ifelse(symbol == "GENY.L", "Millenials",
ifelse(symbol == "MOBI.L", "Future_Mobility",
ifelse(symbol == "DIGE.L", "Digital_Economy",
ifelse(symbol == "UNIC.L", "Disruptive_Techn.",
symbol)))))) %>%
subset(., date >= "2020-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.15, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
#theme(legend.position="bottom", panel.grid.major = element_blank(),
# strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("strategische Ausrichtung"),
subtitle = ("Lyxor ETFs - relative Entwicklung"),
caption = "Plot7")
etfs_v5_blackrock <- c("AGED.L", #iShares Ageing Population
"ISAG.L", #iShares Agribusiness
"RBOT.L", #iShares Automation & Robotics
#"DGIT.L" ,#iShares Digitalisation
"LOCK.L", #iShares Digital Security
"ECAR.L", #iShares Electric Vehicles and Driving Technology
"CEMG.L", #iShares MSCI EM Consumer Growth (emerging countries)
"INRG.L", #iShares Global Clean Energy
"WOOD.L", #iShares Global Timber & Forestry
#"IH2O.L", #iShares Global Water
"HEAL.L", #iShares Healthcare Innovation
"OPEN.L" #iShares Refinitiv Inclusion and Diversity (fortschrittl Personalpolitik)
)
prices_v5_blackrock <- tq_get(etfs_v5_blackrock, get = "stock.prices", from = "2017-01-01")
prices_v5_blackrock %>%
mutate(etf = ifelse(symbol == "AGED.L", "Ageing_Population",
ifelse(symbol == "ISAG.L", "Agribusiness",
ifelse(symbol == "RBOT.L", "Robotics",
#ifelse(symbol == "DGIT.L", "Digitalisation",
ifelse(symbol == "LOCK.L", "Dig_Security",
ifelse(symbol == "ECAR.L", "Electr_Vehicles",
ifelse(symbol == "CEMG.L", "Emerging_ConsumerMarkets",
ifelse(symbol == "INRG.L", "Clean_Energy",
ifelse(symbol == "WOOD.L", "Forestry",
#ifelse(symbol == "IH2O.L", "Water",
ifelse(symbol == "HEAL.L", "Healthcare",
ifelse(symbol == "OPEN.L", "Diversity_HR",
symbol))))))))))) %>%
subset(., date >= "2018-06-01") %>%
group_by(etf) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=etf)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.15, 0)) +
geom_dl(aes(label = etf), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("strategische Ausrichtung"),
subtitle = ("Blackrock ETFs - relative Entwicklung"),
caption = "Plot8")
# 6) alle ETFs
etfs_v6 <- c("LCWL.L", #Aktien Industrieländer - thesaurierend, MSCI World Net Total Return USD Index
"WLD.MI", #Aktien Industrieländer - ausschüttend, MSCI World Net Total Return USD Index
"LESG.DE", #ESG Schwellenländer - thesaurierend, MSCI Emerging Markets Climate Change Net Total Return Index
"UESG.L", #ESG USA - thesaurierend, MSCI USA Climate Change Net Total Return Index
"WESG.L", #ESG Industrieländer - thesaurierend, MSCI World Select ESG Rating and Trend Leaders Net Return USD Index
"EESG.L", #ESG EU-Zone - thesaurierend, MSCI EMU Select ESG Rating and Trend Leaders Net Return (Verbesserung in ESG)
"ESGE.PA", #ESG europ. Industrieländer - thesaurierend, MSCI Europe ESG Leaders Net Total Return Index
"IS3G.DE", #Europa Large Cap - thesaurierend, MSCI EMU Large Cap Index
"EL43.DE", #Europa Mid Cap - ausschüttend, MSCI Europe Mid Cap Index
"MMS.PA", #Europa Small Cap - ausschüttend, MSCI EMU Small Cap Net Return EUR Index
"NRGW.L", #Energy Industrieländer - thesaurierend, MSCI World Energy Sector Net TR USD
"LYPD.DE", #Financials Industrieländer - thesaurierend, MSCI Daily TR World Net Financials USD
"LYHLTW.SW", #Healthcare Industrieländer - thesaurierend, MSCI Daily TR World Net Health Care USD
"STAW.L", #Basiskonsumgüter-Sektor Industrieländern - thesaurierend, MSCI Daily TR World Net Consumer Staples
"LYCODW.SW", #Nicht-Basiskonsumgüter-Sektor Industrieländern - thesaurierend, MSCI Daily TR World Net Consumer Discretionary USD
"LYPI.DE", #Medien Industrieländer - thesaurierend, MSCI Daily TR World Net Communication Services Sector USD
"LYPH.DE", #Rohstoffe Industrieländer - thesaurierend, MSCI Daily TR World Net Materials USD
"TNOW.PA", #IT Industrieländer, thesaurierend, MSCI Daily TR World Net Information Technology USD
"IQCY.L", #Smart Cities - thesaurierend, Basis MSCI ACWI IMI Smart Cities ESG Filtered Net Total Return Index
"GENY.L", #Millenials - thesaurierend, Basis MSCI ACWI IMI Millennials ESG Filtered Net Total Return Index
"MOBI.L", #Future Mobility - thesaurierend, Basis MSCI ACWI IMI Future Mobility ESG Filtered Net Total Return Index
"DIGE.L", #Digital Economy - thesaurierend, Basis MSCI ACWI IMI Digital Economy ESG Filtered Net Total Return Index
"UNIC.L", #Disruptive Technologies - thesaurierend, Basis MSCI ACWI IMI Disruptive technology ESG Filtered Index
"AGED.L", #iShares Ageing Population
"ISAG.L", #iShares Agribusiness
"RBOT.L", #iShares Automation & Robotics
#"DGIT.L" ,#iShares Digitalisation
"LOCK.L", #iShares Digital Security
"ECAR.L", #iShares Electric Vehicles and Driving Technology
"CEMG.L", #iShares MSCI EM Consumer Growth (emerging countries)
"INRG.L", #iShares Global Clean Energy
"WOOD.L", #iShares Global Timber & Forestry
#"IH2O.L", #iShares Global Water
"HEAL.L", #iShares Healthcare Innovation
"OPEN.L" #iShares Refinitiv Inclusion and Diversity (fortschrittl Personalpolitik)
)
prices_v6 <- tq_get(etfs_v6, get = "stock.prices", from = "2017-01-01")
prices_v6 %>%
subset(., date >= "2018-06-01") %>%
group_by(symbol) %>%
mutate(adjusted_rel = adjusted/first(adjusted)) %>%
ungroup() %>%
ggplot(aes(x = date, y = adjusted_rel, color=symbol)) +
geom_hline(yintercept = 1, color="grey") +
geom_line() +
theme_minimal() +
scale_color_viridis(discrete=TRUE, option="viridis") +
scale_x_date(expand = c(0,0,0.15, 0)) +
geom_dl(aes(label = symbol), method = list(dl.combine("last.points"), cex= 0.8)) +
theme(legend.position="none", panel.grid.major = element_blank(),
strip.background = element_blank()) +
scale_y_continuous(labels = scales::percent) +
labs(x = NULL, y = NULL,
title = paste("alle ETFs"),
subtitle = ("ETFs mit Yahoo Symbols - TNOW.PA zu IT in Industrieländern"),
caption = "Plot9")
Photo by Liza Summer from Pexels