Bitcoin Momentum Trailing Stop-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-08 16:20:16
Tags:

img

Strategieübersicht

Die Bitcoin Momentum Trailing Stop Strategie ist eine langlebige Momentum-basierte Strategie, die entwickelt wurde, um die Aufwärtstrends von Bitcoin zu erfassen und gleichzeitig das Abwärtstrendrisiko durch dynamisch angepasste Stop-Losses zu mildern. Die Strategie verwendet eine einfache, aber clevere Momentum Trailing Stop-Technik, die den Stop-Loss während einer stark bärischen Volatilität verschärft, um offene Gewinne zu schützen, und den Stop-Loss während einer anhaltenden bullischen Dynamik lockert, um Gewinne zu erzielen. Die Strategie bleibt so lange investiert, wie der Bitcoin-Preis über dem 20-wöchigen exponentiellen gleitenden Durchschnitt (EMA) liegt und aussteigt, wenn der Preis darunter schließt. Sie handelt nur mit einer Position und wird nicht kurz, aber sie kann leicht angepasst werden, um zu tun, was Sie wollen, wenn Sie wissen, was Sie tun.

Strategieprinzip

  1. Der aktuelle Preis von Bitcoin muss über der höheren Zeitrahmen-EMA (20-Wochen-EMA) gehandelt werden.
  2. Bitcoin darf nicht in einem Vorsichtszustand sein, definiert als das jüngste Swing-Hoch abzüglich des aktuellen Bar-Lows, das mehr als das 1,5-fache des ATR beträgt, oder das tägliche Schließen, das niedriger ist als das tägliche 20 EMA.
  3. Der Stop-Loss wird auf das jüngste Swing-Hoch minus 1 ATR oder minus 20% des ATR (d. h. 0,2 ATR) eingestellt, wenn er im Warnzustand ist.
  4. Der Exit auf der nächsten Bar öffnet sich, wenn der Preis unter dem Stop-Loss schließt.

Die Strategie verwendet das wöchentliche Chart und den 20-wöchigen EMA als Trendfilter und tritt nur ein, wenn der Preis über dem 20-wöchigen EMA liegt. Ein 5-Perioden-ATR wird verwendet, um die Entfernung des Trailing-Stops dynamisch anzupassen, der sich im Vorsichtszustand strafft. Der Vorsichtszustand wird durch zwei Bedingungen definiert: Die Entfernung vom jüngsten Schwingenhoch zum aktuellen Tief ist größer als das 1,5fache des ATR oder der tägliche Schluß liegt unter dem täglichen 20 EMA. Dieser dynamische Stop-Loss-Ansatz ermöglicht einen größeren Rückzug, wenn der Trend stark ist und schließt schnell Gewinne ein, wenn der Trend schwächer wird.

Strategische Vorteile

  1. Einfachheit und Effektivität: Die Strategie-Logik ist einfach, klar, leicht zu verstehen und umzusetzen und erfasst gleichzeitig effektiv die wichtigsten Aufwärtstrends von Bitcoin.

  2. Dynamische Stop-Loss: Die Stop-Loss-Position wird dynamisch anhand der Marktvolatilitätsbedingungen angepasst, wodurch die Drawdowns kontrolliert und gleichzeitig Gewinne erzielt werden, was ein relativ ausgewogener und robuster Ansatz für das Stop-Loss-Management darstellt.

  3. Trendfilterung: Durch das Filtern mit einem höheren gleitenden Durchschnitt (20-Wochen-EMA) tritt die Strategie nur während deutlicher Aufwärtstrends ein und verbessert damit die Gewinnrate und das Risiko-Rendite-Verhältnis der Strategie erheblich.

  4. Positionsgröße: Standardmäßig wird mit einer vollen Position gehandelt, wodurch die Kapitalnutzung maximiert und die Kapitaleffizienz verbessert wird.

  5. Breite Anwendbarkeit: Die Strategie-Logik kann leicht auf andere Vermögenswerte und Märkte übertragen werden und ist gut verallgemeinerbar.

