PB SAR Backtest-Strategie mit elastischem Stop Loss

Schriftsteller:ChaoZhang, Datum: 2023-10-11
Tags:

Übersicht

Die Strategie basiert auf einem flexiblen Stop-Loss-Indikator, setzt Kauf- und Verkaufssignale und führt sowohl Long- als auch Short-Positionen durch. Wenn ein Kauf- und Verkaufssignal auftritt, machen Sie mehr; wenn ein Verkaufssignal auftritt, machen Sie weniger.

Grundsätze

Diese Strategie nutzt vor allem die Elastizitäts-Stopp-Indikatoren, um Trendwendepunkte zu identifizieren, um umgekehrt zu agieren. Die Indikatoren verwenden innerhalb des Indikators einen echten Bereichs-Indikator, um den Grenzwert zu identifizieren. Wenn der Preis den Grenzwert überschreitet, wird ein außergewöhnlicher Durchbruch angesehen und die Möglichkeit einer Trendwende beurteilt.

Bei einem Aufwärtstrend wird ein Abweichungsbruch als Preis höher als der EP bezeichnet, wobei der EP als höchster Preis und der TP als niedriger Preis aktualisiert wird. Bei einem Preis unter dem TP wird ein Trendumkehr bezeichnet, der ein Verkaufssignal erzeugt. Bei einem Abwärtstrend funktioniert das ähnlich.

Die Strategie kombiniert mit einem Stop-Loss-Tracking-Mechanismus, der den optimalen Stop-Loss-Preis in Echtzeit verfolgt, wenn eine Position geöffnet wird, um das Risiko zu kontrollieren, während ein Gewinn gewährleistet wird.

Vorteile

Die Strategie hat folgende Vorteile:

  1. Es ist schwierig, Trends mit Hilfe von Indikatoren zu identifizieren, um Trends umzukehren.

  2. Einer der wichtigsten Faktoren, die wir in diesem Jahr untersucht haben, ist die Tatsache, dass wir uns mit der Entwicklung von Technologien beschäftigen, die uns helfen, unsere Produkte zu verbessern.

  3. Die Indikatorparameter sind einfach und leicht umsetzbar.

  4. Sie können die Anzeige des Kauf- und Verkaufssignals konfigurieren und einfach bedienen.

  5. Sie können flexibel die Wiederholungszyklen konfigurieren, um die strategische Wirkung umfassend zu bewerten.

Das Risiko

Die Strategie birgt auch einige Risiken:

  1. Der Indikator ist zurückgeblieben und könnte den optimalen Punkt für eine Trendwende verpassen.

  2. Der Stopp ist zu radikal und kann durch kurzfristige Preisschwankungen gestoppt werden.

  3. Die Wiederholungszyklen sind falsch ausgewählt und die Effekte der Strategie können nicht vollständig beurteilt werden.

  4. Die Auswirkungen von Transaktionskosten auf die Gewinne müssen beachtet werden.

In den letzten Jahren hat sich die Zahl der Menschen, die in der EU lebten, um die Hälfte verringert.

  1. Die Anpassung der Indikatorparameter verringert die Verzögerung.

  2. Sie optimieren ihre Stopp-Loss-Algorithmen, um nicht eingesperrt zu werden.

  3. Die Wahl der richtigen Wiederholungszeiträume stellt die Zuverlässigkeit sicher.

  4. Optimierung der Positionsverwaltung und Senkung der Transaktionskosten.

Optimierung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. In Kombination mit Trendindikatoren, um zu vermeiden, dass umgekehrte Transaktionen eingeschlossen werden.

  2. Optimierung von Positionsmanagement-Algorithmen, wie z.B. Festverhältnispositionen, Dynamikpositionen usw.

  3. Einige von ihnen haben sich in der letzten Woche bei der Veröffentlichung von "The Biggest Loser" (Die größte Herausforderung) für ihre Arbeit engagiert.

  4. Die Optimierung der Parameter findet die beste Kombination von Parametern.

  5. Einige von ihnen sind in der Lage, sich an die Strategie zu beteiligen, die sie entwickelt haben, um ihre Trends zu stoppen.

  6. Optimieren Sie Ihre Stop-Loss-Strategie, um Ihre Stop-Loss-Verfahren zu verbessern.

  7. Optimierung von Handelsarten, Zeitrahmen usw. und Verbesserung der Strategieanpassungsfähigkeit.

  8. Die Einbindung von Algorithmen für maschinelles Lernen macht die Strategie anpassungsfähiger.

Zusammenfassung

Die Strategie ist insgesamt einfacher und zuverlässiger. Sie identifiziert Umkehrpunkte mit Hilfe von elastischen Stoppindikatoren und kann als kurzfristige Umkehrstrategie verwendet werden, um die Risiken durch Stoppmechanismen zu kontrollieren.

Übersicht

Diese Strategie basiert auf dem Parabolic SAR-Indikator, um Kauf- und Verkaufssignale für Long- und Short-Positionen zu generieren.

