Startseite » Meine kostenlosen ETF-Tools » Wie prüfe ich ETF-Überschneidungen in meinem Portfolio?

Wie prüfe ich ETF-Überschneidungen in meinem Portfolio?

Chris

Dipl.-Ingenieur, Software-Entwickler, #Buy-and-Hold #ETF #Investor, Freelancer

ETF Überschneidungen

Je mehr Aktien, Fonds oder ETFs sich in Deinem Portfolio anhäufen, desto wahrscheinlicher ist es, dass diese dieselben Aktien mehrfach enthalten und es somit zu Überschneidungen von ETF in Deinem Portfolio kommt. Somit erhöhst Du unabsichtlich den Anteil dieser Wertpapiere in Deinem Depot überproportional. Diese ETF Überschneidungen lohnt es sich zu prüfen!

Dies muss natürlich nicht unbedingt immer nachteilig sein, allerdings ist es gut, sich darüber im Klaren zu sein.
Im Folgenden möchte ich Dir ein Tool zeigen, mit dem Du sehr einfach die Überschneidungen zwischen ETF prüfen kannst. Für die ambitionierteren Anleger unter Euch stelle ich außerdem noch eine Möglichkeit vor, die Überschneidungen mit einem einfachen R-Script zu überprüfen.

UPDATE

Ich habe jetzt die in diesem Beitrag vorgestellten R-Scripte in einem kostenlosen Tool zusammengefasst, mit dem ihr die Zusammensetzung von einigen ETFs prüfen und vergleichen könnt.
Probiert es gerne einmal aus und gebt mir Feedback dazu!

Zugegeben, als ganz konsequenter Buy-and-Hold ETF-Anleger mit Weltportfolio-Ansatz dürften derartige Überschneidungen eigentlich nicht vorkommen, aber jeder hat schließlich eine Börsen-Historie, ein paar Karteileichen oder einfach Spass daran, nebenbei noch ein bisschen mit Einzelwerten zu spekulieren.

Ein sehr hilfreiches Werkzeug, um Überschneidungen Deiner Wertpapiere zu analysieren ist das Morningstar X-Ray Tool.

Wie funktioniert Morningstar X-Ray?

Im ersten Schritt musst Du Dich hierzu auf der Morningstar-Seite kostenlos registrieren und anschließend legst Du Dein Portfolio an.

Ich habe hier der Einfachheit halber in meinem Beispiel einfach ein Portfolio mit 90% MSCI World und 10% Apple Aktien gewählt, um Dir den Effekt zu zeigen.
Anschließend klickst Du auf den Tab “X-Ray” und dann im Dropdown “Zur Übersicht” den Eintrag “Überschneidung Positionen” auswählen.

Das Ergebnis sieht dann in etwa so aus:

Morningstar X-Ray Tool
Morningstar X-Ray Tool

Man kann hier erkennen:

  • die Apple-Aktie kommt 2 Mal in dem Portfolio vor: einmal mit 10% direkt gehalten und einmal indirekt im MSCI World mit 3,90% (genauer gesagt 90% von 4,34%)
  • dies ergibt eine insgesamte Gewichtung der Apple-Aktie von 13,90% in dem Beispiel-Portfolio

Wie gesagt, ob diese ETF-Überschneidungen jetzt gut oder schlecht ist, bleibt natürlich vollkommen Dir überlassen.
Das Ergebnis ist allerdings, dass die Apple-Aktie gegenüber dem reinen Benchmark-Index MSCI World übergewichtet ist. Der MSCI World Index bildet die Wertentwicklung von 23 Industrieländern ab und gewichtet die einzelnen Aktien im ETF nach deren Marktkapitalisierung, das bedeutet nach dem Wert der Aktien, die frei handelbar sind. Wenn Apple fiktiv 100 Aktien ausgegeben hätte und die Apple-Aktie aktuell bei einem Kurs von 50,- € stehen würde, wäre die Marktkapitalisierung von Apple

100 * 50,- € = 5.000 €

Dies wird für jedes einzelne Unternehmen ermittelt und danach die Indexzusammensatzung des MSCI World automatisiert berechnet. Wenn wir nun also zusätzlich zum MSCI World noch weitere Anteile der Apple Aktie kaufen wie in unserem Beispiel, entsteht eine Überschneidung in unserem Portfolio und damit eine Übergewichtung. Dies kann natürlich absolut Sinn machen, wenn Du davon ausgehst, dass Apple noch besonders viel Potential hat, aber es kann auf der anderen Seite natürlich auch zu Klumpenrisiken führen, so dass die breite Diversifizierung des MSCI World durch viele Überschneidungen wieder verringert wird.

