VWMA-ADX Momentum und trendbasierte Bitcoin Long Strategie

Schriftsteller:ChaoZhang, Datum: 2024-04-03 17:47:49
Tags:VWMAADXDMISMAEMARMAWMAHMASMMA

img

Übersicht

Diese Strategie nutzt mehrere gleitende Durchschnitte (VWMA), den Durchschnittsrichtungsindex (ADX) und den Richtungsbewegungsindicator (DMI), um lange Chancen auf dem Bitcoin-Markt zu erfassen.

Strategieprinzipien

  1. Verwenden Sie den 9-Tage- und 14-Tage-VWMA, um den langen Trend zu bestimmen.
  2. Einführung eines anpassungsfähigen gleitenden Durchschnitts, der aus dem 89-tägigen Höchst- und Tiefstpreis VWMA als Trendfilter konstruiert wurde.
  3. Der Trend wird nur dann als ausreichend stark angesehen, wenn der ADX größer als 18 und die Differenz zwischen +DI und -DI größer als 15 ist.
  4. Filtern Sie Bars mit einem Handelsvolumen zwischen 60% und 95% mit Hilfe der Volumenperzentilfunktion aus, um Perioden mit geringem Handelsvolumen zu vermeiden.
  5. Stellen Sie den Stop-Loss-Level auf 0,96 bis 0,99-fache des vorherigen Candles-Hochs ein und verringern Sie diesen mit zunehmendem Zeitrahmen, um das Risiko zu kontrollieren.
  6. Die Position wird geschlossen, wenn die vordefinierte Haltezeit erreicht ist oder der Kurs unter den adaptiven gleitenden Durchschnitt fällt.

Analyse der Vorteile

  1. Durch die Kombination mehrerer technischer Indikatoren bewertet die Strategie die Marktbedingungen aus verschiedenen Dimensionen wie Trend, Dynamik und Handelsvolumen, wodurch die Signale zuverlässiger werden.
  2. Der adaptive gleitende Durchschnitt und der Filtermechanismus für das Handelsvolumen filtern falsche Signale effektiv aus und reduzieren ungültige Trades.
  3. Strenge Stop-Loss-Einstellungen und Haltezeitlimits reduzieren das Risikoposition der Strategie erheblich.
  4. Das modulare Design des Codes verbessert die Lesbarkeit und Wartungsfähigkeit und erleichtert eine weitere Optimierung und Erweiterung.

Risikoanalyse

  1. Wenn der Markt schwankt oder der Trend unklar ist, kann die Strategie mehr falsche Signale erzeugen.
  2. Die Stop-Loss-Level sind relativ eng, was zu vorzeitigen Stop-Outs führen und zu erhöhten Verlusten bei großen Marktschwankungen führen kann.
  3. Die Strategie berücksichtigt nicht die makroökonomischen Bedingungen und bedeutenden Ereignisse und kann angesichts von "schwarzen Schwanen"-Ereignissen scheitern.
  4. Die Parameter-Einstellungen sind relativ fest und fehlen anpassungsfähig, was zu instabilen Leistungen in verschiedenen Marktumgebungen führen kann.

Optimierungsrichtlinien

  1. Einführung mehrer Indikatoren, die Marktbedingungen erfassen können, wie zum Beispiel der Relative Strength Index (RSI) und Bollinger Bands, um die Signalzuverlässigkeit zu verbessern.
  2. Die Anpassung an die unterschiedlichen Marktvolatilitätsbedingungen erfolgt durch dynamische Optimierung des Stop-Loss-Niveaus, beispielsweise durch Verwendung des durchschnittlichen wahren Bereichs (ATR) oder des prozentualen Stop-Loss.
  3. Verbesserung des Risikokontrollmoduls der Strategie durch Einbeziehung makroökonomischer Daten und Stimmungsanalysen.
  4. Nutzung von Algorithmen des maschinellen Lernens zur automatischen Optimierung von Parametern, wodurch die Anpassungsfähigkeit und Stabilität der Strategie verbessert werden.

