Backtest über mehrere Jahre benötigt

Viewing 15 posts - 1 through 15 (of 15 total)
  • Author
    Posts
  • #264549 quote
    DiBuOL
    Participant
    Junior

    Hallo liebe Leute! Ich schreibe regelmässig neue Codes, bevorzugt auf kleinen Zeiteinheiten wie eine oder drei Minuten. Ich habe nun einen neuen Code geschrieben, der auf dem 1-Minuten-DAX-Chart im Backtest seit Januar sehr zuverlässig läuft. Ich habe ihn inzwischen auch live geschaltet. Mein Problem ist, dass ich auf der Zeiteinheit leider nur bis zu 200 K testen kann. Daher anbei einmal mein Code mit der Bitte an diejenigen, die diesen vielleicht einem Backtest über mehrere Jahre prüfen können, mir eine kurze Rückmeldung dazu zu geben! Vielen Dank 🙂

    Die Besonderheit an diesem Code liegt in der Anpassung der Positionsgröße. Diese wächst nämlich mit laufendem Gewinn. Derzeit ist er so eingestellt, dass er maximal eine Position eingeht. Stellt man dieses jedoch auf TRUE um, werden nach frühenstens 480 Bars eine neue Position bei entsprechendem Signal eröffnet.


    // =====================================================

    // PARAMETER

    // =====================================================

    DEFPARAM CumulateOrders = False


    WaitBars = 480

    TargetPoints = 30


    // =====================================================

    // KAPITAL / POSITIONSGRÖSSE

    // =====================================================


    // Startkapital des Backtests

    InitialCapital = 2820


    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


    // Positionsgröße abhängig vom aktuellen Kapital

    IF CurrentCapital < 3000 THEN

    PositionSize = 0.5

    ELSIF CurrentCapital < 4500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 7500 THEN

    PositionSize = 1.25

    ELSIF CurrentCapital < 9000 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 10500 THEN

    PositionSize = 1.75

    ELSE

    PositionSize = 2.0

    ENDIF


    // =====================================================

    // INDIKATOREN

    // =====================================================


    indicator1 = ExponentialAverage[25](close)

    c1 = close >= indicator1


    indicator2 = ExponentialAverage[25](close)

    indicator3 = ExponentialAverage[50](close)

    c2 = indicator2 CROSSES OVER indicator3


    indicator4 = ExponentialAverage[50](close)

    indicator5 = ExponentialAverage[100](close)

    c3 = indicator4 >= indicator5


    indicator6 = ExponentialAverage[200](close)

    c4 = close >= indicator6


    indicator7 = ADX[14]

    c5 = indicator7 > 20


    indicator8 = ADXR[14]

    c6 = indicator8 > 20


    entrySignal = c1 AND c2 AND c3 AND c4 AND c5 AND c6


    // =====================================================

    // ERSTE POSITION

    // =====================================================


    IF COUNTOFPOSITION = 0 THEN


    IF entrySignal THEN


    BUY PositionSize CONTRACT AT MARKET


    firstEntryBar = BARINDEX


    // Ziel 30 Punkte über dem ersten Einstieg

    firstTargetPrice = close + TargetPoints


    SET TARGET PRICE firstTargetPrice


    ENDIF


    ENDIF


    // =====================================================

    // ZWEITE POSITION

    // =====================================================


    IF COUNTOFPOSITION = PositionSize THEN


    IF BARINDEX – firstEntryBar >= WaitBars THEN


    IF entrySignal THEN


    BUY PositionSize CONTRACT AT MARKET


    // Das ursprüngliche Ziel bleibt bestehen

    SET TARGET PRICE firstTargetPrice


    ENDIF


    ENDIF


    ENDIF


    #264555 quote
    JS
    Participant
    Master
    #264556 quote
    DiBuOL
    Participant
    Junior

    Wow…vielen Dank! Der Einbruch 2025 ist natürlich sehr heftig. Daran muss ich noch arbeiten. Aber grds. geht das in die richtige Richtung!

    JS thanked this post
    #264558 quote
    JS
    Participant
    Master

    Auffällig an deinem System ist das hohe Sharpe-Ratio von fast 6 – wie ist das möglich…?

    Was dein System im Grunde macht, ist, die Positionen offen zu halten, bis ein Gewinn erzielt wird…

    Das ist ein bekannter “Trick”, um das Endrisiko zu verringern, dass das System das Sharpe-Verhältnis steigen lässt…

    Das Ergebnis ist ein unkontrollierter DD

    #264559 quote
    DiBuOL
    Participant
    Junior

    Hallo JS,

    ja, es ist auch beabsichtigt, die Position offen zu halten. Grds. soll jedoch ein möglichst kurze Haltezeit erreicht werden. Als “Trick” würde ich das daher nicht unbedingt bezeichnen. Genau genommen ist das eine meiner Strategien, die ich bisher auch recht erfolgreich händisch ausgeübt habe. Daher wollte ich es nun mit einem automatisiertem Handelssystem versuchen. Ich habe noch einen Code, der bisher recht gut läuft. Den muss ich nur noch etwas verfeinern.

    Grundsätzlich arbeite ich etwas anders als wohl die meisten User hier. Ich habe eine riesige Datenbank über einen größeren Zeitraum mit den Daten auf z. B. 1-Minuten-Basis in Excel. Ich versuche nicht, Strategien anhand visueller Indikatoren zu entwickeln, sondern gehe die Sache mathematisch an. D. h. alle Indikatoren sind bei mir als Zahlenwerk hinterlegt und ich passe diese schrittweise an, bis ich eine möglichst hohe Trefferquote mit kurzen Haltezeiten erreicht habe. Das ist zwar recht aufwendig, führt aber zu besseren Ergebnissen. Dann baue ich die Strategien in PRT ein.

    #264560 quote
    JS
    Participant
    Master

    Hallo DiBuOl,

    Ich meinte nicht, dass du diesen “Trick” bewusst anwendest, sondern dass es allgemein ein bekannter “Trick” ist, um das Endrisiko für ein höheres Sharpe-Verhältnis zu reduzieren…

    Außerdem bin ich nur ein großer Befürworter der ständigen Entwicklung und Prüfung von Algorithmen und sicherlich Ihres mathematischen Ansatzes…

    DiBuOL thanked this post
    #264561 quote
    DiBuOL
    Participant
    Junior

    Ich habe hier noch einen ähnlichen Code, an dem ich gerade arbeite! Ich würde den beim Test nicht mit 10.000 Euro starten, sondern mit 2.800 Euro sowie einem Spread von 1.


    // =====================================================

    // PARAMETER

    // =====================================================

    DEFPARAM CumulateOrders = True


    WaitBars = 480

    TargetPoints = 30


    // =====================================================

    // KAPITAL / POSITIONSGRÖSSE

    // =====================================================


    // Startkapital des Backtests

    InitialCapital = 2820


    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


    // Positionsgröße abhängig vom aktuellen Kapital

    IF CurrentCapital < 3000 THEN

    PositionSize = 0.5

    ELSIF CurrentCapital < 4500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 7500 THEN

    PositionSize = 1.25

    ELSIF CurrentCapital < 9000 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 10500 THEN

    PositionSize = 1.75

    ELSE

    PositionSize = 2.0

    ENDIF


    // =====================================================

    // INDIKATOREN

    // =====================================================


    indicator1 = ExponentialAverage[25](close)

    c1 = close >= indicator1


    indicator2 = ExponentialAverage[25](close)

    indicator3 = ExponentialAverage[50](close)

    c2 = indicator2 CROSSES OVER indicator3


    indicator4 = ExponentialAverage[50](close)

    indicator5 = ExponentialAverage[100](close)

    c3 = indicator4 >= indicator5


    indicator6 = ExponentialAverage[200](close)

    c4 = close >= indicator6


    indicator7 = ADX[14]

    c5 = indicator7 > 20


    indicator8 = ADXR[14]

    c6 = indicator8 > 20


    entrySignal = c1 AND c2 AND c3 AND c4 AND c5 AND c6


    // =====================================================

    // ERSTE POSITION

    // =====================================================


    IF COUNTOFPOSITION = 0 THEN


    IF entrySignal THEN


    BUY PositionSize CONTRACT AT MARKET


    firstEntryBar = BARINDEX


    // Ziel 30 Punkte über dem ersten Einstieg

    firstTargetPrice = close + TargetPoints


    SET TARGET PRICE firstTargetPrice


    ENDIF


    ENDIF


    // =====================================================

    // ZWEITE POSITION

    // =====================================================


    IF COUNTOFPOSITION = PositionSize THEN


    IF BARINDEX – firstEntryBar >= WaitBars THEN


    IF entrySignal THEN


    BUY PositionSize CONTRACT AT MARKET


    // Das ursprüngliche Ziel bleibt bestehen

    SET TARGET PRICE firstTargetPrice


    ENDIF


    ENDIF


    ENDIF


    #264562 quote
    DiBuOL
    Participant
    Junior

    Achso…bei 10.500 Euro ist mit der Positionsgröße von 2 Schluss. Man müsste den Code im Laufe der Zeit noch für mehr Kapital anpassen, um eine kontinuierliche Steigerung des Ertrags zu erreichen. Mir ist dabei wichtig, dass mindestens die Hälfte des Kapitals nicht verwendet wird, um für ein Drawdown genügend Luft nach unten zu haben.


    JS thanked this post
    #264563 quote
    DiBuOL
    Participant
    Junior

    Sorry, der neue Code ist der alte! Hier der aktuelle:


    // Festlegen der Code-Parameter

    DEFPARAM CumulateOrders = True // Kumulieren von Positionen deaktiviert


    // =====================================================

    // KAPITAL / POSITIONSGRÖSSE

    // =====================================================


    // Startkapital des Backtests

    InitialCapital = 2820


    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


    // Positionsgröße abhängig vom aktuellen Kapital

    IF CurrentCapital < 3000 THEN

    PositionSize = 0.5

    ELSIF CurrentCapital < 4500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 7500 THEN

    PositionSize = 1.25

    ELSIF CurrentCapital < 9000 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 10500 THEN

    PositionSize = 1.75

    ELSE

    PositionSize = 2.0

    ENDIF


    // Bedingungen zum Einstieg in Long-Positionen

    indicator1 = Stochastic[48,9](close)

    c1 = (indicator1 <= 35)

    indicator2 = ExponentialAverage[25](close)

    indicator3 = ExponentialAverage[50](close)

    c2 = (indicator2 CROSSES OVER indicator3)

    indicator4 = ExponentialAverage[50](close)

    indicator5 = ExponentialAverage[100](close)

    c3 = (indicator4 >= indicator5)


    entrySignal = c1 AND c2 AND c3


    IF entrySignal THEN


    BUY PositionSize CONTRACT AT MARKET


    ENDIF


    // Stops und Targets

    SET TARGET pPROFIT 30


    #264564 quote
    DiBuOL
    Participant
    Junior

    Hier verwende ich die Stochastik und nicht den ADX.

    #264697 quote
    reb
    Participant
    Master

    Hallo,

    Ich habe deine letzte Strategie getestet (1Mio).

    Ich finde die sehr interessant, aber es gibt ein Risiko mit der Positionsgröße

    in Nov 2025, war die Positionsgröße sehr hoch :16 Contracts

    Vielleicht, dürftest du eine MaxGrenze einfügen.


    Capture-decran-2026-08-27-061352.jpg Capture-decran-2026-08-27-061352.jpg
    #264699 quote
    Iván González
    Moderator
    Legend

    Hallo, das können Sie so einschränken:

    maxcontract=10
    IF entrySignal and countofposition<maxcontract THEN
       BUY PositionSize CONTRACT AT MARKET
    ENDIF
    


    DiBuOL and reb thanked this post
    #264706 quote
    DiBuOL
    Participant
    Junior

    Hallo!

    Vielen Dank für den Test! Leider zeigt sich auch hier, dass Extremereignisse wie z. B. im April 2025 die Grenzen beim automatischen Trading aufzeigen. Da muss man fast “Augen zu und durch” sagen oder man greift händisch ein.

    Die maximalen Kontrakte würde ich hier auch noch einmal anpassen. Grds. soll je nach Kapitalzuwachst maximal die Hälfte des Kontos im Markt stecken.

    #264707 quote
    DiBuOL
    Participant
    Junior

    Alteranativ könnte man hier die DEFPARAM CumulateOrders auf FALSE setzen, dafür aber die PositonSize noch mit dem gestiegenen Kapital erweitern.

    #264713 quote
    JS
    Participant
    Master

    Wenn du dir die „Liste der geschlossenen Positionen“ ansiehst und nach „MAE“ sortierst, siehst du, dass der Drawdown im März 2025 hauptsächlich durch einen einzigen großen Verlusttrade von etwa 6.000 € verursacht wird…

    Dieser Verlusttrade ist doppelt so groß wie der zweitgrößte Verlusttrade…

    Es ist möglich, diesen Verlusttrade mit einem Emergency Stop von etwa 2.000 € zu begrenzen…

    Tatsächlich zeigt sich, dass der Emergency Stop den Drawdown im März 2025 um die Hälfte reduziert, ohne darüber hinaus Einfluss auf den Rest des Systems zu haben…

    Es ist also eine Möglichkeit…?

    DiBuOL thanked this post
    Scherm­afbeelding-2026-08-27-om-16.08.27.png Scherm­afbeelding-2026-08-27-om-16.08.27.png Scherm­afbeelding-2026-08-27-om-16.20.22.png Scherm­afbeelding-2026-08-27-om-16.20.22.png Scherm­afbeelding-2026-08-27-om-16.20.45.png Scherm­afbeelding-2026-08-27-om-16.20.45.png
Viewing 15 posts - 1 through 15 (of 15 total)
  • You must be logged in to reply to this topic.

Backtest über mehrere Jahre benötigt


ProOrder: Automatischer Handel & Backtesting

New Reply
Author
author-avatar
DiBuOL @dibuol Participant
Summary

This topic contains 14 replies,
has 4 voices, and was last updated by JS
2 hours, 13 minutes ago.

Topic Details
Forum: ProOrder: Automatischer Handel & Backtesting
Language: German
Started: 08/16/2026
Status: Active
Attachments: 9 files
Logo Logo
Loading...