Anlagestrategie mit intelligenter Verfolgung des gleitenden Durchschnitts mit doppeltem Trend


Erstellungsdatum: 2023-11-22 15:18:53 zuletzt geändert: 2023-11-22 15:18:53
Kopie: 0 Klicks: 621
1
konzentrieren Sie sich auf
1617
Anhänger

Anlagestrategie mit intelligenter Verfolgung des gleitenden Durchschnitts mit doppeltem Trend

Überblick

Die Strategie wird hauptsächlich für die Automatisierung von Long-Line-Investitionen in BTC eingesetzt. Die Richtung des Trends wird durch die Kreuzung von Doppel-EMA und LSMA beurteilt und die dynamische Stop-Loss-Berechnung mit dem ATR-Indikator erfolgt, um den Multi-Head-Trend von BTC effektiv zu verfolgen.

Strategieprinzip

  1. Die 25er EMA und die 100er LSMA bilden eine Doppel-Gleichgewichtlinie, deren Kreuzung verwendet wird, um die Markttrends zu bestimmen. Die EMA reagiert schnell auf Preisänderungen, die LSMA-Wellen brechen falsch durch.

  2. Wenn ein schneller EMA über einen langsamen LSMA durchläuft, wird er als noch in einem mehrköpfigen Trend beurteilt. Umgekehrt, wenn ein schneller EMA unter einem langsamen LSMA durchläuft, wird er als in den Hohlkopf eingegeben und ist dann ausgeglichen.

  3. Nach dem Eintritt in die Mehrzahl wird der dynamische Stop-Loss, der mit dem ATR-Indikator berechnet wird, kontinuierlich angepasst, um die Aufwärtsentwicklung von BTC effektiv zu verfolgen. Insbesondere beginnt die Stop-Line mit dem Eintrittspreis, danach wird bei jeder Anpassung der ATR-Wert des festen Prozentsatzes nach oben geschoben.

  4. Die Stop-Line ist in der Lage, die Erhöhung des BTC-Anstiegs effektiv zu blockieren und zu verhindern, dass die Stop-Line zu nah am aktuellen Preis zu häufigen Stopps führt. Darüber hinaus werden zwei unterschiedlich proportionale bewegliche Stopps in der Strategie festgelegt, um mehr Gewinne zu blockieren.

Analyse der Stärken

  1. Die Verwendung von doppelter Gleichheitslinie zur Bestimmung von Trends ist zuverlässiger und wirksam gegen die Erzeugung falscher Signale.

  2. ATR-Dynamic Stop-Tracking ermöglicht es, einen Großteil der Gewinne zu sichern und häufige, kleinere Stop-Losses zu vermeiden.

  3. Der Verlust des Knoten wird gestoppt, wenn ein Ausgangssignal aus der Gleichlinie gesendet wird, unabhängig davon, ob der Mehrheitsgeschäft beendet ist oder nicht.

  4. Der hohe Automatisierungsgrad, der keine menschliche Intervention erfordert, erleichtert den Betrieb der Festplatte über einen längeren Zeitraum.

Risikoanalyse

  1. Es ist wichtig, sich auf wichtige Ereignisse zu konzentrieren, um einen großen Verlust zu vermeiden.

  2. Obwohl die Kombination von zwei Gleichlinien das Fehlsignal reduzieren kann, ist es schwierig, sie bei Erschütterungen zu vermeiden.

  3. Die falsche Einstellung der ATR-Parameter beeinflusst auch die Stop-Loss-Effekte, die je nach Sorte angepasst werden müssen.

  4. Unvernünftige Durchschnittszyklen oder die fehlende zeitnahe Aktualisierung können auch zu Signalverzögerungen führen.

  5. Sicherstellung der Stabilität der Server und Vermeidung von Ausfällen, die zu automatischen Transaktionsunterbrechungen führen.

Optimierungsrichtung

  1. Sie können versuchen, weitere Indikatoren zu verwenden, um Trends zu beurteilen, wie z. B. Brin-Bänder. Oder Sie können mit einem maschinellen Lernmodell versuchen, die Preise vorherzusagen.

  2. Die Berechnungsmethode für ATR-Dynamic Stop Loss kann angepasst und optimiert werden, um den Stop Loss zu erleichtern.

  3. Das Feature-Alarmsystem kann auf Basis von Transaktionsvolumen und Tageswechsel hinzugefügt werden, um einen Aufschlag auf wichtige Nachrichten zu verhindern.

  4. Die Parameter sind unterschiedlich und können mit mehr historischen Daten trainiert werden, um die individuellen Parameter zu erstellen.

Zusammenfassen

Diese Strategie ist insgesamt eine sehr praktische BTC-Automatik-Investitionsprogramm. Die Verwendung von doppelten EMAs, um den großen Trend zu bestimmen, ist sehr zuverlässig, ergänzt durch ATR-Stop-Loss-Verfolgung, kann sowohl eine gute Gewinn, die Gültigkeitsdauer kann auch sehr lang gezogen werden. Mit der ständigen Optimierung der Parameter Anpassung, die Wirksamkeit dieser Strategie hat noch viel Raum zu verbessern, ist es sehr lohnenswert, zu testen.

Strategiequellcode
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading

//@version=4
strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)

////////////  Functions

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

//TEMA
TEMA(series, length) =>
    if (length > 0)
        ema1 = ema(series, length)
        ema2 = ema(ema1, length)
        ema3 = ema(ema2, length)
        (3 * ema1) - (3 * ema2) + ema3
    else
        na
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

///////////////////////////////////////////////////
/// INDICATORS
source=close

/// TREND
trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])

trend_type1_length=input(25, "Length of the First Trend Line")
trend_type2_length=input(100, "Length of the Second Trend Line")

leadLine1 = if trend_type1=="LSMA"
    linreg(close, trend_type1_length, 0)
else if trend_type1=="TEMA"
    TEMA(close,trend_type1_length)
else if trend_type1 =="EMA"
    ema(close,trend_type1_length)
else
    sma(close,trend_type1_length)

leadLine2 = if trend_type2=="LSMA"
    linreg(close, trend_type2_length, 0)
else if trend_type2=="TEMA"
    TEMA(close,trend_type2_length)
else if trend_type2 =="EMA"
    ema(close,trend_type2_length)
else
    sma(close,trend_type2_length)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=crossover(leadLine1,leadLine2)
DT=crossunder(leadLine1,leadLine2)

// TP/ SL/  FOR LONG
// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(20, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_input = input(5, title='stop loss in %', step=0.1)/100
long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input)

// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(8,"ATR period", minval=1, step=1)

// Strategy
//LONG STRATEGY CONDITION

SC = input(close, "Source", input.source)
SL1 = multiplier * Atr(ATR_period)  // Stop Loss
Trail1 = 0.0
Trail1 :=  iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))
Trail1_high=highest(Trail1,50)

// iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1),

entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close
exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level

///// BACKTEST PERIOD ///////
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    if tradeType=="LONG" or tradeType=="BOTH"
        if strategy.position_size == 0 or strategy.position_size > 0
            strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long)
            strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1)
            strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2)
            strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" )


// LONG POSITION

plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")