Variationen über das Thema "Red Candle"

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

Seitenlänge102030
Seite 1 von 3123
#25: 21.04.2008 10:16 stock-profi
Man kann die Strategie statt auf die einzelnen Aktien auch auf den DAX anwenden:
um Vergleichbarkeit herzustellen, sollte man dann das maximale Kapital pro Trade auf 50.000 und das maximale Risko auf 2.550 stellen, was allerdings ein (für meinen Geschmack zu) hohes Risiko von ca. 5% pro Trade ergibt.
Führe ich das für den Zeitraum ab 1.1.2005 durch, erhalte ich folgendes Ergebnis:
DAX P-IN.
Das ergibt einen Gewinn von 19.212, also mehr als oben, wo man die Strategie auf die einzelnen Aktien anwendet. Der Drawdown ist nicht höher als bei der Verwendung von einzelnen Aktien. Von 19 Trades sind 12, also 63% profitabel, es gibt maximal 2 Verlusttrades hintereinander, der durchschnittliche Gewinn pro Trade beträgt 1011,19.

Es hätte also im untersuchten Zeitraum keinen Vorteil ergeben, die Strategie statt auf den Index auf Einzelaktien anzuwenden.
#24: 20.04.2008 12:59 stock-profi
Ein aufmerksamer Leser hat mich vor kurzem darauf hingewiesen, dass Philipp Kahler auf seiner Seite www.quanttrader.at ein Red Candle System veröffentlicht hat, welches die Nachteile aus dem ersten Teil des letzten Beitrags vermeidet.

Deswegen möchte ich dieses System etwas näher untersuchen. Hier zunächst der Text von Philipp’s Seite:

Systemidee und Systembeschreibung

Das System basiert auf Wochendaten und riskiert pro Trade 150€.

Trendrichtung: Index über seinem 54 Wochen Durchschnitt und 54 Wochen Durchschnitt der Aktie steigt
Entry Schwelle: Fallende Woche in der Aktie, Entry in der darauffolgenden Woche bei Erreichen des Hochs der fallenden Woche
Exit Schwelle: am Low der Triggerwoche oder bei erreichen des Targets
Aktienanzahl: 150€/(high-low) {der Triggerwoche}, max. 3000€ Kapitaleinsatz pro Position
Target Schwelle: High + 1.5*(high-low) {der roten Triggerwoche}


In der Tat sind mit dieser Variante einige Vorteile verbunden:

1. Das verfügbare Kapital wird berücksichtigt. Allerdings habe ich bei Philipp nicht gelesen, wie viel Kapital man benötigt. Geht man von 10 gleichzeitigen Positionen aus, sind es maximal 30.000 €, bei 20 gleichzeitigen Positionen sind es maximal 60.000 €. Ich habe mit der unten angegebenen Strategie einen Backtest ab 1.1.2005 gemacht und 17 gleichzeitige Positionen festgestellt mit einem Kapitalbedarf von knapp 47.000 €, so dass mindestens 50.000 € Kapital die Voraussetzung für dieses System sind.
2. Ein höchst zulässiges Risiko wird beachtet, ist allerdings prozentual gesehen variabel. Es beträgt pro Aktie 150 €, demzufolge bei 17 gleichzeitigen Positionen 2.550 €. Beträgt der Kapitalstand nach einer Weile aufgrund der Gewinne nicht mehr 50.000, sondern schon 60.000, entspricht das Risiko 4,25% des Kapitals. Bei einem Kapitalstand von 90.000 sind es nur noch 2,83%.
3. Ein höchst zulässiger Anteil einer Position am Kapital wird eingehalten (absolut 3.000 €), ist aber prozentual ebenfalls variabel. Er beträgt bei einem Kapitalstand von 60.000 5% und bei einem Kapitalstand von 90.000 3%, nimmt also ebenfalls mit steigendem Kapital ab.

Die Schwäche aus Punkt 1. des letzten Beitrag ist ebenfalls verschwunden: durch die Begrenzung auf 3.000 € pro Position ist bei einem Anfangskapital von ca. 50.000 die Wahrscheinlichkeit außerordentlich hoch, dass man alle Signale einer Woche umsetzen kann.

Aufgrund dieser Vorteile will ich testen, welches Ergebnis sich in der Vergangenheit ergeben hätte. Hier ist meine Strategie PhilWebRedCandle, welche die obigen Angaben umsetzt:

Equilla Skript "PhilWebRedCandle (Strategy)"

Ein Wort zu der Bedingung „MP = 0“: die Strategie geht in der nächsten Woche einen neuen Trade nur ein, wenn am Ende der laufenden Woche kein Trade vorliegt. Wenn am Ende der laufenden Woche noch ein Trade läuft, der in der nächsten per stopLoss oder per profitTarget beendet wird, wird in der nächsten Woche kein neuer Trade begonnen. Das lässt sich aus dem obigen Text von Phil nicht herauslesen, scheint mir aber sinnvoll.
Die beiden Input-Parameter habe ich eingebaut, um etwas spielen zu können. Weil die Möglichkeit besteht, dass sich der Trade zwischen stopLoss und profitTarget ewig aufhält, habe ich die Variable holdBars eingeführt, Standard ist der Wert -1, was dem Text von Philipp entspricht. Setzt man holdBars auf 7, wird der Trade nach 7 Wochen zum open der nächsten Woche beendet. Die Variable lookBackBars steht standardmäßig auf 1, man kann sie aber z.B. auch auf 3 stellen. Philipp macht hierzu keine Aussage.