Überschneidungen können natürlich in jeglicher Form auftreten, d.h. wenn Du statt der einzelnen Apple-Aktie zum Beispiel einen Europa-ETF mit in das Portfolio aufnimmst, entstehen für etliche ETF-Positionen Überschneidungen und Übergewichtungen. Es macht also in jedem Fall Sinn, in regelmäßigen Abständen die ETF Überschneidungen im Portfolio zu prüfen.

ETF Überschneidungen prüfen mit R

Für die ambitionierteren Anleger unter Euch möchte ich noch eine weitere Möglichkeit erläutern, wie man ETF Überschneidungen in seinem Portfolio prüfen kann. Dazu müsst ihr Euch ein wenig mit der Programmiersprache R auskennen oder zumindest in der Lage sein, meine (einfachen) Code-Beispiele nachvollziehen zu können. Ich gehe das R-Script aber im Folgenden Schritt für Schritt mit Euch durch. Am einfachsten könnt ihr die Beispiele in R Studio auf dem Mac ausführen.

Das R-Script verwendet die von iShares zur Verfügung gestellten CSV-Daten, die für jeden ETF die einzelnen Aktien inklusive deren Gewichtung im Index zum jeweiligen Zeitpunkt auflisten. Für einen ETF auf den MSCI World Index beispielsweise findet ihr die Datei auf der iShares Website im Bereich “Positionen” und dort unter “Fondspositionen und Kennzahlen”.

Als erstes laden wir dann die benötigte R-Library und definieren eine Hilfsfunktion, die das Einlesen der CSV-Datei und das Filtern auf die benötigten Spalten vornimmt. Als Parameter geben wir der Funktion ganz einfach die iShares-URL und den Namen des Index mit.

library(tidyverse)

importEtfHoldings <- function(url, indexName) {
  return(read_csv(url, skip = 2) %>%
    select("Name", "ISIN", "Gewichtung (%)") %>%
    rename("Weight" = "Gewichtung (%)") %>%
    mutate(Weight = as.double(sub(",", ".", Weight, fixed = TRUE))) %>%
    add_column(Index = indexName))
}

Anschließend nutzen wir diese erstellte Funktion, um die Daten der verschiedenen (iShares) ETFs, die uns interessieren, in einzelne Variablen zu laden. Für den MSCI World ETF mit der WKN A0RPWH sieht das dann beispielsweise so aus:

msci_world <- importEtfHoldings("https://www.ishares.com/de/privatanleger/de/produkte/251882/ishares-msci-world-ucits-etf-acc-fund/1478358465952.ajax?fileType=csv&fileName=EUNL_holdings&dataType=fund", "MSCI World")

Zusätzlich fügen wir in meinem Beispiel einen Emerging Markets ETF sowie einen Nasdaq 100 ETF hinzu:

msci_emerging_markets <- importEtfHoldings("https://www.ishares.com/de/privatanleger/de/produkte/251858/ishares-msci-emerging-markets-ucits-etf-acc-fund/1478358465952.ajax?fileType=csv&fileName=EUNM_holdings&dataType=fund", "MSCI EM")
nasdaq_100 <- importEtfHoldings("https://www.ishares.com/de/privatanleger/de/produkte/253741/ishares-nasdaq-100-ucits-etf/1478358465952.ajax?fileType=csv&fileName=SXRV_holdings&dataType=fund", "Nasdaq 100")

Dann kombinieren wir alle Daten zu einem gemeinsamen Portfolio. Hierzu berücksichtigen wir die verschiedenen Gewichtungen für die einzelnen ETFs, in meinem Beispiel sind dies:

IndexGewichtung
MSCI World65%
MSCI Emerging Markets20%
Nasdaq 10015%
portfolio <- bind_rows(
  msci_world %>% mutate(Weight = 0.65*Weight),
  msci_emerging_markets %>% mutate(Weight = 0.2*Weight),
  nasdaq_100 %>% mutate(Weight = 0.15*Weight)
)

Jetzt sind wir soweit und können das Ergebnis mit R berechnen lassen.
Hierzu gruppieren wir das Portfolio nach der eindeutigen ISIN-Wertpapierkennnummer und filtern auf alle Aktien, die öfter als 1 Mal in unserem Portfolio vorkommen und sortieren anschließend absteigend nach deren Gewichtung, so dass die am höchsten gewichteten Aktien ganz oben stehen:

portfolio %>%
  filter(Weight > 0) %>%
  filter(ISIN != "-") %>% 
  group_by(ISIN) %>% 
  filter(n()>1) %>%
  summarise(Weight = sum(Weight, na.rm = TRUE), Name = first(Name), Count=n(), Index = toString(sort(unique(Index)))) %>%
  arrange(desc(Weight))

Das Ergebnis sieht bei mir – Stand 19.2.2021 – folgendermaßen aus:

# A tibble: 102 x 5
   ISIN         Weight Name                   Count Index                 
   <chr>         <dbl> <chr>                  <int> <chr>                 
 1 US0378331005  4.39  APPLE INC                  2 MSCI World, Nasdaq 100
 2 US5949181045  3.53  MICROSOFT CORP             2 MSCI World, Nasdaq 100
 3 US0231351067  2.97  AMAZON COM INC             2 MSCI World, Nasdaq 100
 4 US88160R1014  1.43  TESLA INC                  2 MSCI World, Nasdaq 100
 5 US02079K1079  1.31  ALPHABET INC CLASS C       2 MSCI World, Nasdaq 100
 6 US30303M1027  1.30  FACEBOOK CLASS A INC       2 MSCI World, Nasdaq 100
 7 US02079K3059  1.25  ALPHABET INC CLASS A       2 MSCI World, Nasdaq 100
 8 US67066G1040  0.872 NVIDIA CORP                2 MSCI World, Nasdaq 100
 9 US70450Y1038  0.803 PAYPAL HOLDINGS INC        2 MSCI World, Nasdaq 100
10 US4581401001  0.614 INTEL CORPORATION CORP     2 MSCI World, Nasdaq 100
# … with 92 more rows

Wir sehen, es gibt zwischen Nasdaq 100 und MSCI World ETF (Spalte “Index”) insgesamt 102 Überschneidungen. In der Spalte “Weight” steht die Gesamt-Gewichtung in unserem Portfolio unter Berücksichtigung der einzelnen ETF-Gewichte, die wir oben bei der Definition des Portfolios angegeben haben.

Um abschließend einen Vergleich der Gewichtungen zu erhalten, wie das Portfolio ohne den Nasdaq 100 ETF aussähe, müsst ihr nur die Portfolio-Gewichte verändern und den Filter entfernen:

portfolio <- bind_rows(
  msci_world %>% mutate(Weight = 0.8*Weight),
  msci_emerging_markets %>% mutate(Weight = 0.2*Weight)
)

portfolio %>%
  filter(Weight > 0) %>%
  filter(ISIN != "-") %>% 
  group_by(ISIN) %>% 
  summarise(Weight = sum(Weight, na.rm = TRUE), Name = first(Name), Count=n(), Index = toString(sort(unique(Index)))) %>%
  arrange(desc(Weight))

Das Ergebnis ohne den Nasdaq 100 ETF ist in meinem Beispiel folgendes:

# A tibble: 2,401 x 5
   ISIN         Weight Name                               Count Index     
   <chr>         <dbl> <chr>                              <int> <chr>     
 1 US0378331005  3.31  APPLE INC                              1 MSCI World
 2 US5949181045  2.6   MICROSOFT CORP                         1 MSCI World
 3 US0231351067  2.09  AMAZON COM INC                         1 MSCI World
 4 TW0002330008  1.33  TAIWAN SEMICONDUCTOR MANUFACTURING     1 MSCI EM   
 5 KYG875721634  1.28  TENCENT HOLDINGS LTD                   1 MSCI EM   
 6 US01609W1027  1.17  ALIBABA GROUP HOLDING ADR REPRESEN     1 MSCI EM   
 7 IE00BQT3WG13  0.992 ISH MSCI CHINA A ETF USD ACC           1 MSCI EM   
 8 US30303M1027  0.976 FACEBOOK CLASS A INC                   1 MSCI World
 9 US02079K1079  0.944 ALPHABET INC CLASS C                   1 MSCI World
10 US02079K3059  0.936 ALPHABET INC CLASS A                   1 MSCI World
# … with 2,391 more rows

Wie man sieht, hat sich z.B. die Apple-Position durch 15% Hinzunahme des Nasdaq 100 ETFs von 3,31% Gewichtung auf 4,39% erhöht.

Zur Überprüfung meines Scripts könnt ihr auch einmal die Überschneidungen zwischen einem ETF auf den MSCI World und den MSCI Emerging Markets berechnen und erhaltet folgendes Ergebnis:

# A tibble: 1 x 5
  ISIN         Weight Name          Count Index     
  <chr>         <dbl> <chr>         <int> <chr>     