Strategische Risiken

  1. Parameteranwendbarkeit: Die Strategieparameter werden auf der Grundlage der Merkmale des Bitcoin-Marktes festgelegt, und ihre Anwendbarkeit auf andere Märkte muss validiert werden und kann eine Parameteroptimierung für verschiedene Vermögenswerte erfordern.

  2. Trendbestimmung: Die Strategie stützt sich hauptsächlich auf technische Indikatoren wie EMAs und ATRs auf höherer Ebene, um Trends zu beurteilen, die bei der Erfassung der Marktbedingungen nicht so umfassend sind wie die Grundlagenanalyse und anfällig für Fehler an Marktturnpunkten sind.

  3. Stop-Loss-Risiko: Obwohl dynamische Stop-Losss das Risiko bis zu einem gewissen Grad kontrollieren können, können bei extremen Marktbedingungen (z. B. starke Rückgänge oder schnelle tiefe Schwankungen) immer noch signifikante Rückgänge auftreten.

  4. Gewinnpotenzial: Die Strategie funktioniert gut bei einseitigen Aufwärtstrends, fällt jedoch eher in das Dilemma häufiger Stop-Losses in Rangebound-Märkten, wodurch das Gesamtgewinnpotenzial möglicherweise eingeschränkt wird.

  5. Live-Performance: Während die Strategie im Backtesting gut abschneidet, wird der Live-Handel durch Faktoren wie Slippage und Provisionen beeinflusst, und die tatsächlichen Ergebnisse können sich von den theoretischen Renditen unterscheiden, was eine sorgfältige Bewertung erfordert.

Optimierungsrichtlinien

  1. Trendbestimmung: Es sollte in Betracht gezogen werden, mehr gleitende Durchschnitte, Volatilitätsindikatoren oder sogar Grunddaten auf höherer Ebene einzuführen, um die Genauigkeit und Zuverlässigkeit der Trendbestimmung zu verbessern.

  2. Dynamische Parameter: Stop-Loss-Positionen und ATR-Parameter können durch die Einführung dynamischer Anpassungsmechanismen im Zusammenhang mit Preis- oder Volatilitätsbedingungen weiter optimiert werden, um sich an unterschiedliche Marktzustände anzupassen.

  3. Positionsgröße: Dynamische Anpassung der Positionsgröße anhand von Indikatoren wie Trendstärke und Volatilität, Erhöhung der Positionsgröße, wenn der Trend stark ist, und Verringerung der Positionsgröße bei hoher Volatilität, um das Risiko-Rendite-Verhältnis zu verbessern.

  4. Lang/Kurz-Mechanismus: Einführung eines Short-Selling-Mechanismus auf Bärenmärkten zur Erweiterung der Anwendbarkeit und der potenziellen Rentabilität der Strategie.

  5. Strategie-Kombination: Diese Strategie mit anderen Strategien (wie z.B. Mittelumkehrung) kombinieren, um die Stärken des jeweils anderen zu ergänzen und die Stabilität und Rentabilität der Strategie zu verbessern.

Zusammenfassung der Strategie

Die Bitcoin Momentum Trailing Stop Strategie ist eine einfache und effektive Momentum-Strategie, die die starken Aufwärtstrends von Bitcoin mithilfe höherer gleitender Durchschnitte und ATR-Indikatoren erfasst und gleichzeitig das Abwärtsrisiko durch dynamisch angepasste Stop-Losses kontrolliert. Diese Strategie kann als grundlegende Vorlage dienen und Anleger können sie anhand ihrer eigenen Bedürfnisse und Erfahrungen in Bereichen wie Trendbestimmung, Parameteroptimierung, Positionsmanagement und Long/Short-Mechanismen weiter verfeinern oder mit anderen Strategien kombinieren, um ein höheres Risiko-Rendite-Verhältnis zu erzielen.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

Mehr