Strategie zur Umkehrung der Krypto-Trendentwicklung auf Basis von Pivot-Swing-Hoch- und Tiefpunkten

Schriftsteller:ChaoZhang, Datum: 2024-01-12 14:13:36
Tags:

img

Übersicht

Diese Strategie identifiziert Trendumkehrungen in Krypto-Assets basierend auf PIVOT-Swing-Hoch-/Tiefpunkten und Breakout-Signalen. Sie gehört zur Kategorie der Breakout-Umkehrstrategie. Die Strategie berechnet zuerst die jüngsten Höchst- und Tiefpunktpreise als PIVOT-Level, erkennt dann, ob der Preis diese Schlüsselniveaus durchbricht, was zu großen Trendänderungen führt.

Wie die Strategie funktioniert

  1. Berechnung der PIVOT-Hoch-/Tiefpunkte

    Verwendet ta.pivothigh (() und ta.pivotlow (()) um höchste Höchst- und niedrigste niedrige Preise über einen benutzerdefinierten Lookback-Zeitraum zu finden, um PIVOT-Punkte zu erstellen.

  2. Identifizieren Sie Ausbruchssignale

    Wenn der Preis über den PIVOT-Tiefpunkt oder unter den PIVOT-Hochpunkt bricht, wird dies in der Strategie als Trendumkehrsignal betrachtet.

  3. Filterbedingungen festlegen

    Erfordert, dass der Preis die PIVOT-Levels um eine bedeutende Entfernung durchbricht, und der Schlusskurs überschreitet die Schlusskurs 150 Bar, um Whipsaws zu vermeiden.

  4. Ein- und Ausgänge

    Trigger Kaufsignal bei Long-Bedingung, Schließung Long-Position bei Exit-Bedingung.

Vorteile

  1. PIVOT-Punkte sind empfindlich gegenüber großen Trendveränderungen
  2. Vermeidet Schlagzeilen bei Konsolidierungstrends mit Filtern
  3. Erfasst Umkehrungen früh mit Schwing-Hoch-/Niedrig-Breakthroughs

Risiken

  1. Größere Zyklen können dazu führen, dass die Strategie verfälscht wird.
  2. PIVOT-Punkte und Filter müssen für jeden Asset abgestimmt werden
  3. Wechselkursgebühren wirken sich auf die Ergebnisse aus, die Gebührenstruktur muss nahezu null sein

Möglichkeiten zur Verbesserung

  1. Testen Sie verschiedene PIVOT-Rückblickperioden
  2. Hinzufügen von beweglichem Stop Loss zum Kontrollverlust pro Trade
  3. Kombination mit anderen Indikatoren für Filter

Schlussfolgerung

Die Strategie ist insgesamt robust, um große Umkehrungen zu erfassen, benötigt aber maßgeschneiderte Parameter pro Vermögenswert und Risikokontrollen.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nkrastins95

//@version=5
strategy("Swing Hi Lo", overlay=true, margin_long=100, margin_short=100)

//-----------------------------------------------------------------------------------------------------------------------//

tf = input.timeframe(title="Timeframe", defval="")

gr="LENGTH LEFT / RIGHT"
leftLenH = input.int(title="Pivot High", defval=10, minval=1, inline="Pivot High",group=gr)
rightLenH = input.int(title="/", defval=10, minval=1, inline="Pivot High",group=gr)
colorH = input(title="", defval=color.red, inline="Pivot High",group=gr)

leftLenL = input.int(title="Pivot Low", defval=10, minval=1, inline="Pivot Low", group=gr)
rightLenL = input.int(title="/", defval=10, minval=1, inline="Pivot Low",group=gr)
colorL = input(title="", defval=color.blue, inline="Pivot Low",group=gr)

//-----------------------------------------------------------------------------------------------------------------------//

pivotHigh(ll, rl) =>
    maxLen = 1000
    float ph = ta.pivothigh(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(ph[offset])
            break 
        offset := offset + 1
    ph[offset]

pivotLow(ll, rl) =>
    maxLen = 1000
    float pl = ta.pivotlow(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(pl[offset])
            break 
        offset := offset + 1
    pl[offset]


//-----------------------------------------------------------------------------------------------------------------------//

ph = request.security(syminfo.tickerid, tf, pivotHigh(leftLenH, rightLenH), barmerge.gaps_off, barmerge.lookahead_on)
pl = request.security(syminfo.tickerid, tf, pivotLow(leftLenL, rightLenL), barmerge.gaps_off, barmerge.lookahead_on)

drawLabel(_offset, _pivot, _style, _color) =>
    if not na(_pivot)
        label.new(bar_index[_offset], _pivot, str.tostring(_pivot, format.mintick), style=_style, color=_color, textcolor=#131722)

//-----------------------------------------------------------------------------------------------------------------------//

VWAP = ta.vwap(ohlc4)

longcondition = ta.crossunder(close,pl) and close > close[150]
exitcondition = close > ph

shortcondition = ta.crossover(close,ph) and close < close[150]
covercondition = close < pl

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = exitcondition)

strategy.entry("Short", strategy.short, when = shortcondition)
strategy.close("Short", when = covercondition)

Mehr