Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
High-Level-Design einer selbst entwickelten Handelsumgebung!
High-Level-Design einer selbst entwickelten Handelsumgebung!
Hallo zusammen! Mein Name ist Denis und Sie schauen sich „Close to AlgoTrading“ an.
In unserem letzten Video haben wir die allgemeine Struktur eines algorithmischen Handelssystems besprochen. Heute möchte ich ein einfaches High-Level-Design für eine selbst entwickelte Handelsumgebung erstellen.
Beginnen wir damit, herauszufinden, was wir von unserer Umgebung erwarten. Wir möchten die Möglichkeit haben, in Zukunft neue Strategien und Datenquellen hinzuzufügen. Skalierbarkeit ist wichtig, da wir uns derzeit auf den Aktienmarkt konzentrieren, in Zukunft jedoch möglicherweise den Handel mit Kryptowährungen wagen. Deshalb müssen wir neue Märkte unterstützen. Darüber hinaus möchten wir die Flexibilität haben, Komponenten innerhalb des Systems einfach zu ändern.
Werfen wir nun einen Blick auf die Gesamtstruktur der Handelsumgebung.
Die beiden Hauptkomponenten sind die Daten und das Handelssystem. Wir möchten auch eine Benutzeroberfläche einbinden, um die Umgebung effektiv steuern zu können. Betrachten wir als zusätzlichen Baustein die Einbindung eines Simulationssystems.
Die Datenkomponente steuert das gesamte System. Zunächst planen wir, Daten von unserem Broker und Dateien auf der Festplatte zu verwenden. Es kann jedoch sein, dass wir uns später dazu entschließen, auf andere Datenbanken und Nachrichtenagenturen zuzugreifen. Da wir mehrere Datenquellen unterstützen möchten, müssen wir unterschiedliche Treiber berücksichtigen.
Treiber bieten einfache Funktionen wie das Lesen und Schreiben von Daten, das Öffnen oder Schließen von Verbindungen und mehr. Wir möchten jedoch nicht, dass unser Handelssystem direkt mit der API der Treiber interagiert. Um dieses Problem anzugehen, führen wir eine Ebene von Datenhandlern ein.
Datenhandler arbeiten direkt mit den Treibern zusammen und implementieren Logikfunktionen wie Datenserialisierung, Deserialisierung und Konvertierung in ein spezielles Format. Obwohl wir über eine Reihe von Datenhandlern verfügen, benötigen wir dennoch eine einheitliche Schnittstelle für unsere Anwendungsschicht.
Um diese Schnittstellen bereitzustellen, führen wir einen Datenmanager und einen Auftragsmanager ein. Der Datenmanager bietet eine gemeinsame Schnittstelle für die Arbeit mit Datenquellen, während der Auftragsmanager eine gemeinsame Schnittstelle für die Auftragsausführung bereitstellt. Durch die Nutzung beider Schnittstellen kann das System auf verschiedene Datenquellen und Brokerdienste zugreifen.
Hier kommt ein wichtiger Aspekt. Wir definieren Komponenten, die eine gemeinsame Schnittstelle für den Zugriff auf Datenquellen bereitstellen. Das heißt, wenn unser Handelssystem beispielsweise Nachrichten abrufen möchte, verwendet es dieselbe Schnittstelle, unabhängig davon, ob die Quelle unser Broker oder eine Datenbank ist. Dieses Design stellt sicher, dass die Schnittstelle unverändert bleibt, wenn wir den Datenanbieter wechseln. Daher können wir neue Datenquellen hinzufügen oder Broker wechseln, ohne die Funktionalität der Anwendung zu beeinträchtigen.
Nachdem wir nun den Teil zur Datenverarbeitung entworfen haben, konzentrieren wir uns auf den Hauptnutzer unserer Daten – das Handelssystem. Wenn Sie sich mein vorheriges Video angesehen haben, sind Sie mit den fünf Blöcken des Handelssystems vertraut: Alpha-Modell, Risikomodell, Transaktionskostenmodell, Portfoliokonstruktionsmodell und Ausführungsmodell. Diese Blöcke nutzen den Datenmanager und den Auftragsmanager für den Zugriff auf Daten und Brokerdienste.
Wir haben die Daten- und Handelssystemkomponenten beschrieben, aber jetzt müssen wir definieren, wer alles kontrollieren wird. Wir benötigen eine Komponente, die für das gesamte System verantwortlich ist – eine Basisanwendung. Diese Anwendung übernimmt die Startsequenz, die Treiber- und Komponenteninitialisierung und implementiert die Hauptzustandsmaschine.
Nachdem wir die Hauptanwendung definiert haben, müssen wir uns mit der Benutzeroberfläche befassen. Dabei kann es sich um eine PC-Schnittstelle oder eine Webschnittstelle handeln, im Allgemeinen empfiehlt es sich jedoch, das Frontend vom Backend zu trennen. Um dies zu erreichen, erstellen wir eine Kommunikationsschicht zwischen der GUI und unserer Kernanwendung.
Zusätzlich müssen wir eine Logger-Komponente einbinden. Diese Komponente implementiert die Logger-Schnittstelle und speichert Protokolle in einer Datenbank oder Protokolldatei. Zur Überwachung unserer Umgebung können wir auch ein webbasiertes Überwachungssystem nutzen, das direkt auf den Datenbankserver zugreifen und Daten von dort auslesen kann. Die Frontend-Anwendung kann den Datenmanager für den Zugriff auf Daten und den Auftragsmanager für die Interaktion mit Brokerdiensten verwenden.
Zu guter Letzt dürfen wir die Möglichkeit der manuellen Auftragsausführung nicht vergessen. Auch diese Funktionalität können wir in das System integrieren.
Obwohl wir in diesem Video nicht näher auf die Simulationsumgebung eingegangen sind, konnte diese ähnlich wie ein zusätzlicher Broker-Service ohne Änderungen am bestehenden System implementiert werden.
Wenn wir uns die Gestaltung unserer Handelsumgebung ansehen, können wir mit Sicherheit sagen, dass sie es uns ermöglicht, unsere Ziele zu erreichen. Wir haben unsere Anwendung in separate Domänen unterteilt und diese über Schnittstellenschichten verbunden. Die Daten- und Auftragsmanager stellen gemeinsame Schnittstellen bereit und vereinfachen so den Zugriff auf Ressourcen. Mit diesem Design können wir problemlos Datenanbieter oder Broker wechseln und unterschiedliche Benutzeroberflächen verwenden. Wir können auch Änderungen an bestimmten Teilen des Systems vornehmen, ohne die gesamte Anwendung aktualisieren zu müssen.
Das ist alles für heute. Wenn ich etwas verpasst habe oder Sie irgendwelche Gedanken zu diesem Design haben, hinterlassen Sie bitte Ihre Kommentare und vergessen Sie nicht, diesen Kanal zu abonnieren. Wir sehen uns im nächsten Video!
Handelsumgebung IB API – QT C++ – Flask – RL-Modell. Vollständiges Arbeitsbeispiel.
Handelsumgebung IB API – QT C++ – Flask – RL-Modell. Vollständiges Arbeitsbeispiel.
Mein Name ist Denis und willkommen bei Close to Algo Trading. Heute habe ich ein spezielles Video, in dem ich zeigen werde, wie alle Komponenten, die wir in den vorherigen Episoden besprochen haben, im echten Handel zusammenarbeiten können. Den gesamten Quellcode finden Sie auf GitHub und können ihn selbst ausprobieren.
Für diese Demonstration verwende ich die Interactive Brokers API und mein altes Projekt namens IBTrader. Ich habe vor vielen Jahren mit der Arbeit an IBTrader begonnen, hatte aber nie die Zeit, es fertigzustellen. Allerdings denke ich jetzt darüber nach, das Projekt zu verlängern. Wenn Sie an diesem besonderen Projekt interessiert sind, lassen Sie es mich bitte im Kommentarbereich dieses Videos wissen. Schauen wir uns also an, was wir in diesem Video tun werden. Wir beginnen mit einem kurzen Update und einem Überblick über unsere Reinforcement-Learning-Umgebung und unseren Agenten. Anschließend gebe ich eine kurze Einführung in die Bereitstellung des Modells mit Flask.
Da wir eine Qt-Anwendung verwenden, um eine Verbindung zum Broker herzustellen, müssen wir eine REST-API verwenden, um mit unserem Modell zu interagieren. Gegen Ende des Videos werden wir sehen, wie all diese Teile nahtlos zusammenarbeiten.
Bevor wir beginnen, empfehle ich Ihnen, sich meine früheren Videos anzusehen, um die hier besprochenen Konzepte besser zu verstehen. Wenn Sie diese Videos bereits gesehen haben, erinnern Sie sich vielleicht daran, wie man mithilfe der TF-Agent-Bibliothek einen RL-Agenten erstellt. Für diese Demonstration habe ich einige Änderungen sowohl am Agenten als auch an der Umgebung vorgenommen. Der Agent ist immer noch DQN, genau wie zuvor, aber jetzt verwenden wir QNetwork anstelle von QRnnNetwork. Ebenso habe ich die Umgebung vereinfacht. Anstatt mehrtägige historische Daten zu verwenden, verfügen wir jetzt nur noch über die Preisbeobachtung vom aktuellen Tag.
Es ist jedoch nicht ideal, sich ausschließlich auf die aktuelle Beobachtung zu verlassen. Um dieses Problem anzugehen, werden wir unsere Beobachtung von einem Tag auf drei historische Tage umstellen. Wir können dies erreichen, indem wir den History-Wrapper aus dem tf-agent-Environments-Paket verwenden und den Parameter „history_length“ auf 3 setzen. Wenn wir nun die Beobachtungen der Umgebung überprüfen, werden wir feststellen, dass wir drei unserer normalen Beobachtungen kombiniert haben. Jede Beobachtung enthält die OHLC-Daten (eröffnet, hoch, niedrig, geschlossen) zusammen mit dem Volumen.
Um einen konsistenten Bereich sicherzustellen, habe ich einige Transformationen durchgeführt, und jetzt sollten unsere Eingabedaten logarithmische Preisänderungen in Prozent darstellen. Schließlich müssen wir unser Modell mit drei Beobachtungen füttern: dem aktuellen Tag und den beiden historischen Tagen. Wir müssen uns auch an die Positionszustände der vergangenen Tage erinnern. Sobald der Agent geschult ist, verfügen wir über eine Richtlinie, die Aktionen wie Kaufen, Verkaufen, Überspringen oder Schließen einer Position vorhersagen kann. Die Richtlinie wird mithilfe eines neuronalen Netzwerks implementiert und wir können eine direkte API verwenden, um damit zu arbeiten.
Was aber, wenn wir unsere Anwendung nicht eng mit dem Empfehlungsmodell verknüpfen möchten? Oder was ist, wenn unser Modell in Python implementiert ist und wir es in verschiedenen Anwendungen verwenden möchten? Um dieses Problem zu lösen, können wir unser Modell mit Flask als kleinen Webdienst bereitstellen. Flask ist ein in Python geschriebenes Micro-Web-Framework. Ich habe mich für Flask für dieses Video entschieden, weil es einfach ist und nicht viel Einrichtungszeit erfordert. Außerdem können wir JSON verwenden, um Daten zwischen unserer Anwendung und dem Modell zu übertragen.
Zum Debuggen und Bereitstellen unserer Flask-Anwendung können wir eine Docker-Datei verwenden. Microsoft bietet ein gutes Tutorial zum Erstellen einer Docker-Datei. Weitere Informationen finden Sie unter dem Link in der Beschreibung. Unsere Flask-Anwendung verfügt über eine Route namens „predict“, die POST-Anfragen verarbeitet, die Eingabedaten im JSON-Format enthalten. Die Antwort erfolgt ebenfalls im JSON-Format. Wir werden Code schreiben, um die JSON-Daten zu transformieren und sie zur Vorhersage an das Richtlinienmodell weiterzuleiten.
Kommen wir nun zur Anwendung, die eine Verbindung zum Broker herstellt, Daten empfängt und Aufträge an den Server sendet. Obwohl wir unsere Strategie direkt in der Anwendung umsetzen könnten, werden wir das in diesem Beispiel nicht tun. Stattdessen verwenden wir die QtIBTrade-Anwendung, die mit dem Broker verbunden ist und über die REST-API mit unserem Strategie- und Aktionsauswahlmodell kommuniziert. QtIBTrade ist eine Qt-basierte Anwendung, die ich vor einiger Zeit erstellt habe, um den algorithmischen Handel mit C++ zu erforschen. Es ist plattformübergreifend und gut dokumentiert.
Bitte beachten Sie jedoch, dass sich QtIBTrade noch in der Entwicklung befindet, da ich nicht genug Zeit hatte, daran zu arbeiten. Wenn jemand Interesse an einer Mitarbeit an diesem Projekt hat, lassen Sie es mich bitte wissen oder schauen Sie sich den Code auf GitHub an (Link in der Beschreibung).
Sehen wir uns nun an, wie alle diese Komponenten zusammenarbeiten. Zuerst müssen wir unsere Flask-Anwendung starten. Ich habe es im Debug-Modus gestartet, daher müssen wir uns die Portnummer merken und sie in unserer Qt-Anwendung aktualisieren. Als nächstes müssen wir eine Verbindung zur IB-Anwendung oder zum Gateway herstellen. Bevor wir auf die Schaltfläche „Verbinden“ klicken, prüfen wir, ob die API aktiviert ist und ob wir den richtigen Port konfiguriert haben.
Sobald alles eingerichtet ist, können wir unsere Testanwendung starten, die unser Modell verwendet. Wie Sie sehen, senden wir alle fünf Sekunden eine Anfrage mit unterschiedlichen Preisdaten an den Server. Jedes Mal, wenn wir Preisdaten vom Broker erhalten, lösen wir unser Modell aus und erhalten die entsprechende Aktion zurück.
Ich hoffe, Sie fanden diese Demonstration interessant. Wenn ja, abonnieren Sie bitte den Kanal für weitere Videos. Vielen Dank fürs Zuschauen und bis zum nächsten Video!
Wie einfach und unkompliziert ein Aktienportfolio Backtest durchgeführt werden kann
Wie einfach und unkompliziert ein Aktienportfolio Backtest durchgeführt werden kann
Hallo an alle! Willkommen bei „Close to AlgoTrading“. Ich bin Denis und möchte Ihnen heute ein sehr nützliches und einfaches Framework vorstellen, das ich für das Backtesting verschiedener Portfolios entwickelt habe. Es basiert auf einer früheren Idee, die ich in einem meiner vorherigen Videos besprochen habe.
Obwohl es leistungsfähigere Implementierungen gibt, wie die von quantconnect, glaube ich, dass es immer gut ist, eine lokale, einfache Lösung zu haben, die es uns ermöglicht, Ideen zu testen, ohne auf zusätzliche Dienste angewiesen zu sein.
Der Kern dieses Frameworks ist Backtrader, ein Python-Framework für Backtesting und Handel. Ich habe eine generische Rebalancing-Strategie implementiert, die wir verwenden werden, aber das Framework ist so konzipiert, dass es das Testen verschiedener Ideen ermöglicht, ohne sich mit den Besonderheiten von Backtrader befassen zu müssen.
Schauen wir uns die Struktur und Komponenten dieses Frameworks genauer an. Die Rebalancing-Strategie ist die Schlüsselkomponente und folgt einer bestimmten Struktur. Zuerst müssen wir die Gruppe der Assets auswählen, mit denen wir arbeiten möchten. Dafür verfügen wir über ein Modell, das einen Auswahlprozess basierend auf unserem Universum implementiert, das sogenannte Auswahlmodell. Sobald wir die ausgewählten Assets haben, werden sie an das Alpha-Modell übergeben. Das Alpha-Modell ist der Kern unseres Algorithmus und generiert die Handelssignale. Diese Signale werden dann zum Aufbau unseres Portfolios verwendet.
Das Portfoliokonstruktionsmodell nutzt die vom Alpha-Modell generierten Signale und generiert eine Vermögensallokation. Bei dieser Zuordnung handelt es sich um ein Wörterbuch, bei dem der Schlüssel der Asset-Ticker und der Wert die Gewichtung ist. Nach der Zusammenstellung des anfänglichen Portfolios gehen wir zum Schritt der Neuausrichtung über. Hier können wir alte Vermögenswerte entfernen, neue hinzufügen oder die Menge der Vermögenswerte im Portfolio basierend auf den definierten Gewichtungen anpassen.
Als nächstes möchten wir möglicherweise einige Risikobedingungen mithilfe des Risikomodells überprüfen. Dieses Modell empfängt die Ausgabe des Neuausgleichsschritts, nimmt alle erforderlichen Änderungen vor und übergibt sie dann an das Ausführungsmodell. Das Ausführungsmodell erteilt standardmäßig Aufträge zum Kauf oder Verkauf der angeforderten Anzahl von Vermögenswerten.
Wenn Sie sich den Code der Rebalancing-Strategie ansehen, sehen Sie die Umsetzung jedes dieser Schritte. Vor dem Auswahlmodell rufe ich eine Funktion auf, die einen Datenrahmen nur mit den Schlusskursen zurückgibt. Denn für diese Strategie benötigen wir nur die Schlusskurse.
Lassen Sie uns nun kurz auf die Implementierung der Modelle innerhalb des Frameworks eingehen. Das Auswahlmodell ist unkompliziert. Sein Hauptzweck besteht darin, Vermögenswerte mit fehlenden oder Nullpreisen zu löschen, um sicherzustellen, dass alle von uns verwendeten Daten gültig sind. Das Alpha-Modell ist eine einfache generische Momentum-Strategie. In diesem Fall kaufen wir Vermögenswerte mit der höchsten Dynamik. Für das Allokationsmodell implementieren wir ein Modell, das allen Vermögenswerten das gleiche Gewicht zuweist.
Schließlich führt das Rebalancing-Modell eine einfache Neubalancierung basierend auf den zugewiesenen Gewichtungen durch. Nachdem wir alle Modelle implementiert haben, schauen wir uns an, wie man sie verwendet.
Zunächst benötigen wir einige Daten. Für dieses Beispiel verwende ich die aktuelle Liste der S&P 500-Ticker als unser Universum. Wir werden die historischen Preisdaten für alle diese Aktien ab Januar 2007 herunterladen. Als Nächstes füllen wir unsere Konfiguration aus. Wir definieren die Struktur unserer Datenquelle und geben an, dass wir nur die Eröffnungs- und Schlusskurse verwenden. Der Eröffnungspreis ist notwendig, da wir Positionen basierend auf dem Eröffnungspreis des nächsten Tages eröffnen und schließen möchten.
Wir definieren auch unsere Vermögensliste, den Benchmark-Ticker, den Startbarbetrag, den Optionshandel bei Eröffnung und legen eine Aufwärmphase für unseren Algorithmus fest, um das Momentum basierend auf dem letzten Jahr zu berechnen. Anschließend erstellen wir unsere Strategiekonfiguration. In dieser Konfiguration setzen wir die Option „rebalanceDay“ auf 22, was bedeutet, dass wir unser Portfolio einmal im Monat neu ausgleichen. Wir verfügen außerdem über einen Reserve-Cash-Parameter, um Ausführungsfehler aufgrund unzureichender Mittel zu vermeiden.
Als nächstes definieren wir alle unsere Modelle und ihre Parameter. Bevor wir mit dem Backtest beginnen, müssen wir unserer Konfiguration zwei Datensätze zuweisen: einen mit den Daten für alle unsere Assets und einen anderen mit den Benchmark-Daten. Schließlich können wir die Backtest-Funktion aufrufen und warten, bis der Bericht generiert wird. Der Bericht wird mit dem Quantstats-Paket erstellt und bietet viele nützliche Informationen.
Den vollständigen Code finden Sie auf meiner GitHub-Seite. Der Link ist in der Beschreibung angegeben.
Das ist alles für heute. Vielen Dank fürs Zuschauen. Wenn Sie Fragen oder Kommentare haben, hinterlassen Sie diese bitte unten. Vergessen Sie nicht, meinen Kanal zu abonnieren, um weitere spannende Inhalte zu erhalten.
Wie man den Markt schlägt. Momentum- und Portfoliooptimierung
Wie man den Markt schlägt. Momentum- und Portfoliooptimierung
Hallo an alle! Mein Name ist Denis und Sie schauen sich „Close to AlgoTrading“ an.
In diesem kurzen Video werden wir zwei grundlegende Portfolio-Investmentstrategien untersuchen: Momentum of Return und Momentum als Differenz zwischen Preis und Trend. Wir werden auch sehen, wie Portfoliooptimierungsmethoden uns helfen können, unsere Anlageergebnisse zu verbessern.
Momentum ist im Wesentlichen die Differenz zwischen zwei Preisen über einen festen Zeitraum. Es stellt die Geschwindigkeit oder Rate der Veränderung dar. Im Kontext des Aktienmarktes kann Momentum als tägliche Rendite ausgedrückt werden. Die Idee hinter der Momentum-Strategie ist einfach: Wenn der Preis in der Vergangenheit gestiegen ist, wird er wahrscheinlich auch in Zukunft weiter steigen. Um Vergleiche zu erleichtern, ist es zweckmäßig, alle Märkte in derselben Notation auszudrücken.
Für den Aktienmarkt wird Momentum oft als die Differenz zwischen dem heutigen Kurs und einem entsprechenden gleitenden Durchschnittswert definiert. Wenn die Dynamik größer wird, entfernen sich die Preise weiter vom gleitenden Durchschnitt. Wenn umgekehrt die Dynamik abnimmt, verlangsamt sich die Geschwindigkeit der Preisänderung und die Preise nähern sich relativ zum gleitenden Durchschnitt oder sogar in die negative Richtung.
Um diese beiden Impulsarten umzusetzen, habe ich bereits ein Alpha-Modell erstellt. Dadurch können wir sie mit verschiedenen Parametern testen.
Lassen Sie uns das Momentum über einen Zeitraum von einem Jahr berechnen und die Top-10-Aktien mit dem höchsten Momentum auswählen. Wir werden unser Portfolio einmal im Monat neu gewichten und alle Vermögenswerte werden gleichmäßig verteilt. Nun kopieren wir unsere Konfiguration und setzen eine andere Art von Impuls. Wir können diese Konfigurationen zu unserem Test hinzufügen und sie im Zeitraum von 2005 bis 2015 einem Backtest unterziehen.
Sie sehen, dass beide Strategien eine ähnliche Volatilität und einen ähnlichen Drawdown aufweisen und die Investition in den Index übertreffen. Es ist jedoch wichtig zu beachten, dass wir im Vergleich zum Halten des Index ein etwas höheres Risiko eingehen. Um das Risiko auf das Niveau des Index zu reduzieren, können wir versuchen, einige Methoden zur Portfoliooptimierung anzuwenden. Anstelle des Equal-Allokationsmodells werden wir ein Modell verwenden, das mehrere Optimierungsmethoden aus dem Paket pyportfolioopt implementiert, die ich in einem früheren Video zur Portfoliooptimierung besprochen habe.
Hier zeige ich Ihnen, wie Sie unsere Konfiguration ändern, um das Portfoliooptimierungs-Zuteilungsmodell zu verwenden. Wir werden zwei bekannte Methoden, CLA und HRP, sowie zwei spezifischere Methoden testen: Efficient CVaR (Conditional Value at Risk) und Efficient CDaR (Conditional Drawdown at Risk). Ausführlichere Informationen zu diesen Methoden finden Sie in der offiziellen Dokumentation. Beachten Sie, dass die Ausführung dieser Optimierungsmethoden einige Zeit in Anspruch nehmen kann, da sie nicht sehr schnell sind. Warten wir geduldig, bis das Backtesting abgeschlossen ist.
Sie können beobachten, dass alle Methoden unsere Ergebnisse verbessern. Unsere anfängliche Momentum-of-Return-Strategie, die eine Allokation auf Basis des bedingten Value-at-Risk-Optimierers verwendet, reduziert den Drawdown um fast 12 %. Die gleiche Strategie mit dem Conditional Drawdown at Risk Optimizer verbessert unsere Rendite um 3 %. Wir haben gesehen, dass eine einfache Änderung des Allokationsmodells unsere Ergebnisse deutlich verbessern kann. Es gibt viele andere Möglichkeiten, diese anfängliche Strategie zu verbessern. Wichtiger ist, dass die einfache Idee, Momentum zu nutzen, funktioniert und den Markt übertrifft und wir sie mit nur wenigen einfachen Schritten umsetzen können.
Das ist alles für heute. Wir sehen uns im nächsten Video!
Jenseits der Sharpe Ratio: Enthüllung einer effektiven Bewertung der Handelsstrategie
Jenseits der Sharpe Ratio: Enthüllung einer effektiven Bewertung der Handelsstrategie
Hallo an alle! Willkommen bei „Close to AlgoTrading“. Heute tauchen wir ein in die spannende Welt der Bewertung von Handelsstrategien. Wir werden herausfinden, warum die Sharpe-Ratio zwar beliebt, aber nicht immer das beste Werkzeug für diese Aufgabe ist.
In diesem Video werden wir vier Hauptbereiche behandeln. Zunächst definieren wir die Sharpe-Ratio und erläutern ihre Formel. Anschließend besprechen wir die Einschränkungen der Sharpe-Ratio. Drittens werden wir die Sortino- und Calmar-Verhältnisse als alternative Metriken vorstellen. Abschließend vergleichen wir zwei hypothetische Handelsstrategien anhand all dieser Kennzahlen. Was ist also die Sharpe-Ratio? Benannt nach dem Nobelpreisträger William F. Sharpe, misst es die Performance einer Anlage im Vergleich zu einem risikofreien Vermögenswert nach Berücksichtigung des Risikos. Mit anderen Worten: Die Sharpe-Ratio soll beschreiben, wie gut die Rendite eines Vermögenswerts den Anleger für das eingegangene Risiko entschädigt.
Die Formel für die Sharpe-Ratio lautet wie folgt: Sharpe-Ratio = (Erwartete Rendite – risikofreier Zinssatz) / Standardabweichung.
Betrachten wir eine Strategie mit einer erwarteten Rendite von 8 %, einem risikofreien Zinssatz von 2 % und einer Standardabweichung von 15 %. Das Sharpe-Verhältnis wäre (8 - 2) / 15, was etwa 0,4 entspricht. Allerdings weist die Sharpe-Ratio mehrere Einschränkungen auf, die wir berücksichtigen sollten. Erstens wird davon ausgegangen, dass die Renditen einer Normalverteilung folgen, was bei vielen Handelsstrategien, die nichtnormale Verteilungen mit verzerrten oder fetten Renditen aufweisen, häufig nicht der Fall ist. Dies kann bei der Verwendung der Sharpe-Ratio zu irreführenden Ergebnissen führen.
Zweitens begünstigt die Sharpe-Ratio Strategien, die regelmäßig kleine Gewinne erwirtschaften, und geht davon aus, dass diese Gewinne proportional gesteigert werden können. Diese Annahme gilt möglicherweise nicht für alle Arten von Strategien, insbesondere für Hochfrequenzhandelsstrategien. Daher könnten Hochfrequenzhandelsstrategien erfolgreicher erscheinen, wenn sie anhand der Sharpe Ratio bewertet werden. Drittens berücksichtigt die Sharpe-Ratio nicht ausdrücklich das Extremrisiko, das sich auf die Wahrscheinlichkeit extremer Ereignisse oder erheblicher Verluste bezieht. Strategien mit höherem Tail-Risiko werden möglicherweise nicht angemessen in der Sharpe-Ratio berücksichtigt, wodurch möglicherweise das mit solchen Strategien verbundene Risiko unterschätzt wird.
Angesichts dieser Einschränkungen greifen Händler häufig auf alternative Kennzahlen wie das Sortino-Verhältnis und das Calmar-Verhältnis zurück. Diese Kennzahlen liefern zusätzliche Erkenntnisse und können dabei helfen, einige der Einschränkungen der Sharpe Ratio zu überwinden. Die Sortino-Quote misst die risikobereinigte Rendite einer Anlage, indem sie nur die Abwärtsvolatilität berücksichtigt. Es konzentriert sich auf die Abweichung der Renditen unter einen bestimmten Schwellenwert, typischerweise den risikofreien Zinssatz. Dieses Verhältnis ermöglicht eine spezifischere Einschätzung des Risikos und steht im Einklang mit der allgemeinen Sorge der Anleger hinsichtlich Abwärtsrisiken.
Andererseits bewertet die Calmar-Ratio die risikobereinigte Rendite, indem sie die durchschnittliche jährliche Rendite mit dem maximalen Drawdown vergleicht. Dieses Verhältnis ist besonders nützlich für Strategien, bei denen der maximale Drawdown ein kritischer Faktor ist. Es stellt die erzielte Rendite im Verhältnis zum Risiko erheblicher Verluste dar. Durch die Berücksichtigung dieser alternativen Kennzahlen erhalten Händler einen umfassenderen Überblick über die Risiko- und Ertragsmerkmale ihrer Handelsstrategien. Das Sortino-Verhältnis konzentriert sich auf die Abwärtsvolatilität, während das Calmar-Verhältnis die Rendite im Verhältnis zum maximalen Drawdown misst.
Vergleichen wir nun zwei hypothetische Strategien anhand dieser Kennzahlen. Wir nennen sie Strategie A und Strategie B. Strategie A hat eine jährliche Rendite von 15 %, eine Standardabweichung von 10 %, eine Abwärtsabweichung von 7 % und einen maximalen Drawdown von -20 %. Daraus ergibt sich ein Sharpe-Verhältnis von 1,3, ein Sortino-Verhältnis von 1,86 und ein Calmar-Verhältnis von 0,8. Andererseits hat Strategie B eine jährliche Rendite von 12 %, eine Standardabweichung von 8 %, eine Abwärtsabweichung von 5 % und einen maximalen Drawdown von -15 %. Das Sharpe-Verhältnis für Strategie B beträgt 1,25, das Sortino-Verhältnis beträgt 2,0 und das Calmar-Verhältnis beträgt 0,8.
Wie wir sehen können, weist Strategie A zwar eine höhere Rendite auf, Strategie B übertrifft diese jedoch, wenn wir die Abwärtsabweichung und den maximalen Drawdown berücksichtigen, was zu einem geringeren Risiko für die Rendite führt. Daher bietet Ihnen Strategie B eine höhere Rendite für jede Risikoeinheit, was ein wichtiger Gesichtspunkt bei jeder Anlageentscheidung ist. Die Wahl zwischen der Sharpe Ratio und alternativen Kennzahlen hängt von den spezifischen Merkmalen und Zielen Ihrer Handelsstrategie ab. Hier sind einige Empfehlungen, die Ihnen bei der Entscheidung helfen sollen, wann Sie sich auf die Sharpe-Ratio konzentrieren und wann Sie andere Kennzahlen berücksichtigen sollten:
Wann Sie der Sharpe-Ratio mehr Aufmerksamkeit schenken sollten: Die Sharpe-Ratio kann ein wertvolles Instrument bei der Bewertung von Strategien sein, die in bestimmte Kategorien fallen. Wenn Sie beispielsweise über ein gut diversifiziertes langfristiges Anlageportfolio verfügen, das sich auf traditionelle Vermögenswerte wie Aktien und Anleihen konzentriert, bietet die Sharpe Ratio ein geeignetes Maß für die risikoadjustierte Performance. Dies ist besonders relevant für Strategien mit relativ stabilen Renditen, moderatem Risiko und einem Fokus auf risikobereinigte Gesamtrenditen.
Wann sind alternative Kennzahlen zu berücksichtigen: Andererseits kommen alternative Kennzahlen wie das Sortino-Verhältnis und das Calmar-Verhältnis für Strategien ins Spiel, die möglicherweise nicht den Annahmen des Sharpe-Verhältnisses entsprechen. Wenn Sie beispielsweise Handelsstrategien mit höherem Risiko wie Optionshandel, hebelbasierte Strategien oder Strategien mit konzentrierten Positionen betreiben, werden alternative Kennzahlen wertvoller. Diese Strategien weisen häufig nicht normale Renditeverteilungen und ein höheres Tail-Risiko auf und erfordern möglicherweise einen Fokus auf das Abwärtsrisikomanagement. Das Sortino-Verhältnis und das Calmar-Verhältnis bieten spezifischere Einblicke in die risikobereinigte Leistung, das Extremrisiko und die Drawdowns und ermöglichen so eine bessere Einschätzung der Realisierbarkeit der Strategie in diesen Kontexten.
Denken Sie daran, dass keine einzelne Kennzahl die Komplexität und Nuancen einer Handelsstrategie vollständig erfassen kann. Es ist wichtig, eine Kombination von Kennzahlen zu berücksichtigen, um ein umfassendes Verständnis von Risiko und Rendite zu erhalten. Durch die Verwendung mehrerer Metriken wie der Sharpe-Ratio, der Sortino-Ratio und der Calmar-Ratio können Sie die Stärken und Schwächen Ihrer Strategie aus verschiedenen Perspektiven bewerten und so eine fundiertere Bewertung und fundierte Entscheidungsfindung ermöglichen.
Das ist alles für das heutige Tutorial. Vielen Dank, dass Sie sich uns angeschlossen haben, und wir hoffen, dass Sie dieses Video hilfreich fanden.
Schnelle Monte-Carlo-Simulation zur Schätzung des maximal erwarteten Drawdowns (Python-Code x2000 schneller ausführen)
Schnelle Monte-Carlo-Simulation zur Schätzung des maximal erwarteten Drawdowns (Python-Code x2000 schneller ausführen)
Herzlich willkommen! Ich bin Denis und Sie schauen sich CloseToalgotrading an.
In diesem Video befassen wir uns mit dem Prozess, die Ausführungsleistung eines Python-Codes erheblich zu verbessern, möglicherweise um mehr als das Tausendfache. Unser Ziel ist es, es nicht nur interessant, sondern auch äußerst nützlich zu machen. Um dies zu erreichen, werden wir am Beispiel der Monte-Carlo-Simulation einen erwarteten maximalen Drawdown berechnen.
Lassen Sie uns zunächst die grundlegende Frage beantworten, was der maximale Drawdown bedeutet und wie er berechnet werden kann. Der maximale Drawdown dient als Indikator für das Abwärtsrisiko über einen bestimmten Zeitraum. Er wird normalerweise in Prozent ausgedrückt und mithilfe der folgenden Formel ermittelt.
Obwohl die Formel vielversprechend erscheint, können wir eine noch bessere Genauigkeit erreichen, indem wir sie auf reale Daten anwenden. Nehmen wir das Beispiel von SPY und legen den Zeitraum auf 100 Tage fest. Die Grafik zeigt die Schlusskurse von SPY über diese 100 Tage. Es sind zwei Drawdowns erkennbar, wobei der zweite das Maximum zu sein scheint. Um den Drawdown zu berechnen, können wir eine einfache Berechnung durchführen. Der höchste Preis lag bei etwa 212,1 und der niedrigste bei 204,4. Unter Verwendung der zuvor genannten Formel können wir den maximalen Drawdown auf etwa 3,6 % schätzen.
Allerdings ist dieses Ergebnis aufgrund der getroffenen Annahmen zum Preisniveau nicht präzise genug. Um eine genauere Berechnung zu erhalten, verwenden wir eine speziell für diesen Zweck entwickelte Python-Funktion. Eine mögliche Implementierung ist wie folgt:
[Python-Code zur Berechnung des maximalen Drawdowns]
Diese Funktion berechnet den maximalen Drawdown, was zu einem Wert von 3,5 % führt. Die Ausführungszeit dieser Funktion beträgt ungefähr 16,3 Mikrosekunden, was respektabel ist. Aber können wir dieses Timing weiter verbessern, ohne auf komplexe und komplizierte Techniken zurückzugreifen? Die Antwort ist ein klares Ja, und die einfachste Maßnahme zur Verbesserung der Ausführung ist der Einsatz von Numba.
Numba ist ein Open-Source-JIT-Compiler (Just-In-Time), der eine Teilmenge von Python- und NumPy-Code in hocheffizienten Maschinencode übersetzt. Durch die Konvertierung unseres Python-Codes in Numba können wir seine Leistung erheblich steigern. Die anfängliche Implementierung unserer Funktion funktioniert jedoch nicht mit Numba, da es die Funktion „Maximum akkumulieren“ nicht erkennt. Dennoch können wir eine alternative Methode zur Berechnung des maximalen Drawdowns entwickeln, ohne diese Funktion zu verwenden. Die modifizierte Drawdown-Berechnung lässt sich wie folgt umsetzen:
[Python-Code für modifizierte Drawdown-Berechnung mit Numba]
Wie Sie sehen können, haben wir über der Funktionsdefinition einen Numba-Dekorator hinzugefügt. Mit dieser Implementierung gibt es bei Numba keine Beanstandungen und die Ausführungszeit reduziert sich auf lediglich 4,8 Mikrosekunden. Dies stellt eine Geschwindigkeitsverbesserung um mehr als das Dreifache dar. Es ist ganz einfach, nicht wahr? Persönlich bevorzuge ich diese Implementierung, da sie den Algorithmus auf einfache Weise beschreibt.
Somit können wir den maximalen Drawdown, der 3,5 % beträgt, genau berechnen. Nennen wir es den „historischen maximalen Drawdown“. Basierend auf dieser Risikokennzahl können wir davon ausgehen, dass unser maximales Risiko bei unveränderten Marktbedingungen nur 3,5 % beträgt. Es stellt sich jedoch die Frage, ob wir unser Vertrauen ausschließlich auf einen Wert setzen können, der aus einer einzigen spezifischen Beobachtung abgeleitet wird. Wäre es nicht besser, ein paar weitere Beobachtungen aus ähnlichen Situationen zu haben? Tatsächlich wäre es von Vorteil, und hier kommt die Monte-Carlo-Methode ins Spiel.
Nehmen wir uns einen Moment Zeit, um zu klären, was die Monte-Carlo-Methode beinhaltet. Dabei geht es darum, einen Prozess durch ein mathematisches Modell unter Verwendung von Zufallsvariablengeneratoren zu beschreiben. Das Modell wird dann wiederholt berechnet und auf Grundlage der erfassten Daten werden probabilistische Eigenschaften des Prozesses abgeleitet.
In unserem Fall beinhaltet der Prozess eine Reihe von Aktienrenditen, die wir mithilfe des Geometrisch-Brown-Motion-Modells (GBM) simulieren. Das GBM-Modell geht davon aus, dass Aktienrenditen einem zeitkontinuierlichen stochastischen Prozess folgen, und wird häufig in der Finanzmodellierung verwendet. Durch die Simulation von Aktienrenditen mithilfe von GBM können wir mehrere Szenarien generieren und den maximalen Drawdown für jedes Szenario berechnen. Dadurch erhalten wir eine Verteilung der maximalen Drawdowns und können so das Abwärtsrisiko besser einschätzen.
Um die Monte-Carlo-Simulation zu implementieren, müssen wir die Parameter für das GBM-Modell definieren. Zu diesen Parametern gehören die Driftrate (μ), die Volatilität (σ) und der Zeithorizont (T). Wir werden auch die Anzahl der Simulationsläufe (N) und die Anzahl der Zeitschritte (M) innerhalb jedes Laufs angeben. Wenn diese Parameter eingestellt sind, können wir mit der Simulation fortfahren.
Hier ist eine Beispielimplementierung der Monte-Carlo-Simulation zur Berechnung des erwarteten maximalen Drawdowns mit Python:
In diesem Beispiel verwenden wir NumPy, um Array-Operationen effizient abzuwickeln. Wir initialisieren ein Array S, um die simulierten Aktienkurse für jeden Lauf und jeden Zeitschritt zu speichern. Wir iterieren über die Zeitschritte und simulieren die Aktienkursänderungen mithilfe der GBM-Formel. Nachdem wir alle Läufe simuliert haben, berechnen wir den Drawdown für jeden Lauf, indem wir den Spitzenwert ermitteln und ihn vom aktuellen Preis abziehen. Schließlich berechnen wir den erwarteten maximalen Drawdown, indem wir den Mittelwert aller Drawdowns bilden.
Durch die Ausführung dieser Monte-Carlo-Simulation können wir den erwarteten maximalen Drawdown auf der Grundlage mehrerer simulierter Szenarien abschätzen. Dies ermöglicht ein umfassenderes Verständnis des Abwärtsrisikos im Vergleich zu einer einzelnen Beobachtung anhand historischer Daten.
Abschließend haben wir das Konzept des maximalen Drawdowns, seine Berechnung anhand historischer Daten und die Anwendung der Monte-Carlo-Methode zur Schätzung des erwarteten maximalen Drawdowns untersucht. Wir haben auch besprochen, wie man die Leistung der Drawdown-Berechnung mit Numba verbessern kann. Die Integration dieser Techniken kann die Effizienz und Genauigkeit von Finanzberechnungen erheblich verbessern und Händlern und Anlegern wertvolle Risikokennzahlen für die Entscheidungsfindung an die Hand geben.
Vielen Dank, dass Sie sich CloseToalgotrading angesehen haben! Ich hoffe, Sie fanden dieses Video informativ und hilfreich. Wenn Sie Fragen oder Kommentare haben, können Sie diese gerne unten mitteilen. Bleiben Sie dran für weitere spannende Themen im algorithmischen Handel und im quantitativen Finanzwesen.
Portfoliooptimierung zur Maximierung der Sharpe Ratio mit R Studio (CRAN)
Portfoliooptimierung zur Maximierung der Sharpe Ratio mit R Studio (CRAN)
Hallo Freunde, willkommen bei Macro Sapiens. Im heutigen Tutorial erfahren wir, wie man ein Portfolio optimiert, um die Sharpe Ratio zu maximieren. Die Sharpe Ratio misst die Rendite des Portfolios pro eingegangener Risikoeinheit. Um dies zu erreichen, verwenden wir die Bibliotheken quantmod, PortfolioAnalytics, PerformanceAnalytics und NSE2R. Die Quantmod-Bibliothek hilft uns beim Abrufen von Daten von Yahoo Finance, PortfolioAnalytics stellt die Optimierungsfunktion bereit, PerformanceAnalytics hilft bei der Visualisierung und NSE2R ist eine spezielle Bibliothek für die National Stock Exchange of India.
Zuerst definieren wir eine Variable namens „stock_names“, um die Namen der Aktien zu speichern. Wir verwenden die Quantmod-Bibliothek, um die Daten von Yahoo Finance für die 50 Aktiensymbole des Nifty 50-Index in Indien abzurufen. Wir extrahieren die Symbolspalte und speichern sie in einer neuen Variablen namens „symbols“.
Als Nächstes müssen wir das Start- und Enddatum für die Daten angeben, die wir abrufen möchten. Wir verwenden die Variable „since“, um das Startdatum als 1. Januar 2018 und das Enddatum als aktuelles Datum zu definieren. Wir konzentrieren uns auf die angepassten Schlusskurse, da diese eine bessere Darstellung der Wertentwicklung der Aktie bieten, und speichern sie in einer Variablen namens „prices_data“.
Um die Portfoliorendite zu berechnen, verwenden wir die tägliche Renditeformel: (Schlusskurs von Tag 2 – Schlusskurs von Tag 1) / Schlusskurs von Tag 1. Wir modifizieren die Funktion, um alle fehlenden Werte (NAs) in den Daten zu verarbeiten.
Als Nächstes definieren wir die Spaltennamen des Portfolio-Rendite-Datensatzes als „Fonds“. Dies wird später im Optimierungsprozess verwendet.
Jetzt können wir den Optimierungsprozess mithilfe der PortfolioAnalytics-Bibliothek starten. Wir erstellen ein erstes Portfolio und fügen Einschränkungen hinzu. Eine Einschränkung stellt sicher, dass die Gesamtgewichtung des Portfolios gleich 1 ist, und die andere Einschränkung gibt an, dass wir ein Long-Only-Portfolio wollen, also keine negativen Gewichtungen.
Wir fügen die Zielfunktion hinzu, die die mittlere Rendite des Portfolios anhand der Preisdaten darstellt. Wir legen die maximale Anzahl der Iterationen für den Optimierungsprozess auf 2000 fest.
Um die Sharpe Ratio zu berechnen, müssen wir die risikofreie Rendite definieren. In diesem Fall gehen wir von 0 % aus. Wir verwenden die Funktion der PerformanceAnalytics-Bibliothek, um die Renditen des Portfolios zu analysieren und die Sharpe Ratio zu berechnen.
Wir erstellen eine Tabelle, um die Ergebnisse anzuzeigen, einschließlich der maximalen Sharpe-Ratio-Rendite, die durch Zufallsoptimierung erreicht wird, und der Renditen des ROI-Optimierers. Wir zeichnen die Effizienzgrenze auf, um die optimierten Portfolios zu visualisieren.
Darüber hinaus vergleichen wir die Portfoliorenditen mit den Renditen einer Anlage in den Nifty 50-Index. Wir berechnen die kumulierten Erträge für jeden Ansatz und zeichnen sie auf, um die Leistung zu analysieren.
Basierend auf den Ergebnissen stellen wir fest, dass die zufällige Portfoliooptimierungsmethode im Vergleich zum ROI-Optimierer und dem Nifty 50-Index eine höhere Sharpe Ratio und kumulative Rendite bietet.
Diese optimierten Gewichtungen können verwendet werden, um einen Aktienkorb für Investitionen zu erstellen. Durch die Verfolgung der Wertentwicklung des Korbs über einen bestimmten Zeitraum können Anleger fundierte Entscheidungen über die Anlage in die ausgewählten Aktien treffen.
Wir hoffen, dass Sie dieses Tutorial hilfreich fanden. Wenn Sie Fragen haben, können Sie diese gerne stellen. Vergessen Sie nicht, unseren Kanal zu liken, zu teilen und zu abonnieren. Danke schön!
Kassakurs vs. Terminkurse (Berechnungen für CFA®- und FRM®-Prüfungen)
Kassakurs vs. Terminkurse (Berechnungen für CFA®- und FRM®-Prüfungen)
Guten Tag allerseits! Ich möchte das heutige Konzept für unsere Diskussion vorstellen. Wir werden die Berechnung von Terminkursen aus Kassakursen untersuchen, aber statt der Formel werden wir die Zeitachsenmethode anwenden. Dieser Ansatz macht das Auswendiglernen komplexer Formeln überflüssig und macht den Prozess intuitiver.
Bevor wir uns mit den Details befassen, lassen Sie uns kurz die Definitionen von Termin- und Kassakursen zusammenfassen. Der Kassakurs bezieht sich auf jeden derzeit auf dem Markt verfügbaren Zinssatz. Es stellt den Zinssatz dar, zu dem man für einen bestimmten Zeitraum investieren kann, beispielsweise zwei, drei, vier oder fünf Jahre ab heute. Der Kassakurs ist ein investierbarer Zinssatz, der es Einzelpersonen ermöglicht, durch Investitionen am Markt Renditen zu erzielen.
Andererseits ist der Terminkurs ein theoretischer Kurs, der oft als impliziter Terminkurs bezeichnet wird. Es stellt den prognostizierten Zinssatz zwischen zwei zukünftigen Zeiträumen dar. Beispielsweise möchten wir möglicherweise die Rate zwischen Jahr drei und Jahr vier bestimmen, wenn wir uns derzeit im Zeitraum Null befinden. Der Terminzinssatz wird auf Basis aktueller Kassakurse berechnet und dient als Prognose des Zinssatzes zu einem späteren Zeitpunkt.
Es ist wichtig zu beachten, dass der Terminkurs kein investierbarer Zinssatz ist, es sei denn, er wird durch ein derivatives Instrument wie einen Terminkontrakt oder einen Terminkontrakt festgelegt. Bis dahin bleibt es eine implizite Rate, was bedeutet, dass sie möglicherweise in der Realität existiert oder auch nicht, wenn der angegebene Zeitraum in der Zukunft liegt.
Um den impliziten Terminkurs investierbar zu machen, muss man einen Terminkontrakt abschließen. Dadurch wird sichergestellt, dass der Zinssatz festgelegt ist und zum festgelegten Zeitpunkt in der Zukunft für Finanztransaktionen verwendet werden kann.
Lassen Sie uns nun die Zeitachsenmethode zur Berechnung von Terminkursen untersuchen. Wir werden zunächst die Formel untersuchen, aber denken Sie daran, dass das Ziel darin besteht, sich nicht mehr auf Formeln zu verlassen, sondern die Zeitachsenmethode anzunehmen. Wenn Sie beide Ansätze vergleichen, werden Sie feststellen, dass die Zeitleistenmethode die gleichen Ergebnisse liefert, ohne dass Formeln auswendig gelernt werden müssen.
Die Formel zur Berechnung der Forward Rates lautet wie folgt:
(1 + za)^a * (1 + ifr) = (1 + zb)^b
In dieser Formel steht „a“ für die kürzere Laufzeit, „b“ für die längere Laufzeit, „za“ und „zb“ beziehen sich auf die jeweiligen Kassakurse für die kürzere und längere Laufzeit und „ifr“ stellt den impliziten Terminkurs dazwischen dar Zeitraum „a“ und „b“.
Lassen Sie uns nun ein Beispiel veranschaulichen, um unser Verständnis zu festigen. Wir erhalten die folgenden Kassazinssätze: Der einjährige Kassazinssatz beträgt 5 %, der zweijährige Kassazinssatz 6 %. Unser Ziel ist es, den einjährigen Terminzinssatz in einem Jahr ab heute zu bestimmen.
Mithilfe der Formel können wir die angegebenen Kassakurse in die Gleichung einsetzen:
(1 + 0,05)^1 * (1 + ifr) = (1 + 0,06)^2
Wenn wir weiter vereinfachen, erhalten wir:
1,05 * (1 + ifr) = 1,1236
Lassen Sie uns nun die Zeitachsenmethode für dieselbe Berechnung untersuchen. Zeichnen Sie eine Zeitleiste mit den Zeiträumen Null, Eins und Zwei. Zeichnen Sie die Kassakurse entsprechend auf. Markieren Sie für den zweijährigen Kassazinssatz 6 % von null bis zwei. Markieren Sie für den einjährigen Kassazinssatz 5 % von null bis eins. Unser Ziel ist es, den einjährigen Terminzinssatz in einem Jahr ab heute zu berechnen, der als „f“ bezeichnet wird.
Um den impliziten Terminkurs mithilfe der Timeline-Methode zu ermitteln, nutzen wir das Prinzip der No-Arbitrage. Dieses Prinzip besagt, dass wir unabhängig von der gewählten Route auf der Zeitachse am Ende den gleichen zukünftigen Wert erhalten sollten. In diesem Fall können wir 1 US-Dollar für zwei Jahre zu 6 % Zinsen investieren oder 1 US-Dollar für ein Jahr zu 5 % Zinsen investieren und diesen Betrag dann für ein weiteres Jahr zum Terminzins „f“ reinvestieren.
Um den einjährigen Terminzinssatz zu berechnen, investieren wir zunächst 1 US-Dollar für ein Jahr zum einjährigen Kassazinssatz von 5 %. Diese Investition erhöht sich nach einem Jahr auf 1,05 $.
Jetzt nehmen wir die 1,05 $ und reinvestieren sie für ein weiteres Jahr zum Terminkurs „f“. Der zukünftige Wert dieser Investition sollte dem einer Investition von 1 US-Dollar für zwei Jahre zum Zweijahres-Kassazinssatz von 6 % entsprechen.
Nehmen wir an, dass der Terminkurs „f“ x % beträgt. Wir können die Gleichung wie folgt aufstellen:
(1 + 0,05) * (1 + x%) = (1 + 0,06)^2
Wenn wir es noch weiter vereinfachen, haben wir:
1,05 * (1 + x%) = 1,1236
Beide Seiten durch 1,05 dividieren:
1 + x % = 1,1236 / 1,05
1 + x % = 1,07
x% = 1,07 - 1
x% = 0,07
Der einjährige Terminzinssatz in einem Jahr ab heute, bezeichnet als „f“, beträgt also 7 %.
Mithilfe der Timeline-Methode konnten wir den Forward-Kurs berechnen, ohne uns auf die Formel verlassen zu müssen. Dieser Ansatz bietet eine visuelle Darstellung der Zeitachse und ermöglicht ein intuitiveres Verständnis der impliziten Forward-Rate.
Sharpe Ratio, Treynor Ratio und Jensens Alpha (Berechnungen für CFA®- und FRM®-Prüfungen)
Sharpe Ratio, Treynor Ratio und Jensens Alpha (Berechnungen für CFA®- und FRM®-Prüfungen)
Meine Damen und Herren, ich grüße Sie alle herzlich. Heute befassen wir uns mit einem wichtigen Thema, nämlich den verschiedenen Maßstäben für die Portfolio-Performance. Insbesondere werden wir das Sharpe-Verhältnis, das Treynor-Verhältnis und Jensens Alpha untersuchen. Es gibt zwar mehrere andere Portfolio-Leistungskennzahlen, diese drei gelten jedoch allgemein als entscheidend. Das Verständnis der Wechselbeziehung zwischen diesen Maßnahmen und ihrer praktischen Bedeutung ist nicht nur für Ihre bevorstehenden CFA- oder FRM-Prüfungen, sondern auch für deren praktische Anwendung von entscheidender Bedeutung. Diese Konzepte durchdringen alle drei Ebenen des CFA-Lehrplans und unterstreichen ihre Bedeutung während Ihres gesamten Prüfungsverlaufs.
Beginnen wir mit der Sharpe-Ratio, die bis heute die angesehenste Kennzahl auf diesem Gebiet ist. Sein Reiz liegt in seiner Einfachheit, trotz einiger inhärenter Einschränkungen. Dennoch ist sie weiterhin die wichtigste Kennzahl beim Vergleich von Fonds, wie sie häufig von Hedgefonds und Investmentfonds angegeben wird. Ebenso werden sowohl das Treynor-Verhältnis als auch das Jensen-Alpha in der Branche häufig verwendet. Daher ist es wichtig, diese Konzepte zu verstehen, nicht nur für Ihre Prüfungen, sondern auch wegen ihrer praktischen Relevanz.
Die wie folgt formulierte Sharpe-Ratio verdient unsere Aufmerksamkeit:
Sharpe Ratio = (Portfoliorendite – risikofreier Zinssatz) / Standardabweichung des Portfolios
Im Zähler stellt „Portfoliorendite (rp)“ die Überrendite gegenüber dem risikofreien Zinssatz (rf) dar. Wenn man in ein Portfolio investiert, erwartet man Renditen, die über dem risikofreien Zinssatz liegen, da das Eingehen von Risiken das Streben nach höheren Erträgen bedeutet. Daher konzentrieren wir uns auf die Überrendite, die die Rendite bezeichnet, die über den risikofreien Zinssatz hinaus erzielt wird. Im Nenner haben wir die Standardabweichung, die als Maß für das Risiko dient. Hierbei ist unbedingt zu beachten, dass die Standardabweichung sowohl diversifizierbare als auch nicht diversifizierbare Risiken berücksichtigt. Diversifizierbare Risiken können durch Diversifikation eliminiert werden, während nicht diversifizierbare Risiken bestehen bleiben. Folglich bewertet die Sharpe Ratio die Überrendite pro Einheit des Gesamtrisikos und kombiniert sowohl systematische als auch nicht systematische Risiken.
Es ist wichtig hervorzuheben, dass der Wert der Sharpe Ratio im Vergleich zu den Sharpe Ratios anderer Portfolios am relevantesten ist. Es ist von Bedeutung, wenn Portfolios relativ zueinander bewertet werden. Tatsächlich bezeichnen Branchenexperten Sharpe-Ratios oft als „Sharps“. Portfoliomanager könnten beispielsweise sagen: „Ich gebe zwei Sharpes zurück“ oder „drei Sharpes“ und geben damit ihr jeweiliges Sharpe-Verhältnis an.
Eine höhere Sharpe-Ratio gilt als günstig. Eine höhere Quote weist darauf hin, dass ein Portfolio in der Lage ist, bei gleichem Risiko eine höhere Rendite zu erwirtschaften, was es zu einer bevorzugten Wahl macht. Entscheiden Sie sich daher bei der Auswahl eines Portfolios basierend auf der Sharpe-Ratio für das Portfolio mit der höchsten Quote.
Wenden wir uns nun dem Treynor-Verhältnis zu, das im Zähler eine verblüffende Ähnlichkeit mit dem Sharpe-Verhältnis aufweist, im Nenner jedoch davon abweicht. Die Treynor-Quote misst die Überrendite pro Einheit des systematischen Risikos, angegeben durch Beta. Beta stellt das nicht diversifizierbare, systematische Risiko dar, das einer Anlage innewohnt. Diese engere Messgröße konzentriert sich im Gegensatz zum breiteren Anwendungsbereich der Sharpe Ratio ausschließlich auf das systematische Risiko. Ebenso ist die Treynor-Quote im Vergleich zu den Quoten anderer vergleichbarer Fonds wertvoller. Die Auswahl eines Portfolios auf der Grundlage der Treynor-Quote bedeutet, dass man sich für das Portfolio mit der höchsten Quote entscheidet, da ein höherer Wert auf eine höhere Überschussrendite pro Einheit systematischen Risikos hinweist.
Bevor wir Jensens Alpha untersuchen, werfen wir einen Blick auf das Capital Asset Pricing Model (CAPM). CAPM hilft uns dabei, Jensens Alpha zu verstehen, da es hilft, die erwartete oder erforderliche Rendite für ein Portfolio zu bestimmen. CAPM berechnet die erwartete Rendite, indem es mit dem risikofreien Zinssatz beginnt und Beta mal die Marktrisikoprämie (die Differenz zwischen Marktrendite und Risiko) addiert.
Jensens Alpha, auch Jensen-Performance-Index oder einfach Alpha genannt, ist ein Maß für die Überrendite eines Portfolios im Vergleich zu seiner erwarteten Rendite basierend auf dem Capital Asset Pricing Model (CAPM). Das CAPM setzt die erwartete Rendite eines Vermögenswerts oder Portfolios in Beziehung zu seinem Beta, das das systematische Risiko oder die Sensitivität gegenüber Marktbewegungen darstellt.
Jensens Alpha wird wie folgt berechnet:
Jensens Alpha = Portfoliorendite – [Risikofreier Zinssatz + Beta × (Marktrendite – Risikofreier Zinssatz)]
In dieser Formel stellt die Portfoliorendite die tatsächliche Rendite des Portfolios dar, der risikofreie Zinssatz ist die Rendite einer risikofreien Anlage wie einer Staatsanleihe, Beta misst die Sensitivität des Portfolios gegenüber Marktbewegungen und die Marktrendite ist die durchschnittliche Rendite des Gesamtmarktes.
Jensens Alpha gibt an, ob das Portfolio seine erwartete Rendite basierend auf dem CAPM über- oder unterschritten hat. Ein positives Alpha deutet darauf hin, dass das Portfolio Überrenditen erzielt hat, die über das hinausgehen, was angesichts seines systematischen Risikos zu erwarten wäre, während ein negatives Alpha auf eine Underperformance hinweist. Daher streben Anleger und Portfoliomanager bei der Bewertung der Anlageperformance typischerweise nach positiven Alphas.
Es ist wichtig zu beachten, dass Jensens Alpha nur das systematische Risiko berücksichtigt und nicht das Gesamtrisiko oder die mit dem Portfolio verbundenen spezifischen Risiken berücksichtigt. Daher wird empfohlen, Jensens Alpha in Verbindung mit anderen Leistungskennzahlen wie der Sharpe-Ratio und der Treynor-Ratio zu verwenden, um ein umfassenderes Verständnis der Performance eines Portfolios zu erhalten.
Zusammenfassend sind die Sharpe-Ratio, die Treynor-Ratio und das Jensen-Alpha wertvolle Maßstäbe für die Bewertung der Portfolio-Performance. Die Sharpe-Ratio bewertet die Überrendite pro Einheit des Gesamtrisikos, während sich die Treynor-Ratio auf die Überrendite pro Einheit des systematischen Risikos konzentriert. Jensens Alpha vergleicht die tatsächliche Rendite eines Portfolios mit der erwarteten Rendite auf Basis des CAPM, wobei nur das systematische Risiko berücksichtigt wird. Diese Kennzahlen bieten unterschiedliche Perspektiven auf die Portfolio-Performance und können zusammen verwendet werden, um fundierte Anlageentscheidungen zu treffen.
Kovarianz und Korrelation (Berechnungen für CFA®- und FRM®-Prüfungen)
Kovarianz und Korrelation (Berechnungen für CFA®- und FRM®-Prüfungen)
Hallo zusammen, beginnen wir mit der Diskussion des Konzepts von Kovarianz und Korrelation. Das heutige Thema kann für viele Menschen verwirrend sein, da Korrelation ein häufig verwendeter Begriff ist, während Kovarianz bei Berechnungen oft unbekannt ist. Darüber hinaus sollen sowohl Kovarianz als auch Korrelation dasselbe messen, was verwirrend sein kann. Wir werden untersuchen, warum wir zwei unterschiedliche Maße für denselben Zweck verwenden und bestimmen, wann Kovarianz und wann Korrelation verwendet werden sollten. Darüber hinaus werden wir untersuchen, wie sowohl Kovarianz als auch Korrelation berechnet werden.
Bevor wir uns mit der Kovarianz befassen, werfen wir einen kurzen Blick auf die Berechnung der Varianz, da sie die Grundlage unserer Diskussion bildet. Sobald wir verstehen, wie die Varianz berechnet wird, können wir mit der Kovarianz fortfahren und die Beziehung zwischen den beiden Maßen untersuchen. Dies wird uns helfen, Einblicke in den Ursprung dieser Maße und ihre Beziehung zur Korrelation zu gewinnen.
Betrachten wir nun ein Beispiel, um die Berechnung der Varianz zu verstehen. Wir verfügen über eine Datenreihe, die die Portfoliorenditen für fünf Jahre darstellt. Die Renditen werden in Prozent für jedes Jahr angegeben. Um die Varianz zu berechnen, müssen wir zunächst den Mittelwert oder Durchschnitt der Datenreihen ermitteln. Wir summieren alle Erträge und dividieren die Summe durch die Anzahl der Beobachtungen, in diesem Fall fünf Jahre. Dies liefert uns den Mittelwert der Datenreihe.
Als nächstes berechnen wir die Abweichung vom Mittelwert für jede Beobachtung. Wir subtrahieren den Mittelwert von jedem Rückgabewert. Dies gibt uns die Abweichung vom Mittelwert für jede Beobachtung. Die quadrierten Abweichungen werden dann berechnet, indem jede Abweichung quadriert wird. Wir summieren alle quadrierten Abweichungen und dividieren das Ergebnis durch die Anzahl der Beobachtungen, um die Varianz zu erhalten. Schließlich ziehen wir die Quadratwurzel der Varianz, um die Standardabweichung zu ermitteln, die ein entsprechendes Maß darstellt.
Es ist wichtig zu beachten, dass wir die Varianz hier zwar manuell berechnen, in realen Szenarien oder Prüfungen wie CFA oder FRM diese Berechnungen jedoch normalerweise mithilfe integrierter Funktionen in Taschenrechnern wie BA2 Plus oder BA2 Plus Professional durchgeführt werden.
Kommen wir zur Kovarianz: Sie ist ein Maß für die Gleichbewegung oder Beziehung zwischen zwei verschiedenen Datenreihen. Im Gegensatz zur Varianz, die sich mit einer einzelnen Datenreihe befasst, können wir mit der Kovarianz untersuchen, wie sich zwei Datenreihen zusammen bewegen. Mithilfe der Kovarianz können wir beispielsweise die Gleichbewegung zwischen einem ETF und einem Referenzindex analysieren. Eine positive Kovarianz gibt an, dass sich die beiden Variablen in die gleiche Richtung bewegen, während eine negative Kovarianz auf entgegengesetzte Bewegungen schließen lässt. Eine Kovarianz von Null bedeutet, dass zwischen den Variablen keine Beziehung besteht.
Um die Kovarianz zu berechnen, subtrahieren wir den Mittelwert der ersten Datenreihe von jeder Beobachtung dieser Reihe und multiplizieren ihn mit der Abweichung vom Mittelwert der zweiten Datenreihe. Wir wiederholen diesen Vorgang für alle Beobachtungen, multiplizieren die Abweichungen, summieren die Ergebnisse und dividieren durch die Anzahl der Beobachtungen, um die Kovarianz zu erhalten.
Es ist erwähnenswert, dass die Kovarianz Ähnlichkeiten mit der Varianz aufweist, dass sie jedoch zwei unterschiedliche Datenreihen umfasst und nicht nur eine. Tatsächlich kann Varianz als Sonderfall der Kovarianz betrachtet werden, bei dem die beiden Variablen identisch sind.
Es gibt jedoch eine Einschränkung bei der alleinigen Verwendung der Kovarianz. Während die Kovarianz einen Einblick in die Beziehung zwischen zwei Variablen bietet, vermittelt sie keinen Eindruck vom Ausmaß der Beziehung. Dies stellt eine Herausforderung dar, wenn Beziehungen zwischen verschiedenen Datenreihen verglichen werden. Hier kommt die Korrelation ins Spiel.
Korrelation ist eine standardisierte Version der Kovarianz. Sie wird berechnet, indem die Kovarianz durch das Produkt der Standardabweichungen der beiden Datenreihen dividiert wird. Dieser Normalisierungsprozess ermöglicht es uns, Beziehungen auf einer standardisierten Skala zu vergleichen, die von -1 bis +1 reicht. Eine Korrelation von +1 zeigt eine perfekte positive Beziehung an, -1 stellt eine perfekte negative Beziehung dar und 0 bedeutet keine Beziehung.
Kovarianz und Korrelation sind Maße, die uns helfen, die Beziehung zwischen verschiedenen Datenreihen zu verstehen. Die Kovarianz gibt einen Hinweis auf die Gleichbewegung zwischen Variablen, während die Korrelation dieses Maß standardisiert und eine einfache Messung ermöglicht.