Grundsätze

Der Kern dieser Strategie besteht darin, Trendumkehrpunkte mit Hilfe des Parabolischen SAR-Indikators für den Gegentrendhandel zu identifizieren. Der Indikator verwendet die wahre Bandbreite, um extreme Preise zu erkennen. Wenn der Preis den Extrem überschreitet, wird er als Ausbruch und ein Zeichen für eine mögliche Trendumkehr angesehen. Insbesondere hält der Indikator zwei Variablen bei: den Extreme Price (EP) und den Trigger Price (TP). Der EP stellt den höchsten/niedrigsten Preis des aktuellen Trends dar, während der TP aus dem EP abgeleitet wird.

Bei einem Aufwärtstrend gilt ein Preis, der höher als der EP liegt, als Ausbruch. Der EP wird dann auf den höchsten Preis und der TP auf den niedrigsten Preis aktualisiert. Wenn der Preis unter den TP fällt, wird eine Trendumkehr erkannt und ein Verkaufssignal erzeugt. Das gleiche Prinzip gilt für einen Abwärtstrend.

Die Strategie beinhaltet auch einen Trailing Stop Loss Mechanismus. Nach dem Öffnen einer Position wird der optimale Stop Loss Preis in Echtzeit verfolgt und Gewinne erzielt, während Risiken kontrolliert werden.

Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Identifizieren Sie mit dem Indikator Trendumkehrpunkte, um nicht in Trends gefangen zu bleiben.

  2. Ein Stop-Loss verhindert größere Verluste.

  3. Einfache Indikatorparameter, einfach umzusetzen.

  4. Konfigurierbare Kauf-/Verkaufssignalwarnungen für die Bequemlichkeit.

  5. Flexible Konfiguration der Backtest-Periode für eine gründliche Bewertung.

Risiken

Es gibt auch einige Risiken, die zu berücksichtigen sind:

  1. Die Indikatorverzögerung kann die optimalen Umkehrpunkte verfehlen.

  2. Aggressive Stopps können durch kurzfristige Schwankungen gestoppt werden.

  3. Eine falsche Auswahl der Backtest-Periode kann die Strategie nicht vollständig bewerten.

  4. Transaktionskosten können den Gewinn beeinträchtigen.

Einige Möglichkeiten, mit den Risiken umzugehen, sind:

  1. Optimieren Sie die Parameter, um die Verzögerung zu reduzieren.

  2. Verbessern Sie den Stop-Loss-Algorithmus, damit Sie nicht unnötig gestoppt werden.

  3. Für die Zuverlässigkeit sind geeignete Rückprüfungszeiten auszuwählen.

  4. Optimierung der Positionsgröße zur Senkung der Transaktionskosten.

Erweiterung

Einige Möglichkeiten zur weiteren Optimierung der Strategie:

  1. Verwenden Sie Trendindikatoren wie MA, um nicht in Gegentrends gefangen zu bleiben.

  2. Optimierung von Positionsgrößenalgorithmen, z. B. feste Bruchteile, dynamische.

  3. Fügen Sie einen Lautstärkungsfilter hinzu, um falsche Signale aus Lücken zu vermeiden.

  4. Parameteroptimierung, um optimale Kombinationen zu finden.

  5. Implementieren Sie Profit-taking-Strategien, um Gewinne in Trends zu erzielen.

  6. Verfeinern Sie Stop-Loss-Algorithmen für glattere Stopps. Experimentieren Sie mit Chandelier Exit usw.

  7. Optimieren über Produkte, Zeitrahmen usw. hinweg, um die Anpassungsfähigkeit zu verbessern.

  8. Maschinelles Lernen für eine größere Anpassungsfähigkeit.

Zusammenfassung

Zusammenfassend ist dies eine einfache und robuste Strategie, bei der die Parabolische SAR verwendet wird, um Umkehrungen und Trailing Stop Loss zu identifizieren, um das Risiko zu kontrollieren. Sie kann als kurzfristige Mittelumkehrstrategie funktionieren.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("PB SAR BackTest - Colorbar", overlay=false)

// Full credit to Sawcruhteez, Lucid Investment Strategies LLC, Casey Bowman and Peter Brandt.
// This is a strategy version of the Peterbolic SAR indicator created by the above-mentioned parties.
// Original version of the indicator: https://www.tradingview.com/script/6nYrH3Vm-Peterbolic-SAR/

// SAR #1
// Lucid Sar
// Branded under the name "Lucid SAR"
// as agreed to with Lucid Investment Strategies LLC on July 9, 2019
// https://lucidinvestmentstrategies.com/
// see branch "lucid"

// SAR #2
// Peterbolic Sar
// Using the name "Peterbolic SAR"
// as agreed to by Peter Brandt on October 2, 2019
// - https://twitter.com/PeterLBrandt/status/1179365590668075008
// in response to request from Sawcruhteez
// - https://twitter.com/Sawcruhteez/status/1179213105705836544
// Sawcruhteez gives credit to @CrazyGabey for coming up with the name
// - https://twitter.com/Sawcruhteez/status/1179213196583940097
// see branch "peterbolic"

