VWMA-ADX Bitcoin Long-Strategie basierend auf Momentum und Trend

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Erstellungsdatum: 2024-04-03 17:47:49 zuletzt geändert: 2024-04-03 17:47:49
Kopie: 8 Klicks: 951
1
konzentrieren Sie sich auf
1617
Anhänger

VWMA-ADX Bitcoin Long-Strategie basierend auf Momentum und Trend

Überblick

Die Strategie nutzt mehrere Moving Averages (VWMA), Average Directional Indices (ADX) und Moving Indicators (DMI), um mehrere Gelegenheiten im Bitcoin-Markt zu erfassen. Durch die Kombination mehrerer technischer Indikatoren wie Preisbewegung, Trendrichtung und Handelsvolumen, zielt die Strategie darauf ab, Eintrittspunkte zu finden, an denen ein starker, dynamischer Aufwärtstrend besteht, während das Risiko streng kontrolliert wird.

Strategieprinzip

  1. Die VWMA am 9. und am 14. Tag wird verwendet, um den Mehrkopftrend zu beurteilen, der ein Mehrkopfsignal erzeugt, wenn die kurzfristige Durchschnittslinie die langfristige Durchschnittslinie durchbricht.
  2. Die Einführung einer Adaptive Meanline, die aus einem 89-Tage-Höchst- und Tiefstpreis-VWMA aufgebaut ist, als Trendfilter, der nur dann berücksichtigt wird, wenn der Schlusskurs oder der Eröffnungskurs über dieser Meanline liegt.
  3. Der Trend wird nur dann als stark genug angesehen, wenn der ADX größer als 18 ist und die Differenz zwischen +DI und -DI größer als 15 ist.
  4. Filtern Sie mit der Perzentsatzfunktion der Transaktionsmenge eine Balkenlinie, in der die Transaktionsmenge zwischen 60% und 95% liegt, und vermeiden Sie Zeiten mit zu niedrigem Transaktionsvolumen.
  5. Die Stop-Loss-Einstellungen liegen zwischen 0,96 und 0,99 mal höher als die Höhe der vorherigen K-Linie und sinken mit zunehmendem Zeitrahmen, um das Risiko zu kontrollieren.
  6. Platzierung bei Erreichen der vorgegebenen Haltedauer oder bei einem Preisrückgang unterhalb der Selbstanpassungsmittellinie.

Analyse der Stärken

  1. In Kombination mit mehreren technischen Indikatoren, die die Marktlage in mehreren Dimensionen wie Trends, Dynamik und Handelsvolumen beurteilen, sind die Signale zuverlässiger.
  2. Die automatische Durchschnittslinie und die Filtermechanismen für die Transaktionsmenge filtern die falschen Signale effektiv ab und reduzieren die Anzahl der ungültigen Transaktionen.
  3. Strenge Stop-Loss-Einstellungen und eine begrenzte Laufzeit der Positionen reduzieren die Risikobereitschaft der Strategie.
  4. Der Code ist modular gestaltet, gut lesbar und wartbar, so dass er weiter optimiert und erweitert werden kann.

Risikoanalyse

  1. Diese Strategie kann mehr falsche Signale erzeugen, wenn der Markt in Schwankungen oder unklaren Trends steckt.
  2. Die Stop-Loss-Position ist relativ nahe und kann bei starken Schwankungen des Marktes zu früh ausgelöst werden, was zu einer Vergrößerung der Verluste führt.
  3. Die fehlende Berücksichtigung der makroökonomischen Situation und der bedeutenden Ereignisse könnte im Angesicht der “Schwarzen Schwämmen” fehlgeschlagen sein.
  4. Die Parameter sind relativ fest eingestellt, es fehlt an Anpassungsfähigkeit und die Performance kann in verschiedenen Marktumgebungen instabil sein.

Optimierungsrichtung

  1. Die Einführung von mehr Indikatoren, die die Marktumgebung abbilden können, wie der Relative Strength Index (RSI) und die Brin-Band, verbessert die Zuverlässigkeit der Signale.
  2. Dynamische Optimierung von Stop-Loss-Positionen, z. B. durch Verwendung von ATR oder Stop-Percentage, um auf unterschiedliche Marktschwankungen zu reagieren.
  3. In Verbindung mit makroökonomischen Daten und Stimmungsanalysen wurde das Risikokontrollmodul der Strategie verbessert.
  4. Automatische Optimierung der Parameter durch Machine Learning-Algorithmen, um die Anpassungsfähigkeit und Stabilität der Strategie zu verbessern.

Zusammenfassen

Die VWMA-ADX-Bitcoin-Multi-Header-Strategie ist in der Lage, durch die integrierte Berücksichtigung von mehreren technischen Indikatoren wie Preistrends, Dynamik, Handelsvolumen und anderen, die Aufwärtschancen in den Bitcoin-Markt zu erfassen. Die strengen Risikokontrollen und die klaren Pläne ermöglichen eine bessere Risikokontrolle. Die Strategie hat jedoch auch einige Einschränkungen, wie die mangelnde Anpassungsfähigkeit an Veränderungen der Marktumgebung und die Optimierung der Stop-loss-Strategie.

Strategiequellcode
/*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)