Zusammenfassung

Die VWMA-ADX Bitcoin Long Strategie erfasst effektiv Aufwärtschancen auf dem Bitcoin-Markt, indem sie Preistrends, Dynamik, Handelsvolumen und andere technische Indikatoren umfassend berücksichtigt. Gleichzeitig sorgen strenge Risikokontrollmaßnahmen und klare Ausstiegsbedingungen dafür, dass das Risiko der Strategie gut kontrolliert wird. Die Strategie hat jedoch auch einige Einschränkungen, wie eine unzureichende Anpassungsfähigkeit an sich ändernde Marktumgebungen und die Notwendigkeit optimierter Stop-Loss-Strategien. In Zukunft können Verbesserungen in Bezug auf Signalzuverlässigkeit, Risikokontrolle und Parameteroptimierung vorgenommen werden, um die Robustheit und Rentabilität der Bitcoin-Strategie weiter zu verbessern. Insgesamt bietet die VWMA-ADX Long Strategy Anlegern einen systematischen Handelsansatz, der auf Dynamik und Trend basiert, der sich weiter zu erforschen und zu verfeinern lohnt.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-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/
// © Q_D_Nam_N_96

//@version=5
strategy("Long BTC Strategy", overlay=true, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, initial_capital = 1000, currency = currency.USD)

Volume_Quartile(vol) =>
    qvol1 = ta.percentile_linear_interpolation(vol, 60,15)
    qvol2 = ta.percentile_linear_interpolation(vol, 60,95)
    vol > qvol1 and vol < qvol2

smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? ta.sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
        "HMA" => ta.hma(source, length)
        "SMMA" => smma(source, length)

DMI(len, lensig) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)+11
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)-11
    sum = plus + minus
    adx = 100 * ta.vwma(math.abs(plus - minus-11) / (sum == 0 ? 1 : sum), lensig)

    [adx, plus, minus]

cond1 = Volume_Quartile(volume*hlcc4)

ma1 = ma(close,9, "VWMA")
// plot(ma1, color = color.blue)
ma2 = ma(close,14, "VWMA")
// plot(ma2, color = color.orange)

n = switch timeframe.period
    "240" => 0.997
    => 0.995

ma3 = (0.1*ma(ta.highest(close,89),89, "VWMA") + 
     0.9*ma(ta.lowest(close,89),89, "VWMA"))*n

plot(ma3, color = color.white)

[adx, plus, minus] = DMI(7, 10)


cond2 = adx > 18 and plus - math.abs(minus) > 15

var int count = 0

if barstate.isconfirmed and strategy.position_size != 0
    count += 1
else
    count := 0

p_roc = 0
if timeframe.period == '240'
    p_roc := 14
else
    p_roc := 10

longCondition = ta.crossover(ma1, ma2) and (close > open ? close > ma3 : open > ma3) and ((ma3 - ma3[1])*100/ma3[1] >= -0.2) and ((close-close[p_roc])*100/close[p_roc] > -2.0)
float alpha = 0.0
float sl_src = high[1]
if (longCondition and cond1 and cond2 and strategy.position_size == 0)
    strategy.entry("buy", strategy.long)
    if timeframe.period == '240'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+5, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '30'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '45'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '60'
        alpha := 0.98
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '120'
        alpha := 0.97
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '180'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == 'D'
        alpha := 0.95
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else 
        alpha := 0.93
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)

period = switch timeframe.period
    "240" => 90
    "180" => 59
    "120" => 35
    "30" => 64
    "45" => 40
    "60" => 66
    "D" => 22
    => 64

if (count > period or close < ma3)
    strategy.close('buy', immediately = true) 

Verwandt

Mehr

- Was ist los?Ich habe mir vorgestellt, dass ich das nicht tun kann.