Ich weiß nicht, wie viele Menschen auf der Welt diese Berechnung durchführen müssen.
Die durchschnittliche paarweise Aktienkorrelation ist der Durchschnitt der Korrelationskoeffizienten der Preisbewegungen zwischen Aktien. Im Allgemeinen ist das Umfeld so, dass der Markt insgesamt während einer Krise wie dem Lehman-Schock oder der europäischen Schuldenkrise stark sinkt und dann als Reaktion stark ansteigt und der Korrelationskoeffizient zwischen Aktien steigt. Wenn die Korrelation springt, verhalten sich alle Aktien gleich und schaffen ein Marktumfeld, in dem es für aktive Aktieninvestoren schwierig ist, übermäßige Einnahmen aus der Aktienauswahl zu erzielen. Verwenden Sie diese Metrik, um das Risikoniveau Ihres Portfolios anzupassen (reduzieren Sie das Risiko, wenn Sie wahrscheinlich nicht gewinnen usw.). Als schlampigeres Beispiel verwenden aktive Aktienmanager dies als Ausrede, um zu sagen: "Ich habe in letzter Zeit nicht gewonnen, aber dies ist das Marktumfeld. Bitte verzeihen Sie mir."
Bereiten Sie zuerst die Daten vor. Bereiten Sie einen DataFrame (m x n) mit dem Datum vertikal (angenommen m Tage), den Beständen horizontal (angenommen n) und den täglichen Bestandsrenditen in jedem Element vor. Dieses Mal habe ich die Daten draußen vorbereitet und mit CSV gelesen. Dieser Artikel usw. laden Sie den Aktienkurs mit Pandas von Yahoo herunter und verwenden Sie die Methode "pct_change ()" für die tägliche Rückgabe Sie können es beheben.
Und schließlich werde ich den Korrelationskoeffizienten berechnen,
#Berechnung der paarweisen Korrelation(Das Ergebnis ist Panel)
result = df.rolling(window=60, min_periods=30).corr()
Die Berechnung der rollenden paarweisen Korrelation ist in dieser einen Zeile abgeschlossen! Was wir tun, ist "eine Korrelationsmatrix (nxn-Matrix) zu berechnen, die den Korrelationskoeffizienten zwischen allen Beständen für 60 Tage täglicher Rendite bis zu diesem Tag verwendet. Für Bestände, die 30 Tage lang keine Daten haben," Keine " Und wiederholen Sie dies für alle Daten. " Das resultierende "Ergebnis" ist ein "pandas.Panel" -Objekt, das ein zweidimensionaler "DataFrame" mit einer weiteren Achse (Zeitachse) ist, um es dreidimensional (m x n x n) zu machen.
Ich konnte die Korrelation berechnen, aber es erfordert einige Arbeit, um den Durchschnitt zu ermitteln. Da es sich um eine Korrelationsmatrix handelt, ist 1 in der Diagonalkomponente enthalten, und es ist erforderlich, den Durchschnitt ohne diese zu nehmen. 2) Wenn der Korrelationskoeffizient aufgrund von Datenverlust nicht berechnet werden kann, ist der Wert Keine enthalten. Es gibt zwei Gründe, warum Sie den Durchschnitt darüber nehmen müssen.
Zunächst ist es die diagonale Komponente 1, aber ich werde np.fill_diagonal ()
von Numpy
verwenden und in den Wert None
ändern. Verwenden Sie für einen einzelnen DataFrame so etwas wie "np.fill_diagonal (df, None)". Verwenden Sie diesmal jedoch die Methode "apply ()", um sie wie folgt auf das gesamte "Panel" anzuwenden:
#Konvertieren Sie die diagonale Komponente in Keine
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2))
Wenden Sie dann die Methode mean (skipna = True)
an, um den Durchschnittswert zu berechnen, wobei Sie den Wert None ignorieren. Dies ist die durchschnittliche paarweise Korrelation. Dies wird auch über die Zeitachse mit einer einzigen "apply ()" - Methode angewendet.
#Ignorieren Sie Keine und berechnen Sie den Durchschnitt
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))
Mit Panel.apply (..., axis = (1,2))
können Sie die Korrelationsmatrix zu jedem Zeitpunkt als DataFrame x
verarbeiten, während Sie die Zeitachse verschieben.
Die Berechnung ist abgeschlossen! Lassen Sie es uns planen.
apc.plot()
Sie können sehen, dass die Korrelation zu dem Zeitpunkt springt, zu dem der Markt von gelegentlichen Makrofaktoren beeinflusst wird.
Das ist alles, was Sie tun müssen, um den Code zusammenzustellen. Es ist einfach. Die Pandas werden nur vom Autor Wes McKinney während seiner Amtszeit bei AQR Capital, einem Hedgefonds, entwickelt, was den Umgang mit Finanzdaten sehr einfach macht.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Daten gelesen
df = pd.read_csv('data.csv', na_values=' ', index_col=0, parse_dates=True)
#Berechnung der paarweisen Korrelation(Das Ergebnis ist Panel)
result = df.rolling(window=60, min_periods=30).corr()
#Konvertieren Sie die diagonale Komponente in Keine
tmp = result.apply(lambda x: np.fill_diagonal(x.values, None), axis=(1,2))
#Ignorieren Sie Keine und berechnen Sie den Durchschnitt
apc = result.apply(lambda x: x.unstack().mean(skipna=True), axis=(1,2))
#Handlung
apc.plot()
Recommended Posts