Lassen Sie uns die Asset-Allokation durch das Black Ritterman-Modell erklären (mit einem Ausführungsbeispiel von Python).

Einführung

Das Black-Litterman-Modell ist die optimale Portfolioauswahlmethode für Investitionen. Aufgrund seiner Benutzerfreundlichkeit ist es in der Finanzpraxis weit verbreitet, da es im Vergleich zur Optimierung mit dem traditionellen Ansatz der durchschnittlichen Diversifikation intuitive und leicht verständliche Ergebnisse liefert. In diesem Artikel möchte ich anhand von Zahlen eine grobe Erklärung geben, was das Black Ritterman-Modell tut. Bitte überprüfen Sie die Referenzen auf Details wie das Ableiten von Formeln.

Black Ritterman Modellübersicht - Vergleich mit herkömmlichen Optimierungsmethoden

Traditionelle Optimierungsmethoden und ihre Probleme

Markovitz 'durchschnittlicher Diversifizierungsansatz berechnet das optimale Portfolio, indem er die erwartete Rendite und das erwartete Risiko (Kovarianzmatrix) jedes Vermögenswerts schätzt und den Kompromiss zwischen Maximierung der Rendite und Risikominimierung durch Optimierung der Berechnungen löst. Machen. BL1.PNG Obwohl dieser Ansatz leicht zu verstehen ist, weist er für die praktische Anwendung die folgenden Nachteile auf. —— Die Risiken sind relativ stabil und leicht abzuschätzen, aber die Renditen sind schwer vorherzusagen

In der Praxis wird dies daher durch Auferlegen verschiedener Einschränkungen (Positionsgröße, Fluktuationsrate usw.) bei der Optimierungsberechnung behoben. Um dieses Problem zu vermeiden, wurde das Black Ritterman-Modell entwickelt und weit verbreitet.

Black Ritterman Optimierungsfluss

Das Black Ritterman-Modell ist leicht zu verstehen, wenn Sie in den folgenden drei Schritten darüber nachdenken.

1. Finden Sie eine ausgeglichene erwartete Rendite durch umgekehrte Optimierung

Die Black Ritterman-Optimierung schätzt die erwarteten Renditen, die schwer abzuschätzen sind, nicht direkt. Stattdessen wählt der gesamte Markt das Portfolio durch Optimierung aus, dh das Marktwertgewicht (= Marktportfolio) auf dem aktuellen Markt ist das Ergebnis einer Optimierung, die die geschätzte Rendite und das vom Markt übernommene Risiko angibt. Angenommen, es wurde erhalten. Basierend auf dieser Idee kann die vom Markt erwartete erwartete Rendite (als ausgeglichene Rendite oder implizite Rendite bezeichnet) aus dem Marktwertgewicht (Marktportfolio) und dem geschätzten Risiko berechnet werden. Diese Methode wird als umgekehrte Optimierung bezeichnet, da sie die Optimierungsberechnung im mittleren Dispersionsansatz umkehrt. BL3.PNG

2. Das Bayes'sche Update verbindet die Sicht der Anleger mit ausgewogenen erwarteten Renditen

Passen Sie den erwarteten Renditewert an, indem Sie die Ansicht (Ausblick) des Anlegers mit der ausgeglichenen erwarteten Rendite kombinieren, die durch die umgekehrte Optimierung in 1 unter Verwendung der Bayes'schen Statistik erzielt wurde. Die Anlegeransicht wird in Form von Vorhersagen wie "Ein Vermögenswert übertrifft B-Vermögenswert um 3%" und "C-Vermögenswertrendite 5%" in das Modell aufgenommen. Sie können eine beliebige Anzahl von Prognosen eingeben und das Vertrauen der Anleger in jede Prognose als Parameter eingeben. Sehr zuversichtliche Vorhersagen wirken sich stärker auf die Rendite aus, und weniger zuversichtliche Vorhersagen wirken sich weniger auf die Rendite aus. BL4.PNG

3. Berechnen Sie das Portfolio durch Optimierungsberechnung

