[PYTHON] Lösen wir das Portfolio mit kontinuierlicher Optimierung

Einführung

Lösen wir das Portfolio mit kontinuierlicher Optimierung

Denkweise

Nehmen wir an, dass 365 Daten 365 Szenarien sind. Angenommen, Sie haben ein Potenzial für 365 verschiedene Verkaufspreise, wenn Sie eine von Ihnen gekaufte Marke verkaufen. Ein häufiges Risiko besteht darin, die Variabilität zu betrachten, was sie nichtlinear und schwer zu lösen macht. Hier betrachten wir die Maximierung der Worst-Case-Renditen im Szenario.

Versuchen Sie es in Python.

Erstellen Sie zunächst zufällige Daten.

python3


%matplotlib inline
import numpy as np, matplotlib.pyplot as plt
from pulp import *
from ortoolpy import addvars
plt.rcParams['figure.figsize'] = 16, 4
plt.rcParams['font.family'] = 'IPAexGothic'
N = 365
np.random.seed(1)
#Datenerstellung mit Zufallszahlen
a = np.random.multivariate_normal([100, 100, 100],
    [[1, 0.5, -0.5],[0.5, 1, 0.2], [-0.5, -0.1, 1]], N)
a.mean(axis=0)
>>>
array([  99.99327092,  100.06971451,  100.03864796])

Im Durchschnitt ist Aktie B am höchsten, wenn auch leicht. Schauen wir uns die Korrelation an.

python3


plt.subplot(131)
plt.title('Korrelation zwischen Beständen(A-B)')
plt.scatter(a[:, 0], a[:, 1])
plt.subplot(132)
plt.title('Korrelation zwischen Beständen(A-C)')
plt.scatter(a[:, 0], a[:, 2])
plt.subplot(133)
plt.title('Korrelation zwischen Beständen(B-C)')
plt.scatter(a[:, 1], a[:, 2]);

image

Definiert eine Funktionslösung, die das Optimierungsproblem löst. Separat geprüft betrug der maximale Schwellenwert (garantierter Wert im schlimmsten Fall) 98,58. Lassen Sie uns das Ergebnis zu diesem Zeitpunkt sehen.

python3


def solve(a, th):
    m = LpProblem()
    x = addvars(3)
    m += lpSum(x) == 1
    for e in a * np.array(x):
        m += lpSum(e) >= th
    m.solve()
    return m.status, [value(i) for i in x]
r = solve(a, 98.58)
r
>>>
(1, [0.4815265, 0.00026221562, 0.51821129])

Die erste 1 repräsentiert die "optimale Lösung" und die folgende Sequenz repräsentiert das Einkaufsverhältnis jeder Aktie.

Da B im Durchschnitt hoch ist, schauen wir uns die Histogramme für jedes Szenario des Falls an, in dem nur B gekauft wird (maximaler Gewinn) und der Fall früher gelöst wurde (minimales Maximum).

python3


plt.rcParams['figure.figsize'] = 6, 4
plt.title('Profit-Histogramm nach Zweck')
plt.hist(a.dot([0,1,0]), bins=12, range=(97, 103), alpha=0.5, label='Maximaler Gewinn')
plt.hist(a.dot(r[1]), bins=12, range=(97, 103), alpha=0.5, label='Minimum Maximum')
plt.legend();

image

Anstatt nur eine Aktie zu kaufen, kann die Kombination von Aktien mit inverser Korrelation Schwankungen der Preisbewegungen reduzieren.

Selbst wenn Sie sich das Diagramm ansehen, können Sie sehen, dass die Breite der Verteilung im Fall "Minimum Maximum" schmaler ist.

Schauen wir uns auch das Portfolio an, wenn der Schwellenwert geändert wird.

python3


x = np.linspace(97, 98.58, 10)
y = np.array([solve(a, th)[1] for th in x])
plt.title('Prozentsatz der Änderungen der Schwelle')
plt.plot(x, y)
plt.legend(['A','B','C']);

image

Im Durchschnitt ist B das Beste. Wenn Sie also die Risiken ignorieren, ist nur B das Beste. Bei maximaler Risikobewertung sind A und C umgekehrt korreliert, daher ist es besser, A und C zu kombinieren. Wie Sie sehen können, ändert sich der Anteil von B von 1 auf 0.

das ist alles

Recommended Posts

Lösen wir das Portfolio mit kontinuierlicher Optimierung
Bereiten Sie die Straße mit Kombinationsoptimierung
Lassen Sie uns Bücher mit Kombinationsoptimierung flach stapeln
Lesen wir die RINEX-Datei mit Python ①
Lösen Sie das Problem des Handlungsreisenden mit OR-Tools
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Lösen wir simultane lineare Gleichungen mit Python Sympy!
Lassen Sie uns den Datumsverlauf durch Kombinationsoptimierung festlegen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Lösen des N Queen-Problems mit kontinuierlicher / kombinierter Optimierung
Lösen des N Queen-Problems mit Kombinationsoptimierung
Portfoliooptimierung mit Python (Markovitz-Durchschnittsverteilungsmodell)
Ich habe versucht, das Problem der Optimierung der Platzierung virtueller Maschinen (einfache Version) mit blueqat zu lösen
Lassen Sie uns die Matrix transponieren und die Matrizen mit numpy multiplizieren.
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Mit OR-Tools erlernte Optimierung [Linearer Plan: Lassen Sie uns Öl raffinieren]
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Löse AtCoder 167 mit Python
Straßeninstallation durch Optimierung
Löse Mathe mit Python
Einführung in die Optimierung
Löse Mathe mit PuLP
Löse POJ 2386 mit Python
Lösen Sie die Maskenberechnung
Lassen Sie uns die Vorlesung der PyCon JP 2016 durch Kombinationsoptimierung entscheiden
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Lassen Sie uns twittern, indem wir das Terminal treffen und mit Selen schreien! !!
Lassen Sie uns die Position der Feuerwehr durch Kombinationsoptimierung bestimmen
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Lösen Sie mathematische Optimierungsmodellübungen mit den OR-Tools von Google (4) Lösen Sie Zahlenstellen
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Verwenden wir den verteilten Ausdruck von Wörtern schnell mit fastText!
Lassen Sie uns word2vec mit Chainer verschieben und den Lernfortschritt sehen
Reduzieren wir den Arbeitsaufwand für die Servereinrichtung mit Ansible