1 NL00150001Q9  0.056 STELLANTIS NV     2 MSCI World 

Wie zu erwarten gibt es keine relevante Überschneidung. Das einzige Ergebnis ist eine doppelte Position in den iShares-Daten im MSCI World.

Wenn ihr zusätzlich prüfen wollt, welche ETF Überschneidungen sich im Fall von Einzelaktien ergeben, könnt ihr das folgende Beispiel der Apple-Aktie verwenden:

apple <- tibble("Name" = "Apple", "ISIN" = "US0378331005", "Weight" = 100.0)
portfolio <- bind_rows(
  msci_world %>% mutate(Weight = 0.5*Weight),
  apple %>% mutate(Weight = 0.5*Weight)
)

Das Ergebnis ist – wie zu erwarten – eine sehr große Überschneidung:

# A tibble: 3 x 5
  ISIN         Weight Name                      Count Index     
  <chr>         <dbl> <chr>                     <int> <chr>     
1 US0378331005 52.1   APPLE INC                     2 MSCI World
2 NL00150001Q9  0.035 STELLANTIS NV                 2 MSCI World
3 -             0.015 CASH COLLATERAL USD BZFUT     2 MSCI World

Ich hoffe, das gibt Euch ein paar Tools an die Hand, um Eure Portfolio-Gewichtungen sichtbar zu machen.

Prüft ihr die ETF Überschneidungen in Eurem Portfolio aktuell? Falls ja, wie?

Disclaimer: Meine kostenlosen und freien Recherchen stellen meine persönliche Meinung dar und sind in keinster Weise eine Anlageempfehlung. Sie werden mit größtmöglicher Sorgfalt erstellt, aber sie können trotzdem ganz oder teilweise falsch sein. Daher übernehme ich keinerlei Haftung für Anlageentscheidungen, die auf Basis der hier vermittelten Informationen getroffen werden. Des Weiteren erhebt diese Website keinen Anspruch auf Vollständigkeit, Richtigkeit und Aktualität.

