Backtest über mehrere Jahre benötigt

Viewing 11 posts - 16 through 26 (of 26 total)
  • Author
    Posts
  • #265113 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Liebe Leute!


    Ich habe heute noch einmal einen neuen Code geschrieben! Mag hier noch einmal jemand diesen auf 1-Minuten-Basis im DAX über mehrere Jahre testen? Derzeit kann ich leider weiterin nur bis 200K testen. Aber vielleicht hat hier ja eh jemand Interesse an meinem Code 🙂


    Startkapital 2.000 Euro, Spread 1 Punkt als Einstellung.


    Vielen Dank vorab :-)))



    // Festlegen der Code-Parameter

    DEFPARAM CumulateOrders = False // Kumulieren von Positionen deaktiviert


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen vor einer bestimmten Uhrzeit

    noEntryBeforeTime = 010000

    timeEnterBefore = time >= noEntryBeforeTime


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen nach einer bestimmten Uhrzeit

    noEntryAfterTime = 200000

    timeEnterAfter = time < noEntryAfterTime


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

    // KAPITAL / POSITIONSGRÖSSE

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


    // Startkapital des Backtests

    InitialCapital = 2000


    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


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

    IF CurrentCapital < 2500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 3000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 3500 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 4000 THEN

    PositionSize = 2.0

    ELSIF CurrentCapital < 5000 THEN

    PositionSize = 2.5

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 3.0

    ELSIF CurrentCapital < 7000 THEN

    PositionSize = 3.5

    ELSIF CurrentCapital < 8000 THEN

    PositionSize = 4.0

    ELSE

    PositionSize = 4.0

    ENDIF


    // Bedingungen zum Einstieg in Long-Positionen

    indicator1 = DIplus[42]

    c1 = (indicator1 CROSSES OVER 25)

    indicator2 = DIminus[42](close)

    c2 = (indicator2 <= 17)

    indicator3 = Momentum[42](close)

    c3 = (indicator3 >= 0)

    indicator4 = Momentum[42](close)

    c4 = (indicator4 <= 50)

    indicator5 = ADX[42]

    c5 = (indicator5 >= indicator5[1])


    IF (c1 AND c2 AND c3 AND c4 AND c5) AND timeEnterBefore AND timeEnterAfter THEN

    BUY PositionSize CONTRACT AT MARKET

    ENDIF


    // Bedingungen zum Einstieg in Short-Positionen

    indicator6 = DIminus[42](close)

    c6 = (indicator6 CROSSES OVER 21)

    indicator7 = DIplus[42]

    c7 = (indicator7 <= 18)

    indicator8 = Momentum[42](close)

    c8 = (indicator8 <= 0)

    indicator9 = Momentum[42](close)

    c9 = (indicator9 >= -30)

    indicator10 = ADX[42]

    c10 = (indicator10 >= indicator10[1])


    IF (c6 AND c7 AND c8 AND c9 AND c10) AND timeEnterBefore AND timeEnterAfter THEN

    SELLSHORT 1 CONTRACT AT MARKET

    ENDIF


    // Stops und Targets

    SET STOP pTRAILING 40

    SET TARGET pPROFIT 100

    Screenshot-2026-09-15-215816.png Screenshot-2026-09-15-215816.png
    #265121 quote
    JSJS
    Participant
    Master

    Ich habe einen Backtest über 1 Mio. Einheiten durchgeführt, aber leider sieht das Ergebnis nicht besonders gut aus…

    Wenn ich Stop-Loss und Take-Profit auf null setze, sieht es etwas besser aus – zumindest ist jedes Jahr im Plus…

    Scherm­afbeelding-2026-09-16-om-00.31.42.png Scherm­afbeelding-2026-09-16-om-00.31.42.png Scherm­afbeelding-2026-09-16-om-00.31.12-scaled.png Scherm­afbeelding-2026-09-16-om-00.31.12-scaled.png Scherm­afbeelding-2026-09-15-om-23.42.43.png Scherm­afbeelding-2026-09-15-om-23.42.43.png Scherm­afbeelding-2026-09-15-om-23.42.22.png Scherm­afbeelding-2026-09-15-om-23.42.22.png Scherm­afbeelding-2026-09-15-om-23.41.19-scaled.png Scherm­afbeelding-2026-09-15-om-23.41.19-scaled.png Scherm­afbeelding-2026-09-15-om-02.35.27-1.png Scherm­afbeelding-2026-09-15-om-02.35.27-1.png
    #265122 quote
    JSJS
    Participant
    Master

    Das letzte Bild gehört nicht dazu…

    Die ersten beiden Bilder sind ohne Stop-Loss und Take-Profit, und die letzten drei Bilder stammen aus dem ursprünglichen System…

    #265124 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Guten Morgen JS,


    vielen Dank für den Test. Ich werde die Parameter noch ausbauen, so dass es sicher weniger Trades, aber dafür mehr Treffer werden. Es ist immer wieder erstaunlich, wie gut so ein Code in einem Jahr funktionieren kann und in anderen überhaupt nicht! 🙂

    JS thanked this post
    #265125 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Ich denke, ich werde die Shorts rauswerfen. Die sind eh schwierig im DAX.

    #265131 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Guten Morgen,

    ich habe jetzt die Shorts rausgeworfen und die Longs noch einmal um eine weitere Hürde mit einem Momentum von 14 (indicator11) ergänzt. Damit ist es mir nun gelungen, die gewinnenden Positionen auf 48 % “hochzuschrauben” und die Ratio sogar auf 1,72. Es sind immer noch 142 Trades im 1-Minuten-Dax bei 200k. Damit wären die Monate März bis nun September bisher alle positiv verlaufen. Immerhin… 🙂


    // Festlegen der Code-Parameter

    DEFPARAM CumulateOrders = False // Kumulieren von Positionen deaktiviert


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen vor einer bestimmten Uhrzeit

    noEntryBeforeTime = 010000

    timeEnterBefore = time >= noEntryBeforeTime


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen nach einer bestimmten Uhrzeit

    noEntryAfterTime = 200000

    timeEnterAfter = time < noEntryAfterTime


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

    // KAPITAL / POSITIONSGRÖSSE

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


    // Startkapital des Backtests

    InitialCapital = 2000


    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


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

    IF CurrentCapital < 2500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 3000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 3500 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 4000 THEN

    PositionSize = 2.0

    ELSIF CurrentCapital < 5000 THEN

    PositionSize = 2.5

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 3.0

    ELSIF CurrentCapital < 7000 THEN

    PositionSize = 3.5

    ELSIF CurrentCapital < 8000 THEN

    PositionSize = 4.0

    ELSIF CurrentCapital < 9000 THEN

    PositionSize = 4.5

    ELSIF CurrentCapital < 10000 THEN

    PositionSize = 5.0

    ELSIF CurrentCapital < 12000 THEN

    PositionSize = 6.0

    ELSIF CurrentCapital < 14000 THEN

    PositionSize = 7.0

    ELSIF CurrentCapital < 16000 THEN

    PositionSize = 8.0

    ELSE

    PositionSize = 8.0

    ENDIF


    // Bedingungen zum Einstieg in Long-Positionen

    indicator1 = DIplus[42]

    c1 = (indicator1 CROSSES OVER 25)

    indicator2 = DIminus[42](close)

    c2 = (indicator2 <= 17)

    indicator3 = Momentum[42](close)

    c3 = (indicator3 >= 0)

    indicator4 = Momentum[42](close)

    c4 = (indicator4 <= 50)

    indicator5 = ADX[42]

    c5 = (indicator5 >= indicator5[1])

    indicator11 = Momentum[14](close)

    c11 = (indicator11 <= 25 AND indicator11 >= -15)


    IF (c1 AND c2 AND c3 AND c4 AND c5 AND c11) AND timeEnterBefore AND timeEnterAfter THEN

    BUY PositionSize CONTRACT AT MARKET

    ENDIF


    //// Bedingungen zum Einstieg in Short-Positionen

    //indicator6 = DIminus[42](close)

    //c6 = (indicator6 CROSSES OVER 21)

    //indicator7 = DIplus[42]

    //c7 = (indicator7 <= 18)

    //indicator8 = Momentum[42](close)

    //c8 = (indicator8 <= 0)

    //indicator9 = Momentum[42](close)

    //c9 = (indicator9 >= -30)

    //indicator10 = ADX[42]

    //c10 = (indicator10 >= indicator10[1])


    //IF (c6 AND c7 AND c8 AND c9 AND c10) AND timeEnterBefore AND timeEnterAfter THEN

    //SELLSHORT 1 CONTRACT AT MARKET

    //ENDIF


    // Stops und Targets

    SET STOP pTRAILING 40

    SET TARGET pPROFIT 100

    Screenshot-2026-09-16-084956.png Screenshot-2026-09-16-084956.png Bericht.png Bericht.png
    #265132 quote
    JSJS
    Participant
    Master

    Meiner Meinung nach handelt es sich hier eindeutig um eine Überoptimierung…

    Man optimiert ein System über einen bestimmten Zeitraum, wobei sich die Einstellungen der verschiedenen Indikatoren immer stärker an die spezifischen Eigenschaften dieses Zeitraums und der verwendeten Daten anpassen…

    Die Gefahr dabei ist, dass das, was in einem bestimmten Zeitraum gut funktioniert, in einem anderen Zeitraum überhaupt nicht oder deutlich schlechter funktionieren muss…

    Man hat dann im Grunde ein System geschaffen, das sehr gut auf die historischen Daten abgestimmt ist, auf denen es optimiert wurde…

    Es ist jedoch keineswegs selbstverständlich, dass es auch außerhalb dieses Datensatzes weiterhin gut funktioniert…

    Eine Möglichkeit, eine mögliche Überoptimierung zu überprüfen, ist die Verwendung einer Walk-Forward-Analyse. Dabei optimiert man die Strategie zunächst über einen bestimmten Teil der historischen Daten (In-Sample) und testet die gefundenen Einstellungen anschließend auf einem darauffolgenden, bisher nicht verwendeten Teil der Daten (Out-of-Sample)…

    Danach wird der Zeitraum weiter verschoben und der Prozess wiederholt…

    Auf diese Weise kann man besser beurteilen, ob die Performance einer Strategie tatsächlich robust ist oder hauptsächlich darauf zurückzuführen ist, dass sie zu stark an bestimmte historische Daten angepasst wurde…

    Wenn die Performance in den Out-of-Sample-Perioden im Vergleich zu den In-Sample-Ergebnissen deutlich zurückgeht, kann dies ein starkes Indiz dafür sein, dass das System zu stark an die historischen Daten angepasst wurde…

    #265133 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Vielen Dank mein Freund für Deine ehrlich Rückmeldung! Ich versuche, diese Code noch einmal zu vereinfachen. Derzeit stelle ich alle Gewinntrades mathematisch den Verlusttrades gegenüber und versuche Besonderheiten in den Verlusten zu finden, die bei den Gewinnen möglichst selten auftreten.

    JS thanked this post
    #265135 quote
    JSJS
    Participant
    Master

    Der Preis wird durch Angebot und Nachfrage bestimmt, also durch Käufer und Verkäufer…

    Im Orderbuch wirken zwei Kräfte zusammen, die letztlich den Preis bestimmen…

    Mein Ansatz wäre daher: Finde etwas, das diese beiden Kräfte sichtbar macht. Das kann die Price Action sein, ein Indikator oder etwas ganz anderes…

    Versuche, die Käufer und Verkäufer sichtbar zu machen…

    Du wirst feststellen, dass die Grundlage eines Systems dadurch wesentlich robuster werden kann…

    Intraday-Trading ist aufgrund der Markt-Mikrostruktur und der vielen Entscheidungen, die man auf dieser Ebene treffen muss, eine der schwierigsten Formen desTradings… Versuche deshalb auch einmal, mit End-of-Day-(EOD-)Kursen zu arbeiten…

    Bei der Arbeit mit EOD-Kursen blendest du einen Teil der kurzfristigen Markt-Mikrostruktur aus…

    #265136 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Ich verstehe Deinen Ansatz sehr gut, allerdings passt der nicht ganz zu meiner Strategie. Ich mache Daytrading derzeit “händisch” und habe da eine Strategie, die schon seit langem sehr gut funktioniert. Diese versuche ich zu automatisieren. Allerdings ist es natürlich so, dass ich mit meiner Methode ohne Autotrader schon etwas flexibler mit meiner Strategie umgehe. Das versuche ich dennoch soweit in einen Code zu packen, dass ich einen Teil der Trades sozusagen ohne mein eigenes Zutun erledigen kann.

    Ich habe den Code heute noch einmal ein wenig angepasst und nun auch PRT mit 1 Mio Daten (seit heute Vormittag). Bisher sieht das ganz gut aus. Ich bin jetzt tatsächlich soweit, dass ich alle 3 Jahre im Plus bin. Als ersten Fehler habe ich den fehlenden FlatAfter am Freitag Abend eingebaut. Das bringt enorm viel. Damit bin ich an den Wochenende immer schon einmal Flat. Im nächsten Schritt möchte ich noch eine weitere, kleine Momentumstufe einbauen. Das sieht bisher auch ganz gut aus. Aber ich bin noch nicht ganz zufrieden. Den Drawdown möchte ich noch etwas verbessern. Sobald ich soweit bin, stelle ich den Code hier noch einmal ein 🙂

    #265332 quote
    DiBuOLDiBuOL
    Participant
    Junior

    Hallo zusammen! Das hier ist nun sicher keine Zack-und-Reich-Strategie! Jedoch im Backtest funktioniert sie schon einmal im DAX mit einer Minute!


    // Festlegen der Code-Parameter

    DEFPARAM CumulateOrders = False // Kumulieren von Positionen deaktiviert


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen vor einer bestimmten Uhrzeit

    noEntryBeforeTime = 040000

    timeEnterBefore = time >= noEntryBeforeTime


    // Verhindert das Platzieren von neuen Ordern zum Markteintritt oder Vergrößern von Positionen nach einer bestimmten Uhrzeit

    noEntryAfterTime = 210000

    timeEnterAfter = time < noEntryAfterTime


    // Freitag: keine neuen Einstiege mehr nach 14:00 Uhr

    IF DayOfWeek = 5 THEN

    timeEnterAfter = time < 160000

    ENDIF


    // Startkapital des Backtests

    InitialCapital = 2000



    // Aktuelles Strategiekapital

    CurrentCapital = InitialCapital + STRATEGYPROFIT


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

    IF CurrentCapital < 2000 THEN

    PositionSize = 0.5

    ELSIF CurrentCapital < 2500 THEN

    PositionSize = 0.75

    ELSIF CurrentCapital < 3000 THEN

    PositionSize = 1.0

    ELSIF CurrentCapital < 3500 THEN

    PositionSize = 1.5

    ELSIF CurrentCapital < 4000 THEN

    PositionSize = 2.0

    ELSIF CurrentCapital < 5000 THEN

    PositionSize = 2.5

    ELSIF CurrentCapital < 6000 THEN

    PositionSize = 3.0

    ELSIF CurrentCapital < 7000 THEN

    PositionSize = 3.5

    ELSIF CurrentCapital < 8000 THEN

    PositionSize = 4.0

    ELSIF CurrentCapital < 9000 THEN

    PositionSize = 4.5

    ELSIF CurrentCapital < 10000 THEN

    PositionSize = 5.0

    ELSIF CurrentCapital < 12000 THEN

    PositionSize = 6.0

    ELSIF CurrentCapital < 14000 THEN

    PositionSize = 7.0

    ELSIF CurrentCapital < 16000 THEN

    PositionSize = 8.0

    ELSIF CurrentCapital < 18000 THEN

    PositionSize = 9.0

    ELSIF CurrentCapital < 20000 THEN

    PositionSize = 10.0

    ELSIF CurrentCapital < 22000 THEN

    PositionSize = 11.0

    ELSIF CurrentCapital < 24000 THEN

    PositionSize = 12.0

    ELSIF CurrentCapital < 26000 THEN

    PositionSize = 13.0

    ELSIF CurrentCapital < 28000 THEN

    PositionSize = 14.0

    ELSIF CurrentCapital < 30000 THEN

    PositionSize = 15.0

    ELSIF CurrentCapital < 32000 THEN

    PositionSize = 16.0

    ELSIF CurrentCapital < 34000 THEN

    PositionSize = 17.0

    ELSIF CurrentCapital < 36000 THEN

    PositionSize = 18.0

    ELSIF CurrentCapital < 38000 THEN

    PositionSize = 19.0

    ELSIF CurrentCapital < 40000 THEN

    PositionSize = 20.0

    ELSE

    PositionSize = 20.0

    ENDIF


    // Bedingungen zum Einstieg in Long-Positionen

    indicator1 = DIplus[42]

    c1 = (indicator1 CROSSES OVER 25)

    indicator2 = DIminus[42](close)

    c2 = (indicator2 <= 20)

    indicator3 = Momentum[42](close)

    c3 = (indicator3 <= 55)


    //1 CONTRACT oder PositionSize

    IF (c1 AND c2 AND c3) AND timeEnterBefore AND timeEnterAfter THEN

    BUY 1 CONTRACT AT MARKET

    ENDIF


    IF LONGONMARKET THEN


    entryPrice = TradePrice


    // Merken, ob +25 Punkte bereits erreicht wurden

    IF Close – entryPrice >= 27 THEN

    levelReached = 1

    ENDIF


    // Merken, ob +30 Punkte bereits erreicht wurden

    IF Close – entryPrice >= 30 THEN

    levelReached = 2

    ENDIF



    // Aktuellen Stop bestimmen


    IF Close – entryPrice >= 55 THEN


    // Stufe 3: +30 oder mehr

    // Stop = +20

    stopPrice = entryPrice + 25


    ELSIF Close – entryPrice >= 45 THEN


    // Stufe 3: +30 oder mehr

    // Stop = +20

    stopPrice = entryPrice + 18


    ELSIF Close – entryPrice >= 35 THEN


    // Stufe 2: +25 bis +29,99

    // Stop = +5

    stopPrice = entryPrice + 15


    ELSIF Close – entryPrice >= 25 THEN


    // Stufe 2: +25 bis +29,99

    // Stop = +5

    stopPrice = entryPrice + 10


    ELSE


    // +25 wurde noch nie erreicht

    // Stop = -40

    stopPrice = entryPrice – 45


    ENDIF


    SELL AT stopPrice STOP


    ELSE


    // Position geschlossen → Merker zurücksetzen

    levelReached = 0


    ENDIF


    SET TARGET pPROFIT 90



    IF DayOfWeek = 5 AND time >= 225500 THEN

    IF LONGONMARKET THEN

    SELL AT MARKET

    ENDIF

    ENDIF

Viewing 11 posts - 16 through 26 (of 26 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

Backtest über mehrere Jahre benötigt


ProOrder: Automatischer Handel & Backtesting

New Reply
Author
author-avatar
DiBuOL @dibuol Participant
Summary

This topic contains 25 replies,
has 4 voices, and was last updated by DiBuOLDiBuOL
1 day, 11 hours ago.

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