Schließlich berechnet der Optimierungsprozess das neue Portfolio basierend auf den aktualisierten erwarteten Renditen und Risiken. BL5.PNG

Beispiel für die Ausführung von Formeln und Python

Werfen wir einen Blick auf die Formeln, die im Black Ritterman-Modell angezeigt werden, sowie auf den in Python implementierten Code. Hier [He & Litterman (1999) -Papier](https://www.google.co.jp/url?sa=t&rct=j&q=1esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiNza-vodvLAhVI02MkHfUkuUkuUkuUkUu % 3A% 2F% 2Ffaculty.fuqua.duke.edu% 2F ~ charvey% 2FTeaching% 2FIntesaBci_2001% 2FGS_The_intuition_behind.pdf & usg = AFQjCNFAMN5avO_btVZg9P3jbGlEU5VMjw)

0. Vorbereitung

Das He & Litterman-Papier zeigt beispielhaft ein Portfolio von Aktienindizes in sieben Ländern (Australien, Kanada, Frankreich, Deutschland, Japan, Großbritannien und den Vereinigten Staaten). Das Marktwertgewicht $ w $, die Korrelationsmatrix und die Volatilität werden als Input angegeben.

Bereiten Sie diese Daten in Python vor. Die Kovarianzmatrix $ \ Sigma $ (Sigma) wird aus der Korrelationsmatrix ( Korrelation) und der Volatilität (std) berechnet.

python


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Gewicht
w = np.array([[0.016, 0.022, 0.052, 0.055, 0.116, 0.124, 0.615]]).T
#Korrelationsmatrix
correlation = np.array([
        [1, 0.488, 0.478, 0.515, 0.439, 0.512, 0.491],
        [0.488, 1, 0.664, 0.655, 0.310, 0.608, 0.779],
        [0.478, 0.664, 1, 0.861, 0.355, 0.783, 0.668],
        [0.515, 0.655, 0.861, 1, 0.354, 0.777, 0.653],
        [0.439, 0.310, 0.355, 0.354, 1, 0.405, 0.306],
        [0.512, 0.608, 0.783, 0.777, 0.405, 1, 0.652],
        [0.491, 0.779, 0.668, 0.653, 0.306, 0.652, 1]])
#Standardabweichung
std = np.array([[0.16, 0.203, 0.248, 0.271, 0.21, 0.2, 0.187]])
#Berechnen Sie die Kovarianzmatrix aus der Korrelationsmatrix und der Standardabweichung
Sigma = correlation * np.dot(std.T, std)
#Der Parameter Delta-Wert ist He&Litterman(1999)Folgen
delta = 2.5
#Der Parameter tau value ist He&Litterman(1999)Folgen
tau = 0.05

Darüber hinaus lauten die Symbole in den folgenden Formeln wie folgt. $ \ Pi $ Ausgewogene erwartete Rendite (nx1 Vektor) $ \ Pi '$ Erwartete Rendite für Anlegeransicht aktualisiert (Vektor nx1) $ w $ Anfangsgewicht (Vektor nx1) $ w '$ posteriores Gewicht (Vektor nx1) $ \ Sigma $ Kovarianzmatrix zurückgeben $ P $, $ Q $ Matrix mit Ansichten der Anleger $ \ Omega $ Matrix zeigt Vertrauen in die Sicht eines Anlegers Parameter $ \ Delta $ (repräsentiert die Vermeidung von Anlegerrisiken) Parameter $ \ tau $ (repräsentiert das Konfidenzintervall für die Kovarianzmatrix)

  1. Reverse Optimization

Der erste Schritt ist die umgekehrte Optimierung. Mit anderen Worten, es ist eine Berechnung, die die Optimierung umkehrt. Wie oben erläutert, werden bei der normalen Optimierung "Rendite" und "Risiko" eingegeben, und der Kompromiss, der die Rendite maximiert und das Risiko minimiert, wird optimiert und berechnet, um das "Portfolio (Gewicht)" zu erhalten. Bei der umgekehrten Optimierung werden dagegen "Portfolio (Gewicht)" und "Risiko" eingegeben und "Rendite" berechnet.

Die Nutzenfunktion in der Optimierungsberechnung wird durch die folgende Formel ausgedrückt, und $ w $, das dieses $ U $ maximiert, ist das optimale Portfolio. $ \ Delta $ in der Formel ist ein Parameter, der den Grad der Risikovermeidung angibt.

U = w^T\Pi - \frac{\delta}{2} w^T \Sigma w

Dieses $ U $ wird durch $ w $ unterschieden, und $ w $, wo es 0 wird, ist das optimale Portfolio.

\frac{dU}{dw} = \Pi - \delta\Sigma w = 0

Löse dies für $ \ Pi $

\Pi = \delta\Sigma w

Mit dieser Formel können Sie die ausgeglichene erwartete Rendite $ \ Pi $ ermitteln. Gehen Sie in Python wie folgt vor:

python


#Finden Sie eine ausgewogene Rendite(reverse optimization)
r_eq = delta * np.dot(Sigma, w)

2. Kombinieren Sie die Sicht des Anlegers mit der ausgewogenen Rendite

Geben Sie als Nächstes die Ansicht des Anlegers (Prognose oder Prognose) an und mischen Sie diese mit der zuvor berechneten ausgeglichenen Rendite, um eine neue erwartete Rendite zu erhalten. Im Black Ritterman-Modell wird die Ansicht des Anlegers durch zwei Matrizen $ P $ und $ Q $ dargestellt. Im Beispiel des He & Litterman-Papiers

P = \left( \begin{array}{cccccc} 0 & 0 & -0.295 & 1 & 0 & -0.705 & 0 \\\
0 & 1 & 0 & 0 & 0 & 0 & -1 \end{array} \right) \\\
Q = \left( \begin{array}{c} 0.05 \\\ 0.03 \end{array} \right)

Es sieht aus wie das. Dies entspricht zwei Ansichten: "Deutschland übertrifft andere Europa (Frankreich, Großbritannien) um 5%" und "Kanada übertrifft die USA um 3%". Geben Sie außerdem das Konfidenzniveau für diese beiden Ansichten mit einer Matrix namens $ \ Omega $ an. Im Beispiel des Papiers sind die Werte wie folgt.

\Omega = \left( \begin{array}{cc} 0.001065 & 0 \\\ 0 & 0.000852 \end{array} \right)

Bereiten Sie diese Matrizen auch in Python vor.

python


P = np.array([
        [0,0,-0.295,1,0,-0.705,0],
        [0,1,0,0,0,0,-1]]) # 2x7 matrix (2: number of views, 7: number of assets)
Q = np.array([[0.05],[0.03]]) # 2-vector
Omega = np.array([
        [0.001065383332,0],
        [0,0.0008517381]])

Schließlich mischen wir unter Verwendung der "Master-Gleichung" von Black-Litterman die Sichtweise des Anlegers mit der ausgewogenen Rendite, um eine neue Rendite zu finden. Die Formel lautet wie folgt (die Ableitung wird im Referenzpapier ausführlich erläutert).

\Pi' = \Pi + \tau \Sigma P^T \left( P \tau \Sigma P^T + \Omega \right)^{-1} \left( Q - P\Pi\right)

Es ist ein Ausdruck, der Matrixmultiplikation und inverse Matrix enthält, aber es sieht so aus, wenn es in Python geschrieben ist.

python


#Die Sichtweise eines Anlegers mit ausgewogenen Renditen verbinden
r_posterior = r_eq + np.dot( np.dot( tau*np.dot(Sigma,P.T), np.linalg.inv(tau*np.dot(np.dot(P,Sigma),P.T)+Omega)), (Q-np.dot(P,r_eq)))

Gleichzeitig mit der Rückgabe $ \ Pi $ wird auch die Kovarianzmatrix $ \ Sigma $ wie folgt aktualisiert:

\Sigma' = \Sigma + \tau\Sigma - \tau\Sigma P^T \left( P \tau \Sigma P^T + \Omega \right)^{-1} P\tau\Sigma

In Python geschrieben sieht es so aus:

python


Sigma_posterior = Sigma + tau*Sigma - tau*np.dot( np.dot( np.dot(Sigma,P.T), np.linalg.inv(tau*np.dot(np.dot(P,Sigma),P.T)+Omega)), tau*np.dot(P,Sigma))

3. Finden Sie neue Gewichte durch Optimierung

Schließlich wird die Optimierungsberechnung basierend auf der aktualisierten Rendite $ \ Pi '$ und der Kovarianzmatrix $ \ Sigma' $ durchgeführt, um das neue optimale Gewicht $ w '$ zu erhalten. Hier wird das neue Gewicht $ w '$ durch die folgende Gleichung berechnet, die das Optimierungsproblem analytisch löst.

w' = \Pi' (\delta\Sigma')^{-1}

Wenn Sie in Code schreiben

python


#Führen Sie eine Vorwärtsoptimierung durch, um das optimale Gewicht zu finden
w_posterior = np.dot(np.linalg.inv(delta*Sigma_posterior), r_posterior)

Es wird sein.

Zeichnen wir das alte Gewicht $ w $ und das neue Gewicht $ w '$ in der Grafik. Ich benutze die Plot-Funktion von Pandas.

python


df = pd.DataFrame([w.reshape(7),w_posterior.reshape(7)],
                  columns=['AUL','CAN','FRA','GER','JAP','UKG','USA'],
                  index=['Equilibrium Weights','Constrained Optimal Weights'])
df.T.plot(kind='bar', color='br')

Das Ergebnis sieht so aus. Blau steht für das ursprüngliche Marktwertgewicht und Rot für das neu berechnete Portfoliogewicht, das die Ansicht des Anlegers berücksichtigt. Das Ergebnis war, dass die Gewichte Kanadas und Deutschlands zunahmen und die Gewichte Frankreichs, des Vereinigten Königreichs und der Vereinigten Staaten aufgrund der Aussichten der Anleger abnahmen. bl graph.png

abschließend

Bei der Implementierung des Modells ist das Einstellen von Parametern wie $ \ delta, \ tau, \ Omega $ wichtig. Verschiedene Einstellungsmethoden wurden diskutiert und es ist ein Papier für sich geworden, aber ich habe es diesmal weggelassen. Es ist ein schwarzes Literman-Modell mit einem Sound, der schwierig zu sein scheint, aber war es nicht überraschend einfach? Wie im Artikel erläutert, handelt es sich um eine benutzerfreundliche Methode, da selten unerwartete Ergebnisse wie bei der herkömmlichen durchschnittlich verteilten Optimierungsmethode erzielt werden. Wenn die Anzahl der Assets gering ist, kann sie auch mit Excel berechnet werden. Die japanische Literatur ist begrenzt, daher hoffe ich, dass sie Ihnen beim Verständnis hilft.

Verweise

Recommended Posts

Lassen Sie uns die Asset-Allokation durch das Black Ritterman-Modell erklären (mit einem Ausführungsbeispiel von Python).
[Python] Erläutert anhand eines Beispiels den Unterschied zwischen strftime und strptime im datetime-Modul
[Python] Ruft das Skriptausführungsverzeichnis mit einem absoluten Pfad ab
[Python] Vereinfachen Sie die Formatierungsfunktion (Was ist ein F-String? Erläutern Sie den Unterschied zur Formatierungsfunktion anhand eines Beispiels.)
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
Lesen wir die RINEX-Datei mit Python ①
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
Schreiben wir FizzBuzz mit einem Fehler: Python-Version
[Python] Clustering mit einem unendlich gemischten Gaußschen Modell
Lösen des Lorenz 96-Modells mit Julia und Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python
Lassen Sie uns jupyter ausführen, das von VS Code nativ mit python3.8 unterstützt wird
Warum kann ich das Modul durch Importieren mit Python verwenden?
Lassen Sie uns twittern, indem wir das Terminal treffen und mit Selen schreien! !!
Erstellen Sie mit dem Blender 2.80-Skript eine beispielhafte spielähnliche Phase
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo