Statistik, 1System - 1Markt

Eröffnet von stock-profi im Board Handelssysteme mit Equilla

Seitenlänge102030
Seite 1 von 3123
#27: 24.07.2008 13:14 stock-profi
@stock-profi (#24)

manchmal will man auch den Erfolg des Trades am letzten Stab sehen. Allerdings ist das nur möglich, wenn am selben Stab kein neuer Trade beginnt. Ferner habe ich noch die HiLo-Basis hinzugefügt.

Equilla Skript "showTradeProfitPerContr (Indicator)"

sieht dann so aus:
ALLIANZ SE VNA O.N.
#26: 09.03.2008 15:54 stock-profi
Die meisten Auswertungen, die ich bisher vorgestellt habe, beziehen sich auf Trades, manchmal ist aber eine zeitliche Auswertung, z.B. auf Monatsbasis gewünscht. Man will also wissen, wie viel Gewinn oder Verlust man im Monat (Woche, Jahr) gemacht hat, entweder in absoluten Zahlen oder in Prozent. Die Statistik von TS 5 zeigt die Erträge pro Monat nur in absoluten Zahlen und nur als Zahlenfriedhof. Schöner wäre es, wenn man die Zahlen als Werte eines Indikators auch auf dem Chart hätte.

Der folgende einfache Indi ermittelt die Monatsergebnisse auf Basis der GlobalOpenEquity, welche auch die Kosten für offene Trades berücksichtigt. Er zeigt die Ergebnisse auf dem Chart an, druckt sie bei Bedarf aber auch im Ausgabefenster, so dass man sie leicht nach Excel exportieren kann.

Equilla Skript "monthlyResultGlobalOpenEq (Indicator)"

Bei der prozentualen Berechnung lege ich das Anfangskapital aus dem MoneyManagement zugrunde. Da das Anfangskapital in einem Indi nicht zur Verfügung steht, beziehe ich es aus meiner Strategie globalSettings, welche wichtige globale Variablen setzt. Will jemand so etwas nicht schreiben, kann er den Indi als Strategie anlegen und das Anfangskapital direkt beziehen.

Voraussetzung für sinnvolle Ergebnisse ist der Einsatz eines PositionSizers, der die Anzahl der Kontrakte festlegt. Im folgenden Beispiel lege ich das gesamte Kapital (Anfangskapital plus verdientes Kapital) im nächsten Trade an.
DAX P-IN.
Die monatlichen Ergebnisse liegen zwischen -7,1% und 6,3% mit einem Mittelwert von 0,78% und einem Ratio von 0,25.

Besonders interessant wird die monatliche Auswertung, wenn man mehrere Instrumente handelt. Der Position Sizer teilt im folgenden Beispiel die Summe aus Anfangskapital und verdientem Kapital zu gleichen Teilen auf die beiden Instrumente auf.
DAX P-IN. (1)
Das Ergebnis in absoluten Zahlen ist fast das gleiche, als wenn man wie oben nur den DAX handelt. Die monatlichen Ergebnisse liegen zwischen -5,1 und 5,9% mit einem Mittelwert von 0,73 und einem Ratio von 0,29. Man hat hier also eine Verteilung der monatlichen Ergebnisse, die nicht so weit streut. Besonders deutlich wird das im Januar 2008. Handelt man nur den DAX, ergibt sich ein Verlust von 7,1%. Handelt man beide Werte, bringt der Januar einen Verlust von 2,9%.
#25: 16.01.2006 17:46 stock-profi
Die Kennzahl RWL aus #16 ist zwar in der Statistik von TSe enthalten, ich habe mich aber trotzdem entschieden, RWL auch in meinem Statistik-Indikator exportStatistics zu berechnen und auszugeben.

Die Formel, nach der ich RWL berechne, lautet:

RWL = (sumWin / WinningTrades)/ (-sumLoss / LosingTrades)

was mit der Definition AW / (-AL) aus #16 identisch ist.

Der Grund für die Aufnahme liegt darin, dass meine Berechnung beim Vorliegen von BreakEven Trades oder beim Vorliegen von Teilausstiegen zu einem anderen Wert führen wird als die Berechnung von TSe.

1. In der Regel arbeite ich beim Backtest ohne slippage und Gebühren. Wenn ich dann einen breakEven Stop einbaue, ergeben sich even Trades, die ich in der Statistik als Verlusttrades auffasse, weil ja in der Realität noch slippage und Gebühren anfallen. TSe berücksichtigt solche even Trades nicht bei der Berechnung von RWL und weist sie separat als even Trades aus. Deswegen stimmt bei TSe z.B. die Formel 7 aus #16 nicht mehr:

{7} profFactor = RWL * PercWin / (100 – PercWin)

2. Bei einem Handelssystem mit Teilausstiegen zähle ich die Trades anders als TSe. Deswegen ergeben sich andere Werte für RWL.

In allen anderen Fällen sollte mein Wert für RWL mit dem Wert von TSe übereinstimmen (hoffentlich tut er es auch ;)).