14 Gedanken zu „Wie prüfe ich ETF-Überschneidungen in meinem Portfolio?“

  1. Hallo Chris,

    vielen Dank für den Code. Allerdings scheinen die csv Dateien bei Ishares nun nicht mehr das Feld „ISIN“ zu beinhalten, so dass die Ausführung zu fehlern führt.

    Klammert man die ISIN Befehle aus, läuft es gut durch. Brauche ich diese zwingend?

    1. Guten Morgen Matthias,

      tatsächlich hat Ishares die ISIN als Feld wohl aus dem CSV entfernt 🙁

      Für die reine Analyse der Ishares ETFs untereinander ist das aber egal, nur wenn Du ETFs unterschiedlicher Anbieter auf Überschneidungen prüfen möchtest, habe ich dies bisher auf Basis der ISIN als eindeutigem Identifier gemacht. Das geht dann leider nicht mehr.. Schade!
      Ich werde mir das mal anschauen und prüfen, welchen Identifier man alternativ verwenden könnte. Der Ticker scheint ja über verschiedene Anbieter nicht wirklich eindeutig zu sein.
      Bei Ideen immer her damit 😉

      Viele Grüße,
      Chris

  2. Hallo Chris,

    tolles Skript, werde ich gleich mal anwenden! Vielen Dank dafür! Um weitere Anbieter hinzufügen zu können (neben ishares) ist wahrscheinlich neben der Bereitstellung die Aufschlüsselung und vor allem die Verarbeitung im Skript entscheidend, oder?

    1. Hi Matthias,

      vielen Dank für Deinen Kommentar!

      Richtig. Ich werde bald (sorry ich wollte das schon längst machen) den Code für weitere Anbieter wie DWS, Lyxor, Amundi, UBS und Vanguard veröffentlichen.
      Das Prinzip ist aber immer dasselbe.

      Ich schreibe hier in den Kommentaren, sobald der Code verfügbar ist.

      Viele Grüße,
      Chris

  3. Moin,
    berichtigt mich Bitte falls ich falsch liege..
    Wenn ich jetzt 5 Apple Aktien habe und 50 anteile im Msci World und sagen wir mal beide steigen um 1% dann mache ich doch effektiv mehr rendite mit dem Msci world als mit meinen Apple Aktien oder?

    Wobei apple ja auch des öfteren eine bessere Gesamt Performance als der Msci World macht…
    Bin unentschlosssn

    Lg
    Sorry für die Rechtschreibung

    1. Guten Morgen Danyo,

      danke für Deinen Kommmentar auf meinem Blog!

      Bitte beachte, dass der Blogbeitrag und auch mein Kommentar natürlich keine Anlageberatung ist und nur meine persönliche Meinung darstellt.

      Ich kann Deine Rechnung leider noch nicht ganz nachvollziehen. Was meinst Du mit „effektiv mehr rendite“?
      In absoluten Werten (d.h. Anzahl mal aktueller Kurs) werden sich die beiden Depotpositionen natürlich unterscheiden, für die Rendite ist das aber egal, da sie das Verhältnis zwischen Gewinn und initialem Kapital angibt. Daher eignet sich diese ja so gut für Vergleiche zwischen verschiedenen Anlagen mit unterschiedlichem Anfangskapital.
      Nehmen wir an, dass beide Positionen – unabhängig vom Einstandskurs – seit Jahresanfang um 1% gestiegen sind, dann ist auch Deine (Brutto-)Rendite 1% – ohne Berücksichtigung von Kosten und Steuern.

      Bei Einzelaktien wie Apple hast Du die Chance auf höhere Gewinne aber verbunden mit einem deutlich höheren Risiko im Vergleich zum Gesamtmarkt wie dem MSCI All Country World.
      Lies Dir dazu am besten auch die Informationsdokumente von Deinem Broker zu den einzelnen Anlageprodukten durch.

      Viele Grüße,
      Chris

  4. Hervorragende Möglichkeit.
    Bei Fonds statt ETFs scheitere ich derzeit noch daran verwertbare (strukturierte) Daten zu finden (CSV etc.). Dies scheint, bis auf die üblichen Top 10 Positionen in den PDFs, nicht gewollt.

    Oder irre ich mich und es gibt für jeden Fond auch eine umfangreiche Quelle (Bsp.: A0CA0W)?

    1. Hi Gustav,

      danke für Deinen Kommentar!

      Ja, Du hast Recht, die Datenqualität und ob überhaupt Daten zur Verfügung stehen, hängt sehr vom jeweiligen Anbieter ab. Ich habe die Daten für die ETFs immer von den jeweiigen Anbieter-Websites (wie bspw. Ishares) genommen und da sind tatsächlich die vollständigen Holdings i.d.R. als Excel- oder CSV-Datei verfügbar. Aber z.B. für den von Dir genannten Fonds habe ich auch auf Anhieb leider nichts gefunden.

      Das ist wirklich schade. Um an solche Daten zu kommen, sollte es nicht notwendig sein, irgendeinen (teuren) API-Service o.ä. kaufen zu müssen..
      Ggfs. kannst Du mal den Anbieter anschreiben?

      Viele Grüße,
      Chris

      1. Hi Chris,

        Danke der Antwort. Habe tatsächlich den Fondsmanager angeschrieben und eine sehr umfassende PDF erhalten. Das war allerdings sinnfrei, da Fondsbeschreibung, in der die Positionen nur sehr umständlich rauszulesen sind. Will heißen: Keine strukturierte Bereitstellung.

        Das ist insofern merkwürdig, als das man dafür ja immerhin Geld bezahlt.

        Viele Grüße, Gustav

        1. Hi Gustav,

          naja immerhin, einen Schritt weiter 🙂 Enthält das PDF alle Positionen oder nur die Top X?
          Je nachdem wie gut das PDF aufbereitet ist, könnte man versuchen, die Informationen daraus per Script auszulesen und z.B. in CSV/Excel zu konvertieren.

          Wenn Du mir das Dokument irgendwo zur Verfügung stellen magst, kann ich es mir gerne mal ansehen.

          Viele Grüße,
          Chris

      2. Hi Chris, congratulations for your blog. It is really interesting. I was thinking on how to achieve the same and you found a way. When will you make the source code public? I am looking forward to learn and analyse & optimize my portofolio allocation.
        Best, Alex

        1. Hi Alex,

          thanks very much for your feedback!

          I know, I’m still owing you the source code and I’m really sorry for the delay. Lot’s of exciting tools to come here to my blog, that’s why it will take some time to prepare everything.

          If everything goes well, I plan to make the source code available by the mid of October. I would be glad if you come back again then and check it out.

          Best regards,
          Chris

        1. Hi Jim,

          vielen Dank für Deinen Kommentar!

          Ich werde in Kürze eine R-Library veröffentlichen, mit der auch Daten der DWS, Lyxor und einige andere ETF-Anbieter verarbeitet werden können.
          Das Prinzip ist aber dasselbe wie hier bereits gezeigt.

          Viele Grüße,
          Chris

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.