Maximaler Drawdown ist eine allgemeine Risikomessgröße, die in der quantitativen Finanzierung zur Bewertung der größten verwendet wird negative Rückkehr, die erlebt wurde.
Vor kurzem wurde ich ungeduldig mit der Zeit, Max Drawdown mit meinem geloopten Ansatz zu berechnen.
%Vor%Ich bin mit der allgemeinen Vorstellung vertraut, dass eine vektorisierte Lösung besser wäre.
Die Fragen sind:
Ich habe Alexanders Antwort in die folgende Funktion geändert:
%Vor%Wenn wir eine Zeitreihe von Renditen angeben, müssen wir die Gesamtrendite für jede Kombination aus Startpunkt und Endpunkt berechnen.
Der erste Trick besteht darin, eine Zeitreihe von Renditen in eine Reihe von Renditeindizes umzuwandeln. Bei einer Reihe von Renditeindizes kann ich den Ertrag über eine beliebige Unterperiode mit dem Renditeindex am Anfang ri_0 und am Ende ri_1 berechnen. Die Berechnung ist: ri_1 / ri_0 - 1.
Der zweite Trick besteht darin, eine zweite Reihe von Inversen von Rückkehrindizes zu erzeugen. Wenn r meine Reihe von Rückkehrindizes ist, dann ist 1 / r meine Serie von Inversen.
Der dritte Trick ist das Matrixprodukt von r * (1 / r) .Transpose.
r ist eine n x 1-Matrix. (1 / r) .Transposes ist eine 1 x n-Matrix. Das resultierende Produkt enthält jede Kombination von ri_j / ri_k. Subtrahieren Sie 1 und ich habe tatsächlich die Rückkehr.
Der vierte Trick besteht darin, sicherzustellen, dass ich meinen Nenner so einstelle, dass er Perioden vor denen darstellt, die durch den Zähler dargestellt werden.
Unten ist meine vektorisierte Funktion.
%Vor%Wie funktioniert das?
für die vektorisierte Lösung lief ich 10 Iterationen über die Zeitreihen [10, 50, 100, 150, 200]. Die benötigte Zeit ist unten:
%Vor%Derselbe Test für die geloopte Lösung ist unten:
%Vor%Alexanders Antwort liefert überlegene Ergebnisse. Gleicher Test mit modifiziertem Code
%Vor%Ich habe seinen Code in die folgende Funktion geändert:
%Vor%Tags und Links python numpy pandas quantitative-finance