Im Ausgabefenster erscheint der Wert für RWL ganz links.
#24: 01.05.2005 16:41 stock-profi
Im Diskussionsthread habe ich einen kleinen Indi erwähnt, der pro Stab den aufgelaufenen Gewinn des trades absolut oder in Prozent oder in Vielfachen der Vola anzeigt. Hier ist er:



Man sieht,daß der Gewinn auf Basis des Schlußkurses und nicht auf Basis des High/Low ermittelt wird. Ferner wird bei einem neuen trade schon der Gewinn des neuen trades angezeigt und nicht mehr der Gewinn des alten. Das Maximum oder Minimum des Gewinns wird also bei dieser einfachen Darstellung nicht immer richtig angezeigt.



Man kann jetzt durch den Chart rollen und folgende Fragen beantworten:

1. Wie oft ist ein trade, der schon x% im Verlust lag, noch mal ins Plus gelaufen?
2. Wieviel von einem Gewinn von x% hat man im Laufe eines trades wieder abgegeben?
3. Wie oft ist ein trade bis zu einem Gewinn von x% gelaufen?

An die Stelle von % kann man auch atr setzen.

Durch Beantwortung dieser Fragen gewinnt man Hinweise auf das Setzen von stopLoss, trailstop und profitTarget.

Die Idee zu diesem Indi stammt von Alex (neu1234).
#23: 20.04.2005 17:35 stock-profi
@stock-profi (#5)

Ich habe die Input-Variable expTrades im Modul exportStatistics etwas erweitert, sie lautet jetzt

expTrades (none, single, Scan) = none,


Steht sie auf Scan, werden für jeden Trade die folgenden Angaben in einer Zeile ausgegeben:

Symbol des Instruments, Nummer des trades in zeitlicher Reihenfolge, tradeProfit, Länge des trades in Stäben, Einstiegspreis, Einstiegsdatum, Ausstiegspreis, Ausstiegsdatum.

Ist der letzte trade am letzten Stab noch offen, fehlen hier die beiden letzten Angaben.

Wird diese Einstellung in Verbindung mit dem Scanner gewählt, werden alle Trades für alle Instrumente nacheinander ausgegeben.

Steht die Einstellung auf single, wird zunächst eine Zeile ausgegeben, die neben dem Symbol in der Spalte A den Wert der startEquity in den Spalten I und J (Excel) enthält, die Spalten I und J dienen der Berechnung von closedEquity und topEquity in Excel.
Dann folgen die trades mit den obigen Angaben.
Sind alle trades ausgegeben, folgen eine Leerzeile und eine Zeile, welche die Anzahl der trades und die effektive Länge des Charts enthält (siehe Punkt 11 in #2).

Man wählt diese Einstellung, wenn man für ein einzelnes Instrument in Excel eine Statistik erstellen will.
#22: 28.03.2005 19:12 stock-profi
Übrigens hat die durch das Makro erzeugte Tabelle genau das Aussehen wie in #12. Für jede der Kennzahlen wie avgProfit, netProfit etc. liegen mir nach der Simulation 1000 Ergebnisse vor, so daß es sinnvoll ist, bei Bedarf eine Verteilung zu berechnen, was ich hier für den prozentualen Drawdown PercDD durchführen möchte. Dazu kopiere ich das in #19 vorgestellte Arbeitsblatt Distribution und ersetze hier lediglich die 41 tradeProfits durch die 1000 Werte für PercDD. Damit erhalte ich folgendes Ergebnis:



und die Verteilung:



Aus dieser Darstellung lese ich ab, daß 96,1% der Durchläufe einen PercDD von höchstens 41% aufweisen. Das ist in meinen Augen ein gutes Ergebnis.

Ausgangspunkt war der im Backtest ermittelte PercDD von 16,94%. Durch die Simulation weiß ich, daß in der Realität durchaus ein PercDD von bis zu 33% (92,6% der Fälle) oder gar 40% vorkommen kann, ohne daß ich daraus schließen kann, daß das Handelssystem sKeltner auf Allianz zu funktionieren aufgehört hat.
#21: 28.03.2005 18:06 stock-profi
Schaut man sich die Auswertung PerformanceSummary an, stellt man fest, dass alle Werte unabhängig von der Reihenfolge der tradeProfits sind. Dasselbe gilt noch für die ersten drei Werte unter RiskMeasures. Erst die Drawdownangaben und consec.Winners bzw. -Losers sind von der Reihenfolge der tradeProfits abhängig, ebenso die drawdown- und die equity-Kurve. Dies zeigt, dass die Kennzahlen allein nicht alles aussagen, denn die Reihenfolge der tradeProfits hat eine erhebliche Auswirkung auf den Drawdown und das Aussehen, d.h. die Glätte und die Steigung, der equity – Kurve.

Wie sicher kann man sein, dass in Zukunft, wenn man das System in der Realität handelt, die Reihenfolge der tradeProfits ähnlich aussieht wie beim Backtest? Daß also z.B. nach den 4 Verlusten in den trades 23 bis 26 und dem kleinen Gewinn in trade 27 ein Riesengewinn auftaucht, der uns mit einem Schlag aus einem ernsthaften drawdown herausführt?

Schaut man sich die Gewinne und Verluste an, stellt man fest, dass die Gewinne bei dem System sKeltner in Trends anfallen und die Verluste in Seitwärtsphasen. Das ist nicht weiter verwunderlich, denn genauso ist das System konzipiert. Die obige Frage kann man also auch so stellen: wie sicher können wir sein, dass in Zukunft bei der Allianz – Aktie die Seitwärtsphasen nach 3 bis 4 trades, also nach ca. 90 bis 120 Tagen, zu Ende sind? Und dass danach ein neuer Trend beginnt?

Eine zweite Frage drängt sich auf: in unserem Beispiel haben wir einen netProfit von 227.000, davon stammen fast 60.000 allein aus einem einzigen trade (Nr. 28). Von Mai 2002 bis Oktober 2002 entwickelte sich Allianz in einer herrlichen Abwärtsbewegung von 240 bis auf 70. Wie sicher können wir sein, dass eine solche riesige Bewegung in den nächsten 3 Jahren wieder auftritt und uns einen überdimensionierten Gewinn aus einem einzigen trade beschert?

Auf beide Fragen gibt es nur eine Antwort: wir können überhaupt nicht sicher sein, wenn es um die Zukunft geht. Weder können wir uns auf übergroße Gewinne verlassen noch können wir auf das Auftreten eines neuen Trends nach spätestens 120 Tagen vertrauen. Dann werden aber die zukünftigen Ergebnisse erheblich von den Ergebnissen des Backtests abweichen. Nicht nur werden z.B. der AverageProfit und das riskRatio niedrigere Werte aufweisen, sondern vor allem der Drawdown und der Verlauf der equity-Kurve werden evtl. völlig anders aussehen.

Wie können wir uns darauf vorbereiten?

Um die übergroßen Gewinne zu reduzieren, lege ich ein neues Arbeitsblatt adjData an, das ähnlich aussieht wie das Arbeitsblatt data (siehe 2. in #18). In adjData werden die positiven tradeProfits auf AvgProfit + 2 * StdDevProfit beschnitten und die negativen auf AvgProfit – 4 * StdDevProfit. Die Multiplikatoren 2 und 4 sind frei einstellbar. Daraus ergibt sich ein weiteres Arbeitsblatt adjPerformanceSummary mit demselben Aufbau wie in #18. Der netProfit hat sich jetzt auf etwa 198.000 verringert, der profitFactor auf 3,15 und der AvgProfit auf 4.841, der Drawdown ist sowohl absolut wie auch prozentual gleich geblieben. Letzteres ist aber Zufall, das kann bei anderen Systemen oder anderen Märkten auch anders aussehen.

Um eine andere Reihenfolge der trades zu berücksichtigen, führe ich eine Simulation durch. In einem weiteren Arbeitsblatt simData wähle ich aus den 41 im Backtest ermittelten und adjustierten tradeProfits sagen wir 34 zufällig aus. Die Formel für diese simProfits lautet:

=INDEX(adjData!C:C;ZUFALLSBEREICH(10; 9+adjData!$B$2))


Dabei steht adjData!$B$2 für die Anzahl der trades, in unserem Beispiel 41. Die Angabe „10“ resultiert daraus, dass in adjData die Zeile 10 den ersten adjustierten tradeProfit enthält. Die adjustierten tradeProfits stehen in Spalte C in den Zeilen 10 bis 50.
Es kommt bei diesem Verfahren vor, dass ein und derselbe adjustierte tradeProfit zweimal oder mehrere Male unter simData berücksichtigt wird. Vor allem aber ist die Reihenfolge der simProfits eine andere als im Backtest.

Basierend auf simData berechne ich jetzt in einem weiteren Arbeitsblatt simPerfSummary alle Kennzahlen wie in #18. Bei jedem Betätigen der F9 – Taste erhalte ich dabei ein anderes Ergebnis, weil in simData jedes Mal eine neue Auswahl der 34 trades aus den 41 trades getroffen wird. Und die Ergebnisse sind sehr unterschiedlich! Ich erhalte z.B. einen profitFactor von 1,21 bei einem Drawdown von 32% und beim nächsten Mal einen profitFactor von 5,75 bei einem Drawdown von 8%.

Um hier einen Überblick zu erhalten, muß ich mindestens 100mal die F9 – Taste betätigen und die Ergebnisse aus der simPerformanceSummary in einer Tabelle notieren. Weil das händisch gar nicht machbar ist, schreibe ich dafür ein Makro. Die in der Tabelle festgehaltenen Ergebnisse kann ich dann in nahe liegender Form ebenfalls durch das Makro auswerten. Das Ergebnis für 1000 Durchläufe sieht dann z.B. so aus:



Bei 1000 Durchläufen schließen also immerhin 989 mit einem positiven netProfit ab, der avgProfit liegt im Mittel bei 4.927, also ganz in der Nähe des oben ermittelten adjustierten AvgProfit von 4.841, die Standardabweichung der avgProfits liegt bei 1.768. High und Low ergeben sich aus Average + bzw. – StdDev. Wir können also schließen, dass 68 Prozent der Ergebnisse für den avgProfit zwischen 3.158 und 6.696 liegen. Entsprechend sind die anderen Angaben zu interpretieren.

Die Ideen aus diesem Beitrag stammen aus dem in #1 erwähnten Buch von Stridsman (S. 271 ff), allerdings arbeitet Stridsman mit einer festen Tabelle, in der die Anzahl der trades auf 20 und die Anzahl der Durchläufe auf 200 festgesetzt sind. Durch die Benutzung eines Makros habe ich das Verfahren etwas flexibler gestalten können.
#20: 21.03.2005 18:54 stock-profi
Es ist ein leichtes, ausgehend von der Arbeitsmappe data die equity- Kurve und die prozentuale drawdown - Kurve darzustellen. Beide Kurven werden hier nicht über die Zeit, sondern über die Anzahl der trades gezeichnet.



Hier ist die rote Linie der höchste bisher erreichte Kapitalstand und die Differenz zwischen der roten Linie und der blauen Fläche der absolute Drawdown. Die schwarze Linie ist eine Regressionsgerade, die versucht, den Verlauf der blauen Fläche am besten anzunähern.

Es folgt die Darstellung des prozentualen drawdown.

#19: 21.03.2005 18:39 stock-profi
Das Arbeitsblatt Distribution befasst sich nur mit den tradeProfits und stellt zunächst die Verteilung der tradeProfits mit den üblichen Kennzahlen vor:



Dabei ist Q3 der dritte Quartilswert, Q1 der erste Quartilswert, IQRange die Differenz der beiden und QC die halbe Differenz, geteilt durch den Median (siehe u.a. http://davidmlane.com/hyperstat/desc_univ.html). QC ist ebenso ein Streuungsmaß wie der Variationskoeffizient VC, der die Standardabweichung durch den Mittelwert teilt. Bei schiefen Verteilungen mit hohen Ausreißerwerten wird QC durch die Ausreißer nicht so stark beeinflusst wie VC.

Wie schon oben in TSe kann man auch hier die tradeProfits in der zeitlichen Reihenfolge oder auf- bzw. absteigend sortiert ansehen.



Ferner habe ich noch eine Häufigkeitsverteilung berechnet.



Hier sieht man u.a., dass die tradeProfits in diesem Falle alles andere als normalverteilt sind. Dies ist für die meisten Fälle lt. Stridsman eine wünschenswerte Eigenschaft der Verteilung der tradeProfits. Man hat das oben auch schon an den positiven Werten für Schiefe und Kurtosis gesehen.
#18: 21.03.2005 17:49 stock-profi
Nachdem ich die Input-variable kurz in #6 und etwas ausführlicher in #15 von drawdown beschrieben habe, bleibt als letzte Input-variable expTrades zu besprechen.

Steht expTrades auf „ja“, wird für jeden trade eine Zeile im Fenster mit folgenden Variablen ausgegeben:

(1) Symbolname, Nummer des Trades in der Reihenfolge der Trades, TradeProfit, Tradelänge in Stäben.

Ferner gebe ich noch folgende Daten aus, die ich aber derzeit nicht weiterverarbeite:

(2) Einstiegspreis, Einstiegsdatum, Ausstiegspreis, Ausstiegsdatum.

Nachdem alle Trades exportiert wurden, folgen eine Leerzeile und eine Zeile, welche die Anzahl der trades und die effektive Länge des Charts enthält (siehe Punkt 11 in #2).
Ferner wird als erste Zeile die startEquity ausgegeben.

Alle Angaben werden nach Excel transportiert. In Excel lege ich für jeden Backtest eine Arbeitsmappe mit mehreren Arbeitsblättern an. Die ersten 6 Arbeitsblätter heißen:

1. settings
2. data
3. Performance Summary
4. Distribution
5. Equity
6. Drawdown

Alle Berechnungen werden in Excel auf der Grundlage der Daten aus (1) vorgenommen, ich benutze also nicht die Berechnungen, die ich bereits in TSe durchgeführt habe. Das mache ich, weil ich dieselben Formeln später auch verwende, wenn die tradeProfits aus anderen Quellen, z.B. aus Simulationen oder von mehreren Instrumenten, stammen.

Das Arbeitsblatt settings enthält alle Strategien und Einstellungen, die zu diesem Test geführt haben (#10 in Enter ), das Arbeitsblatt data enthält neben den Spalten aus (1) und (2) noch die Spalten:

(3) closedEquity, topEquity, Drawdown, DD in %, consec. Gains, consec. Losses

Die Berechnungen für diese 6 Spalten sind trivial.

Hieraus lässt sich leicht das Arbeitsblatt Performance Summary berechnen, welches so aussieht:



Hier sind alle Daten aus der Statistik von TSe versammelt, soweit sie sinnvoll sind, darüber hinaus aber 8 weitere Kennzahlen, die von TSe derzeit nicht geliefert werden.
Seite 1 von 3123