// SAR #3
// Sawcruhteez Sar
// Branded under the name "Sawcruhteez SAR"
// as agreed to with Sawcruhteez on September 11, 2019
// see branch "sawcruhteez"

// Open Source on github
// https://github.com/casey-bowman/sar/blob/peterbolic/peterbolic.pine

// Created by Casey Bowman on July 4, 2019

// MIT License

// Copyright (c) 2019 Casey Bowman

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.



TSR() =>

    // start with uptrend
    var uptrend = true
    var EP = high       // extreme price - high or low depending on trend
    var SP = low        // setup price
    var TP = float(na)  // trigger price


    var setup   = low
    var trigger = float(na)

    if barstate.isnew
        setup := low
        trigger = float(na)

    extreme_candle = false
    first_extreme_candle = false
    setup_candle = false
    trigger_candle = false

    waiting_for_setup = false
    waiting_for_trigger = false

    var since_extreme = 0
    var since_setup = 0

    waiting_for_setup   := not extreme_candle and not na(SP)
    waiting_for_trigger := not na(TP)

    if not barstate.isfirst
        if barstate.isnew and extreme_candle[1]
            trigger := float(na)
        if barstate.isnew and setup_candle[1]
            setup := float(na)
        if barstate.isnew and waiting_for_trigger
            since_setup := since_setup + 1
            trigger := TP
        if barstate.isnew and waiting_for_setup
            since_extreme := since_extreme + 1
            setup := SP
        if uptrend

            if extreme_candle
                EP := high
                SP := low
            else
                if high > EP
                    extreme_candle := true
                    EP := high
                    SP := low
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close < SP
                                setup_candle := true
                                SP := float(na)
                                TP := low
            if waiting_for_trigger
                if low < TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := low
                    SP := high
                    TP := float(na)
                    uptrend := false
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)

        else
            if extreme_candle
                EP := low
                SP := high
            else
                if low <  EP
                    extreme_candle := true
                    EP := low
                    SP := high
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close > SP
                                setup_candle := true
                                SP := float(na)
                                TP := high
            if waiting_for_trigger
                if high > TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := high
                    SP := low
                    TP := float(na)
                    uptrend := true
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)


    [trigger_candle, trigger, since_setup, setup_candle, setup, since_extreme, extreme_candle, uptrend]


[TC, T, SS, SC, S, SE, EC, up] = TSR()

// Make input options that configure backtest date range
StartMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
StartDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
StartYear = input(title="Start Year", type=input.integer,
     defval=(2019), minval=1800, maxval=2100)

EndMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
EndDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
EndYear = input(title="End Year", type=input.integer,
     defval=(2020), minval=1800, maxval=2100)
     
// Look if the close time of the current bar falls inside the date range
inDateRange = true

buytrigger = (TC and up)
selltrigger = (TC and not up)
buysetup = (SC and not up)
sellsetup = (SC and up)

IntBuy = buytrigger ? 1 : 0
IntSB = buysetup ? 0.5 : 0

IntSell= selltrigger ? -1 : 0
IntSS = sellsetup ? -0.5 : 0

bgcolor = buytrigger ? color.green : selltrigger ? color.red : buysetup ? color.yellow : sellsetup ? color.orange : color.black
trans = buytrigger ? 20 : selltrigger ? 20 : 100

bgcolor(bgcolor, 30)

NUM = IntBuy + IntSB + IntSell + IntSS
linecolor = color.orange
plot(NUM, color=linecolor, linewidth=2)

alertcondition(NUM > 0.5, title="Buy Signal", message="Buy Alert")
alertcondition(NUM < -0.5, title="Sell Signal", message="Sell Alert")

alertcondition(NUM == 0.5, title="Buy Setup", message="Buy Setup")
alertcondition(NUM == -0.5, title="Sell Setup", message="Sell Setup")

//Switch on for strategy moves

if(inDateRange and buytrigger)
    strategy.exit("SHORT", "SHORT_SL", comment="Short_Exit")
    strategy.entry("LONG", strategy.long, comment="")
if(inDateRange and selltrigger)
    strategy.exit("LONG", "LONG_SL", comment="Long_Exit")
    strategy.entry("SHORT", strategy.short, comment="")
if (not inDateRange)
    strategy.close_all()

// plotshape(SC and not up, color = color.yellow, style = shape.triangleup, location = location.belowbar, size = size.auto, transp = 0, title = "Setup to Buy")
// plotshape(TC and up, color = color.green, style = shape.triangleup, location = location.belowbar, size = size.auto, title = "Trigger to Buy")
// plotshape(SC and up, color = color.yellow, style = shape.triangledown, location = location.abovebar, size = size.auto, transp = 0, title = "Setup to Sell")
// plotshape(TC and not up, color = color.red, style = shape.triangledown, location = location.abovebar, size = size.auto, title = "Trigger to Sell")


Mehr