Phil spricht auf seiner Webseite davon, dass das System alternativ zu Aktien auch mittels CFD (oder Zertifikaten) umgesetzt werden kann. Ich betrachte hier nur Aktien, weil ich das System ohne den Einsatz von Fremdkapital beurteilen möchte. Mit dem Einsatz von Fremdkapital kann man jedes positive System scheinbar gut aussehen lassen. Wenn man Systeme vergleicht, ist ein Einsatz ohne Fremdkapital sinnvoll.

In der Standardeinstellung ergibt sich seit dem 1.1.1998 folgendes Ergebnis:
Portfolio "Germany/DAX"
wobei ich pro Trade 5€ als Gebühren abgezogen habe (10 € für den roundturn), slippage steht auf Null (!), um das System gut aussehen zu lassen. :) Der letzte Trade endet am 27.1.2008, danach steht der DAX unter seinem 54 -Wochen Durchschnitt.

Zwischen Mitte 1998 und Mitte 2003 macht das System keinen Gewinn. Selbst wenn man die trade-freie Zeit ab Ende 2000 nicht berücksichtigt, bleiben 2 Jahre ohne Gewinn. Das wird wohl die Geduld der meisten Trader übersteigen.
Die Anzahl der Trades beträgt 875, 52,8% der Trades sind profitabel, der durchschnittliche Gewinn pro Trade beträgt 27,25 €, das lässt nicht viel Raum für slippage, Tradingfehler oder etwaige Enttäuschungen. Die Anzahl maximal aufeinander folgender Verlusttrades ist 22, was ein hohes Vertrauen in die Strategie voraussetzt.
Bezogen auf ein Anfangskapital von 50.000 und die Tradedauer von etwas mehr als 10 Jahren bedeutet der Endstand von 74.083,65 einen Gewinn von 3,98% p.a., das ist nicht mehr als bei einer Festgeldanlage.

Ein Vergleich mit dem letzten Beitrag, wo wenigstens noch eine Rendite von 7% erreicht wurde, zeigt, daß der Grund für dieses schlechte Abschneiden in dem unvorteilhaften Money Management liegt.

Setzt man den Anfang auf den 1.1.2005, sieht es zunächst gut aus:
Portfolio "Germany/DAX"
Von 476 Trades sind 265, also 55,67% profitabel, die Anzahl maximal aufeinander folgender Verlusttrades beträgt ebenfalls 22.
Der Gewinn von 16.820,01 bedeutet in etwas mehr als 3 Jahren bei einem Kapitaleinsatz von 50.000 eine Rendite von 33,64% oder 9,9% p.a. Der DAX hat in dieser Zeit allerdings von 4.252 auf 6.816 zugelegt, das sind 60,33%. Nimmt man nicht den 27.1.2008, sondern den 31.12.2008 als Endtermin, sieht der Vergleich für die Strategie noch schlechter aus.

Fazit: ich sehe keinen Grund, dieses System einzusetzen.
#23: 11.06.2007 15:31 stock-profi
Alle bisher in diesem Thread und auch die von Philipp im Zusammenhang mit dem RedCandle – System gezeigten Equity – Kurven sind wie schon mehrfach betont nicht aussagefähig, wenn wir wissen wollen, wie viel Geld wir in der Realität verdient hätten.

Die Gründe noch mal kurz zusammen gefasst:

Das verfügbare Kapital wird nicht berücksichtigt. Ein Signal wird in voller Höhe umgesetzt, auch wenn gar kein Geld mehr da ist.
Höchst zulässiges Risiko wird nicht beachtet.
Höchst zulässiger Anteil einer Position am Gesamtkapital wird nicht eingehalten.

Bei dem NBPS-System von Philipp treten noch zwei weitere Schwächen auf:

1. Man kann es gar nicht realistisch backtesten, weil die Reihenfolge der Signale während der Woche nicht bekannt ist.
2. Lücken von einem Tag zum anderen werden nicht erkannt. Will man z.B. bei 27 einsteigen und liegt der Kurs Montag abend bei 26,8 und eröffnet am Dienstag bei 28,5, so wird im Backtest ungerührt mit 27 gerechnet.

Ich stelle in diesem Beitrag die erste halbwegs realistische Equity – Kurve dieses Threads vor.

Dazu wende ich die beiden Portfolio – Module PFStocksCurrCapital und PFStocksTrader auf das System RedCandleClosePTTX aus #16 an. Statt der genormten Positionsgrößen wähle ich das PercentVolatility – Verfahren, im Position Sizer stelle ich f auf 0,5. In PFStocksTrader steht maxCapPerc auf 15, so dass eine Position höchstens 15% des Kapitals bindet, und maxTotalRisk auf 6, so dass wir ein Gesamtrisiko von 6% des Kapitals zu keinem Zeitpunkt überschreiten. Die Variable minMTPerc stelle ich auf 50, damit kleine Positionen vermieden werden, die weniger als 50% des zu einer Zeit durchschnittlich gebundenen Kapitals binden würden.

Hier ist das Ergebnis:

Portfolio


Man kann es nur als grottenschlecht bezeichnen. Knapp 88% in 9,3 Jahren, das entspricht einer Rendite von 7% p.a.

382 Trades, davon 197 oder 51,6% profitabel, ein profit Faktor von 1,65. Am Anfang mehr als 5 Jahre ohne Gewinn! Ein maximaler prozentualer Drawdown von 16,7% (Mitte 1998).

In der Spalte showTCPList (TCP steht für TotalClosedPositions) ist zu sehen, wie viele Trades für ein Instrument durchgeführt wurden. Weil ich noch keine Vorrangregelung eingebaut habe, werden bei gleichzeitigem Eintreffen mehrerer Signale an einem Stab die im Portfolio oben stehenden Instrumente zuerst gekauft. Für die weiteren ist dann oft kein Kapital mehr verfügbar.

Um die Logik des Verfahrens zu schildern, bespreche ich ein paar Situationen.

1. Am 4.1.1998 werden CON, FME und LHA gekauft, es setzt sich jeweils der Position Sizer durch. Das gebundene Kapital beträgt 19.585, das verfügbare 80.415, das Gesamtrisiko 2.244 oder ca. 2,2%.
Am 18.1.1998 kommen Signale von ADS, DBK, DCX, RWE und SAP. Bei den ersten 4 Aktien setzt sich der Position Sizer durch, das Risiko beträgt danach 5.393. Für SAP berechnet der Position Sizer 354 Aktien, allerdings wäre hiermit das Risiko von 6% überschritten. Die Anzahl wird auf 308 gekürzt, das Risiko beträgt danach 6.049 oder 6%. Das gebundene Kapital beträgt 57.703, das verfügbare 42.297.
Am 25.1.1998 kommen Signale von 4 weiteren Aktien, am1.2.1998 kommen Signale von weiteren 7 Aktien, am 8.2.1998 kommen weitere 2 Signale. Keines dieser 13 Signale führt zu einem Kauf, weil das Risiko erschöpft ist. Der Zähler NoTrade steht auf 13.
Am 15.2.1998 wird SAP wegen Erreichen des Kursziels verkauft, es kommen Signale von ALV, BMW, LIN, MEO. Der Position Sizer berechnet 32 Stück für ALV, aufgrund des Risikos können nur 31 gekauft werden. Die anderen Signale gehen ins Leere, weil das Risiko erschöpft ist. ALV wird bevorzugt, weil es im Portfolio vor den anderen Wertpapieren steht.
Bis zum 1.3.1998 kann kein Signal umgesetzt werden, weil kein Wert verkauft wird; der Zähler noTrade steht auf 27, bisher haben wir 9 Käufe getätigt.

2. Am 1.5.2005 haben wir 3 Positionen, eine vierte in BAY kommt hinzu, danach beträgt das gebundene Kapital 60.155, das verfügbare 55.628 und das Risiko 3,2%. Am 8.5.2005 gehen wir Trades in BAS, BMW, DBK, DCX und DPB ein. Bis DCX setzt sich der Position Sizer durch, danach beträgt das Risiko 5,5% und das verfügbare Kapital 9.087. Für DPB berechnet der Position Sizer 521 Stück, das Risiko erlaubt 279 Stück, aber das verfügbare Kapital nur 250. Danach steht das verfügbare Kapital bei 0,34, wir sind in 9 Positionen. Am selben Tag kommen 15 weitere Signale, die alle mangels Kapital ins Leere laufen. Der Zähler noTrade steht inzwischen auf 844. Vom 15.5.2005 bis zum 29.5.2005 kommen weitere 14 Signale, die wegen Kapitalmangel nicht bedient werden können, der Zähler noTrade steht auf 858.

3. Am 11.3.2007 sind wir zu Beginn in 4 Positionen, wir gehen 4 weitere in ADS, ALT, BAS und BAY ein. Bei ADS kaufen wir 552 Stück, wie sie vom Position Sizer berechnet wurden, für ALT gibt der Position Sizer 575 Stück an. Die _Equity beträgt 167.003, 15% hiervon sind 25.050, beim Kurs von 46 macht das 544 Stück. Also werden auch nur 544 Stück gekauft, weil sonst mehr als 15% des Kapitals verbraucht würden. VP ist in dieser Woche 2,73. Auch für BAS wird die Anzahl von 322 auf 318 reduziert, VP ist hier 3,43. BAY wird mit der Anzahl gekauft, wie sie vom Position Sizer ermittelt wurde, die anderen 14 Signale dieser Woche gehen ins Leere, weil mit den 8 Positionen das verfügbare Kapital bei 211 liegt und deshalb keinen weiteren Kauf mehr gestattet. Das durchschnittlich gebundene Kapital der 8 Positionen beträgt 20.635.

Am letzten Stab gebe ich eine Statistik aus:
Von den 382 Trades wurden 286 mit der Stückzahl ausgeführt, die der Position Sizer berechnet hat, 67mal hat sich die Obergrenze für das Risiko durchgesetzt, 8mal die Obergrenze für den Anteil am Gesamtkapital und 21mal das verfügbare Kapital. Der Zähler noTrade steht auf 1.342.

Bei 382 Trades mußten 1.342 Signale ignoriert werden! In #16 hatten wir 952 Trades, deswegen dürften wir doch nur 570 (952 – 382) noTrades haben, oder? Nicht ganz, denn ein Instrument, das wir nicht kaufen können, kann ja weitere Signale generieren, während es in #16 long war. Dies zeigt zweierlei:

Der Backtest mit genormten Positionsgrößen berücksichtigt viele Signale, die wir in der Realität nicht handeln können. Er berücksichtigt eine Reihe von Signalen nicht, die wir in der Realität gehandelt hätten.

Zum Abschluß noch zwei Diagramme: die Anzahl der Positionen an einem Stab und das Verhältnis des gebundenen Kapitals zum gesamten Kapital (auf Basis PF::closedEq)



Man sieht, dass die Anzahl der Positionen höchstens 10 erreicht, wie von der Theorie in #22 vorhergesagt.



Hier erkennt man, dass bis zum Jahr 2000 das höchst zulässige Risiko den Kapitaleinsatz bestimmt hat. Das vorhandene Kapital wurde in dieser Zeit nur zu etwa der Hälfte genutzt. Die 8 bis 10 Positionen binden jeweils einen Anteil von f /VP des Kapitals (#12). Da VP häufig bei etwa 9 lag (siehe #13), ergibt sich hieraus ein Anteil von 0,055 (0,5 / 9) und bei 10 Positionen insgesamt 55%.

Ich fände es etwas angenehmer, wenn man die beiden Diagramme in Form von Indikatoren unter der Portfolio - Equity – Kurve anbringen könnte.
#22: 11.06.2007 11:47 stock-profi
Welche Auswirkungen haben nun die Festlegungen des Money Management?

Um Missverständnisse zu vermeiden, schreibe ich jetzt für das Gesamtkapital nicht mehr wie im letzten Beitrag Equity, sondern _Equity. Technisch gesehen ist

_Equity = initialCapital + globalOpenEquity;


1. Die Forderung

numShares * close <= maxCapPerc * 0.01 * _Equity


ist beim Verfahren Percent Volatility gleichbedeutend mit

f * close / volat <= maxCapPerc


oder

f /( maxCapPerc * 0.01) <= VP


VP muß also bei maxCapPerc gleich 15 und bei f gleich 0,5 mindestens so groß sein wie 3,33 (0,5 / 0,15). Ist VP kleiner, setzt sich der Position Sizer nicht durch, und die Anzahl wird reduziert.

VP ist in den meisten Fällen größer als 3,33, in wenigen Fällen kann es aber auch darunter liegen. Bei Allianz ist das z.B. Anfang 2006 der Fall, bei EON Anfang 2005 und bei BASF Anfang 2005 und Anfang 2007.

Es ist also bei den genannten Einstellungen davon auszugehen, dass sich der Position Sizer meistens durchsetzt.

2. Bezüglich Risiko untersuche ich zunächst den Fall RedCandlePTTX, in dem wir nur einen stopLoss und keinen trailStop haben.

Das Risiko einer Position ist beim Modul stopValue immer

numShares * stopLoss * volat = stopLoss * f * 0.01 * _Equity


Das Gesamtrisiko ist die Summe aller Einzelrisiken, mit currPos für die Anzahl der aktuellen Positionen (_Equity nehme ich der Einfachheit halber als für alle aktuellen Positionen gleich an)
ergibt sich demnach die Forderung:

currPos * stopLoss * f * 0.01 * _Equity <= maxTotalRiskPerc * 0.01 * _Equity


oder

currPos <= maxTotalRiskPerc / (stopLoss * f)


Ist z.B. maxTotalRiskPerc gleich 6, stopLoss gleich 1,5 und f gleich 0,5, können wir höchstens 8 Positionen gleichzeitig eingehen (6 / (1,5 * 0,5)). Stellen wir das Gesamtrisiko auf 10, sind es 13 Positionen (10 / 0,75).

Ist aber aufgrund des verfügbaren Kapitals oder zu niedriger VP die Anzahl der gekauften Aktien in einer oder mehreren Positionen reduziert worden, ist auch das Risiko entsprechend kleiner, und es ist eine etwas höhere Anzahl von Positionen möglich.

Bei den Einstellungen maxTotalRiskPerc gleich 6, stopLoss gleich 1,5 und f gleich 0,5 ist also mit höchstens 8 bis 10 Positionen gleichzeitig zu rechnen.
#21: 11.06.2007 11:06 stock-profi
Nachdem nun das verfügbare Kapital bekannt ist, kann ich mich an die Umsetzung der Überlegungen aus #12 bis #14 machen.

Ich stelle folgende Anforderungen:

1. Die Anzahl der Stücke berechne ich zunächst nach #12 (percent Volatility):

numShares1 = f * 0.01 * Equity / volat


2. Gleichzeitig soll eine Position höchstens einen bestimmten Prozentsatz maxCapPerc (z.B. 15%) des Kapitals binden (#14):

numShares2 * close = maxCapPerc * 0.01 * Equity


3. Ich arbeite ohne Fremdkapital, deswegen darf das gebundene Kapital höchstens so groß sein wie das verfügbare.

numShares3 * close = PF::currentCapital


4. Das Gesamtrisiko aller offenen Positionen darf einen bestimmten Prozentsatz maxTotalRiskPerc (z.B. 6% oder 12%) nicht übersteigen. Wenn wir mit dem Modul stopValue für den stopLoss arbeiten, bedeutet das z.B. bei einer long – Position:

PF::totalRiskLong + numShares4 * data1::stopLossValueLong = maxTotalRiskPerc * 0.01 * Equity


Diese Regel ist optional: sie gilt nur, wenn ein stopLoss – Modul auf dem Chart liegt.

5. numShares bestimme ich dann als den kleinsten der vier (oder drei) berechneten Werte.

6. Kleine Positionen haben den Nachteil, dass sie im Verhältnis zu den bereits eingegangenen unbedeutend sind und zu hohe Gebühren verursachen. Zusätzlich können sie den Erfolg in einer Aktie verhindern, weil wir ja nicht pyramidisieren. Wenn nämlich mehr Kapital frei wird, können wir, wenn wir die kleine Position nicht eingegangen sind, bei einem neuen Signal mit einer vernünftigen Anzahl einsteigen.

Um zu verhindern, dass zu kleine Positionen entstehen, fordere ich, dass das durch die neue Position gebundene Kapital mindestens so groß sein muß wie ein Prozentsatz minMTPerc (z.B. 50) des bisher durchschnittlich gebundenen Kapitals:

numShares * close >= minMTPerc * 0.01 * PF::MoneyTiedUp / PF::ctrCurrPos


Ist diese Bedingung nicht erfüllt, verzichte ich auf eine neue Position.

Nach dem Kauf einer neuen Position ist
  • das verfügbare Kapital zu reduzieren
  • das gebundene Kapital zu erhöhen
  • die Anzahl der Positionen zu erhöhen
  • das Gesamtrisiko zu erhöhen


Hier ist die Strategie PFStocksTrader, welche die obigen Berechnungen durchführt und außerdem bei Bedarf die Situation am Ende des Stabes nach Excel transportiert. Dort kann man dann z.B. die Anzahl der Positionen oder das Verhältnis von gebundenem Kapital zum Gesamtkapital pro Stab in einem Diagramm darstellen. Leider ist es ja in TS 5 immer noch nicht möglich, einen Indikator auf ein Portfolio zu legen, so dass man auf einen Export angewiesen ist. Ferner gebe ich am letzten Stab noch eine Statistik über die Berechnung von numShares aus, aus der u.a. hervorgeht, wie oft die Anzahl der gekauften Aktien durch den Position Sizer, durch das verfügbare Kapital und das Risiko festgelegt wurde.

// stock-profi
// 26.5.2006
// gilt nur für Aktien in einem Portfolio, setzt PFStocksCurrCapital voraus


// realisiert Money Management in einem Portfolio!!


// kauft oder verkauft Aktien
// berechnet die Anzahl der Aktien, ausgehend von der durch den Position Sizer bestimmten Anzahl,
// gemäß dem verfügbaren Kapital
// unter Beachtung des Höchst- und Mindestanteils einer Position sowie
// des Gesamtrisikos des Portfolios


// 4.6.2007: Beachtung des Gesamtrisikos des Portfolios ergänzt

Meta:
        Synopsis(" handelt Aktien in einem gemeinsamen Konto, setzt PFStocksCurrCapital voraus" ),
        Legend( "stoTr %p" );


Input:
        maxCapPerc (15.0, 0.1), // max Anteil des gebundenen Kapitals einer Aktie am Gesamtkapital in Prozent
        maxTotalRiskPerc (12.0, 1.0), // max erlaubtes Risiko in Prozent vom Gesamtkapital
        minMTPerc (50.0, 0.1), // minimale Kapitalbindung in Prozent des durchschnittlich gebundenen Kapitals
        expCurrSit (false), // Situation am Ende des Stabes wird exportiert: Anzahl Pos., verf. Kapital, Risiko etc.
        debug (none, _all, _num, _entry, _occ) = _all; // Test der Programmlogik
#20: 11.06.2007 10:44 stock-profi
Portfolio – Trading heißt für den Trader, verschiedene Instrumente aus einem Konto heraus zu handeln.

Wir müssen uns also zunächst einmal einen Überblick über den Kontostand und das verfügbare Kapital verschaffen. In der Realität erledigt das der Broker für uns, so dass wir den aktuellen Kontostand und das für den Handel verfügbare Kapital mit einem Blick erkennen.

Da es im Backtest kein Brokerkonto gibt, müssen wir die Ermittlung des verfügbaren Kapitals selbst übernehmen. Zum Glück ist das im Falle von Aktien ziemlich einfach und sogar sehr einfach, wenn wir uns wie bei den RedCandles auf den Fall beschränken, dass wir nur long gehen:

Am Schluß einer Woche schlagen wir das bisherige Ergebnis aus allen abgeschlossenen Trades dem Startkapital zu und ziehen davon das derzeit gebundene Kapital ab. Fertig.

Im Detail müssen wir folgende Berechnungen durchführen:

1. Das pro Instrument gebundene Kapital MT (money tied up) errechnen wir nach der Formel

MT = CurrentContracts * EntryPrice


Die durch Aufsummierung von MT entstehende Größe PF::MoneyTiedUp enthält nach dem Durchlauf durch alle Instrumente das von allen Instrumenten gebundene Kapital. Trades, die zum nächsten Stab beim open (in unseren Beispielen zum Wochenbeginn) aufgrund eines Zeitstops oder eines Gegensignals beendet werden, werden bei der Aufsummierung nicht berücksichtigt, so dass sie kein Kapital mehr binden (siehe 2).

2. Zu den abgeschlossenen Trades zähle ich auch diejenigen, die zum nächsten Wochenbeginn aufgrund eines Zeitstops oder eines Gegensignals beendet werden. Das dort frei werdende Kapital wird also genutzt. Im Falle NBAM ist das in Ordnung, im Falle TBOC nutzen wir am Wochenende Kapital, das erst zum nächsten Wochenbeginn frei wird. Es ist zwar nicht ganz korrekt, dass ich die hieraus resultierenden Zinsen unterschlage, aber ich mache es trotzdem, weil die Zinsen nicht ins Gewicht fallen. Um erkennen zu können, ob der Trade zum Wochenbeginn per Zeitstop beendet wird, setze ich in den beiden trailStops trailFilter und trailMove zusammen mit dem sell-Befehl die globale Variable data1::TXSellOrder auf true.

Hiermit kann man den aus den Zeitstops oder Gegensignalen entstehenden offenen Profit ermitteln:

openProfit = CurrentContracts * (close - EntryPrice)


Im Falle NBAM kann der Eröffnungskurs der Folgewoche vom Schlußkurs abweichen; die hieraus resultierende Verschiebung nehme ich in Kauf, weil sie kaum eine Rolle spielt und weil ich nicht auf das open vom Wochenbeginn zugreifen möchte. Die durch Aufsummierung von openProfit entstehende Größe PF:: openProfit enthält nach dem Durchlauf durch alle Instrumente den von allen Instrumenten zum Wochenende oder -beginn freigegebenen Gewinn bzw. Verlust.

Es kann aufgrund einer Lücke auch passieren, dass ein trailStop zum open der nächsten Woche wirksam wird. Allerdings ist das nicht voraussehbar, deswegen berücksichtige ich es nicht im openProfit.

3. Das Kapital aus allen abgeschlossenen Trades beträgt dann

PF::closedEq = initialCapital + globalClosedEquity + PF::openProfit; // per morgen zum open


Und das verfügbare Kapital zum Schluß der Woche bzw. zum Beginn der neuen Woche läßt sich so errechnen:

PF::currentCapital = PF::closedEq - PF::MoneyTiedUp; // per morgen zum open ohne neue Positionen


Beide Größen werden nur am letzten Instrument berechnet.

4. Außer dem verfügbaren Kapital ist auch das aktuelle Risiko von Bedeutung, wenn man das Gesamtrisiko nicht über einen bestimmten Wert ansteigen lassen will. Für eine long-Position berechne ich es folgendermaßen:
Das Risiko pro Instrument (risk) setze ich zunächst auf den Wert des stopLoss (ich betrachte zunächst nur den Fall data1::stopMode = 0, bei dem eine Wertübergabe erfolgt).

Sobald ein trailStop (trail) aktiv wird und über dem Einstiegspunkt EP minus Wert des stopLoss liegt, setze ich das Risiko auf

risk = maxItems (EP - trail, 0);


Liegt der trailStop über dem Einstiegspunkt, setze ich das Risiko also auf null.

Die durch Aufsummierung von risk * CurrentContracts über alle long-Positionen entstehende Größe PF::totalRiskLong enthält nach dem Durchlauf durch alle Instrumente das Gesamtrisiko aus allen long-Positionen.

Entsprechend verfahre ich bei short-Positionen, was mir die Variable PF::totalRiskShort liefert, die nach dem Durchlauf durch alle Instrumente das Gesamtrisiko aus allen short-Positionen enthält.

Hier ist die Strategie PFStocksCurrCapital, welche die obigen Berechnungen durchführt und noch ein paar kleine Angaben statistischer Natur ermittelt; sie kommt, abgesehen von einer Variable zum Export berechneter Daten zu Testzwecken, ohne Input-Variablen aus:

// Autor stock-profi
// 6.2.2006
// gilt nur für Aktien in einem Portfolio

// die globale Variable PF::currentCapital enthält nach dem Lauf über alle Instrumente das derzeit frei verfügbare Kapital
// die globale Variable PF::MoneyTiedUp enthält nach dem Lauf über alle Instrumente das derzeit gebundene Kapital

// die globale Variable PF::closedEq enthält nach dem Lauf über alle Instrumente das derzeit vorhandene Kapital
// auf Basis abgeschlossener Trades
// bei short ist die Hälfte des nominalen Kapitals gebunden
// die Variable ratioMTtoClosedEq im letzten Instrument enthält nach dem Lauf über alle Instrumente das Verhältnis von
// derzeit gebundenem zu vorhandenem Kapital

// die globale Variable PF::ctrCurrPosLong enthält nach dem Lauf über alle Instrumente die Anzahl der long-Positionen
// die globale Variable PF::ctrCurrPosShort enthält nach dem Lauf über alle Instrumente die Anzahl der short-Positionen
// die globale Variable PF::ctrCurrPos enthält nach dem Lauf über alle Instrumente die Anzahl der Positionen

// die globale Variable PF::ctrLongOrder enthält nach dem Lauf über alle Instrumente die Anzahl der Long-Signale
// die globale Variable PF::ctrShortOrder enthält nach dem Lauf über alle Instrumente die Anzahl der Short-Signale

// die globale Variable PF::totalRiskLong enthält nach dem Lauf über alle Instrumente das Gesamtrisiko aller long-Positionen
// die globale Variable PF::totalRiskShort enthält nach dem Lauf über alle Instrumente das Gesamtrisiko aller short-Positionen

// nur TradeMode TBOC oder NBAM ist sinnvoll, TradeMode NBPS oder NBPL ist nicht möglich
// Pyramidisieren ist nicht vorgesehen

// 30.5.2007: Ausgabe an lastBar nur einmal, Berechnung des Risikos

Meta:
        Synopsis("berechnet das verfügbare Kapital am Ende eines Stabes für Aktien in einem gemeinsamen Konto"),
        Legend("stoCurrCap");

Input:
        
        debug (none, both, LS, MaxItem) = both;


Da der Test einer Strategie im Portfolio etwas mühsam ist, um es milde auszudrücken, habe ich eine Menge Arbeit darauf verwendet, zu debug - Zwecken unterschiedliche print-Ausgaben vorzunehmen.

Na ja, vielleicht kriegt TS 5 ja noch mal einen Debugger.
#19: 11.06.2007 10:26 stock-profi
Leider hat sich kein Leser gemeldet, so dass ich im eigenen Saft schmoren muß.

Mein Konzept sieht so aus:

Im Modul PFStocksCurrCapital berechne ich das verfügbare Kapital, im Modul PFStocksTrader berechne ich die Stückzahl und handle ich die Aktien. Die Stückzahl wird zunächst vom Position Sizer vorgegeben, kann aber durch das Gesamtrisiko im Portfolio oder durch eine prozentuale Obergrenze des Anteils am Gesamtkapital verringert werden. Bei all dem ist das verfügbare Kapital zu beachten: ich handle (zunächst) ohne Fremdkapital und kann nur dann viele Stücke kaufen, wenn das Kapital es erlaubt.

Bisher habe ich im Modul Signal Processor die buy / short – Befehle gegeben, beim Portfolio – Trading stelle ich im Signal Processor die Variable „buyShort“ auf nein, so dass aus dem buy – Befehl eine Übergabe der globalen Variable data1::longOrder = true wird. Erst im Modul PFStocksTrader erfolgen dann buy und short – Befehle.

Weil die ganze Sache ohnehin nicht einfach ist, verzichte ich im ersten Schritt auf eine Vorrangbehandlung: wenn an einem Stab mehrere Signale kommen, arbeite ich sie in der Reihenfolge der Instrumente im Portfolio ab. Das will ich später noch ändern.

Was macht die Sache „nicht einfach“? Es ist weniger die Logik als die bisher noch nicht ausgereifte Form des Portfolio – Trading in TS 5. Es gibt so gut wie keine Unterstützung des Tests der Programmlogik. Weder ist es möglich, einen Indikator im Portfolio zu zeichnen, noch gibt es einen Debugger. Deswegen muß man unzählige print – Befehle in die Module einbauen, deren Ergebnis man dann mühsam im Fenster verfolgt. Und während der Handelszeiten zuckt das Fenster dann noch wild hin und her, so dass man keine Markierung vornehmen kann und auf einen anderen Arbeitsbereich ausweichen muß. Na ja, immerhin gibt es in TS 5 wenigstens ein Portfolio - Trading, bei anderen Produkten ist das wohl nicht vorhanden.

Mit RedCandle hat dies nur noch wenig zu tun, es wird mehr ein Thread über Money Management im Portfolio, wobei mir die RedCandle Systeme aber weiterhin als Anschauungsbeispiele dienen.
#18: 31.05.2007 11:35 stock-profi
Nachdem ich jetzt zwei RedCandle Systeme mit halbwegs vernünftigen Statistik - Ergebnissen habe, will ich mich daran machen, realistische Backtests durchzuführen.

Bevor ich mir selber den Kopf zerbreche, will ich erst einmal sehen, was andere dazu sagen. Leider habe ich in meinen vielen Büchern nichts dazu gefunden, mit einer Ausnahme: Stridsman hat in seinem zweiten Buch „Trading Systems and Money Management“ ein ganzes Kapitel dem Money Management gewidmet. Er muß einige Trade-Informationen (S. 337) von TradeStation nach Excel überführen, weil TradeStation offenbar nicht über ein Portfolio-Trading verfügt. In Excel geht er so vor (S. 317 oben):

1. Ein Signal führt nicht zu einem Trade, wenn das gesamte Kapital in anderen Positionen gebunden ist.
2. Wenn das verfügbare Kapital so niedrig ist, dass nicht alle Stücke, die vom Position Sizer errechnet wurden, gekauft werden können, wird die Anzahl reduziert.
3. Entstehen mehrere Signale an einem Tag, teilt er das verfügbare Kapital durch die Anzahl der Signale und weist jedem Instrument denselben Betrag zu.

Meine Meinung dazu ist folgende:

Punkt 1. ist notwendig.
Punkt 2. ist ungünstig, wenn das verfügbare Kapital nahe bei 0 liegt. Es werden dann Mini-Positionen gekauft, die wegen zu hoher Gebühren kaum Aussicht auf Erfolg versprechen. Welchen Sinn hat es, ein paar Stück einer Aktie für 500 Euro zu kaufen, wenn die anderen Positionen ein Kapital von jeweils ca.10.000 binden?
Punkt 3. ist kritisch und führt zu einem unrealistischen Backtest, denn in der Realität hätte man nicht so verfahren können (siehe #15). Für den Handel ist dieses Verfahren ohnehin unbrauchbar.

Ferner kann es bei Stridsman passieren, dass eine Position einen unerwünscht hohen Anteil am Gesamtkapital einnimmt, und darüber hinaus gibt es absolut keine Steuerung des Gesamtrisikos. Schließlich ist es nicht möglich, beim gleichzeitigen Eintreffen mehrerer Signale bestimmte Instrumente nach einer Vorrangregel zu bevorzugen.

Ich habe aus den beiden Büchern von Stridsman viel gelernt, aber hier muß ich zu dem Schluß kommen, dass das Konzept von Stridsman für das Money Management erstens im Handel nicht einsetzbar ist, zweitens für den Backtest zu unrealistischen Ergebnissen führt und drittens wesentliche Anforderungen unberücksichtigt läßt.

Deswegen will ich mir selber Gedanken machen.

Wenn einer der Leser brauchbare Literatur zu diesem Thema kennt, wäre ich für eine kurze Information dankbar.
#17: 29.05.2007 15:55 stock-profi
Nun gehe ich zum System RedCandleTrail aus #10 über, wobei ich genau so vorgehe wie im letzten Beitrag.

Statt mit sRedCandle steige ich auch hier mit sRedCandleClose ein, so dass alle Einstiegssignale zum Schluß der Woche vorliegen. Die Einstellungen von trailMove lasse ich wie in #10, die inzwischen hinzugefügte Input-Variable firstBack (siehe #224 stop Engine) nutze ich nicht, weil ich sie auf „nein“ stelle. Ebenso wie im letzten Beitrag stelle ich den stopLoss auf 1,5 ATR, um dem in vielen Fällen zu späten Einstieg Rechnung zu tragen. Aus demselben Grund lasse ich den trailStop erst später wirksam werden, indem ich das Modul trailFilter (siehe #225 stop Engine) einsetze. Der trailMove soll erst wirksam werden, wenn die Kurse sich in Höhe des Risikos nach oben bewegt haben, deshalb stelle ich initProfit auf 1,5. Verbleiben die Kurse oberhalb des stopLoss und unterhalb dieses Profit Target, steige ich wie im System RedCandlePTTX nach 10 Wochen aus.

Das entstehende System aus sRedCandleClose, stopValue, trailMove und trailFilter nenne ich RedCandleCloseTrail. Anzahl der Stücke wie in #16.

Hier sind die Ergebnisse:

Portfolio


Total Number of Trades	783
Percent Profitable		54,66%
Profit Factor			2,11
netProfit			473.121
averageTradeNetProfit	604 entsprechend 0,6 durchschnittliches V-Multiple
RatioAvgWinAvgLos		1,74
max ConsLosingTrades	19


Weiter:

29 Aktien sind im Gewinn, nur IFX verliert
durchschnittliche Tradelänge 9,03 Wochen
durchschnittliche Zeit im Markt 53,8%
durchschnittliches RiskRatio 0,26
RiskRatio Portfolio 1,14

Im Vergleich zu dem System RedCandleTrail aus #10 haben wir mehr Trades und prozentual mehr profitable Trades. Der profit Factor ist zwar schlechter, aber mit einem Wert von mehr als 2 immer noch sehr gut. Der averageTradeNetProfit ist vergleichbar.
Die Angaben unter „weiter“ sind schlechter als in #10, weil wir länger im Trade sind.

Auch hier sind die Ergebnisse trotz des häufig zu späten Einstiegs recht beachtlich.
#16: 27.05.2007 19:07 stock-profi
Ich betrachte zunächst das System RedCandlePTTX aus #7 und suche hierfür eine Variante, bei der die Signale alle gleichzeitig zum Schluß der Woche vorliegen.

Um die Sache so einfach wie möglich zu halten, gehe ich im System RedCandleClosePTTX long, wenn nach einer roten Kerze der Schlusskurs höher ist als der vorige Schlusskurs.



Einfacher geht’s fast nicht. Ich steige ein, sobald die Kurse auf Basis Schlusskurs ein Lebenszeichen geben. Der Einstieg wird im SignalProcessor eingestellt: bei TBOC gleich „ja“ steige ich zum Wochenschluß ein, bei „nein“ zum Anfang der nächsten Woche.

Im Vergleich zu dem Einstieg beim Hoch der roten Kerze haben wir Vor- und Nachteile:

a. Wenn der Schlusskurs über dem Hoch der roten Kerze liegt, haben wir einen Nachteil, weil wir zu spät einsteigen. Um bei der wahrscheinlich einsetzenden Reaktion nicht gleich aus dem Trade zu fliegen, setze ich den stopLoss von 1 ATR auf 1,5 ATR.
b. Wenn der Schlusskurs unter dem Hoch der roten Kerze liegt und das Hoch über dem Hoch der roten Kerze, haben wir einen Vorteil, weil wir günstiger einsteigen.
c. Wenn der Schlusskurs unter dem Hoch der roten Kerze liegt und sogar das Hoch unter dem Hoch der roten Kerze, gehen wir einen Trade ein, den wir bei dem System RedCandlePTTX nicht eingehen würden. Das ist ziemlich riskant, weil wir uns in einer ungebrochenen Abwärtsbewegung befinden können.
d. Auf der anderen Seite gibt es auch Trades, die wir bei RedCandlePTTX eingehen, aber nicht bei RedCandleClosePTTX. Das passiert, wenn das Hoch über dem Hoch der roten Kerze liegt, der Schlusskurs jedoch unter dem Schlusskurs der roten Kerze. Dies könnte ein Vorteil für RedCandleClosePTTX sein, weil sich der Ausbruch über das Hoch der roten Kerze als nicht nachhaltig erwiesen hat.

Die Systeme sind zwar ähnlich, weil sie beide auf dem Setup der roten Kerze beruhen, aber der Einstieg macht sie doch zu stark unterschiedlichen Systemen.

Weil ich das Verhältnis von stopLoss zu profitTarget bei 1:2 belassen möchte, setze ich das profitTarget auf 3 ATR. Der Zeitstop bleibt bei 10 Wochen.

Mit der Strategie normedPosSize berechne ich die Anzahl der zu kaufenden Stücke mittels der Formel 1.000 / volat mit volat = volatility (20) = 1 ATR, siehe #12. Damit wird dieselbe Anzahl der Stücke gekauft wie in #7, so dass die profit - Angaben vergleichbar werden.

Hier ist das Ergebnis bei Einstieg zum Wochenschluß:

Portfolio


Total Number of Trades	953
Percent Profitable		53,62
Profit Factor			1,73
netProfit			415.749
averageTradeNetProfit	436 entsprechend 0,44 durchschnittliches R-Multiple
RatioAvgWinAvgLos		1,49
max ConsLosingTrades	30


Weiter:

alle 30 Aktien sind im Gewinn
durchschnittliche Tradelänge 6,47 Wochen
durchschnittliche Zeit im Markt 47,47%
durchschnittliches RiskRatio 0,25
RiskRatio Portfolio 1,74

Percent Profitable ist trotz höherer Tradezahl besser als in #7, profitFactor ist schlechter, averageTradeNetProfit fast identisch. Zeit im Markt ist höher, also schlechter als in #7, weil ich das profitTarget von 2 auf 3 ATR erhöht habe, so dass der Zeitstop nach 10 Wochen häufiger zum Zuge kommt. Auch max ConsLosingTrades ist schlecht.

Allerdings sind die Ergebnisse trotz des häufig zu späten Einstiegs recht beachtlich, und ich hoffe sie durch die Auswahl der „richtigen“ Aktien weiter zu verbessern.

Vor allem aber ist es mit dieser Strategie möglich, im Backtest eine realistische Equity-Kurve einschließlich Profit und Drawdown zu erzeugen, was ja bei dem System RedCandlePTTX nicht möglich ist.
Seite 1 von 3123