Dual Trend Lines Intelligente Nachverfolgung der BTC-Investitionsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-22 15:18:53
Tags:

img

Übersicht

Diese Strategie wird hauptsächlich für die automatisierte langfristige Investition in BTC verwendet. Sie verwendet das Crossover von doppelter EMA und LSMA, um die Trendrichtung zu bestimmen, und verwendet den ATR-Indikator, um einen dynamischen Stop-Loss zu berechnen, um den bullischen BTC-Trend effektiv zu verfolgen.

Strategie Logik

  1. Die EMA wird mit einem 25-Perioden-EMA und einem 100-Perioden-LSMA für die Erstellung eines doppelten gleitenden Durchschnitts verwendet.

  2. Wenn die schnelle EMA über die langsame LSMA überschreitet, wird festgestellt, dass der Aufwärtstrend noch intakt ist und Long-Positionen aufgenommen werden.

  3. Nach dem Nehmen von Long-Positionen passt sich der mit dem ATR-Indikator berechnete dynamische Stop-Loss an, um den Aufwärtstrend von BTC effektiv zu verfolgen. Insbesondere ist der Anfangspunkt der Stop-Loss-Linie der Einstiegspreis. Danach wird jede Anpassung um einen festen Prozentsatz der ATR-Amplitude nach oben gleiten.

  4. Die Stop-Loss-Linie kann effektiv den durch den BTC-Obertrend erzielten schwimmenden Gewinn sperren und gleichzeitig verhindern, dass sich der Stop-Loss-Punkt zu nahe am letzten Preis befindet, um häufigen Stop-Loss zu vermeiden.

Analyse der Vorteile

  1. Die Verwendung von zwei gleitenden Durchschnitten zur Bestimmung des Trends ist zuverlässiger und kann falsche Signale wirksam verhindern.

  2. Der ATR-Dynamic Trailing Stop Loss kann die meisten Gewinne erzielen und dabei häufige kleine Stop-Losses vermeiden.

  3. Unabhängig davon, ob der Aufwärtstrend endet oder nicht, wird die Position, solange der gleitende Durchschnitt ein Ausstiegssignal gibt, gestoppt, um Risiken zu kontrollieren.

  4. Die Strategie verfügt über einen hohen Grad an Automatisierung ohne manuelles Eingreifen, was sie für den langfristigen Live-Handel geeignet macht.

Risikoanalyse

  1. Ich muss immer noch auf plötzliche wichtige Nachrichten achten, um riesige Schlupfverluste zu vermeiden.

  2. Obwohl die Kombination von zwei gleitenden Durchschnitten falsche Signale reduzieren kann, ist es in den Bereichsmärkten immer noch schwierig, sie vollständig zu vermeiden.

  3. Eine falsche Einstellung der ATR-Parameter kann sich auch auf den Stop-Loss-Effekt auswirken.

  4. Unvernünftige gleitende Durchschnittsperioden oder eine nicht rechtzeitige Aktualisierung können zu Signalverzögerungen führen.

  5. Sicherstellung der Stabilität des Servers, um abnormale Abstürze zu vermeiden, die den automatisierten Handel unterbrechen.

Optimierungsrichtlinien

  1. Es können weitere Indikatoren wie Bollinger Bands hinzugefügt werden, um den Trend zu bestimmen.

  2. Die Berechnungsmethode des dynamischen Stoppverlustes ATR kann ebenfalls angepasst und optimiert werden, um den Stoppverlust reibungsloser zu gestalten.

  3. Um sich vor den Auswirkungen wichtiger Nachrichten zu schützen, können auf Handelsvolumen basierende Alarmmechanismen und Intraday-Rotationsfunktionen hinzugefügt werden.

  4. Die Parameter variieren je nach Münze. Mehr historische Daten können verwendet werden, um personalisierte Parameter zu trainieren.

Zusammenfassung

Insgesamt ist dies ein sehr praktisches automatisiertes BTC-Investitionsprogramm. Die Verwendung von dualen EMAs zur Bestimmung des Haupttrends ist sehr zuverlässig. Mit ATR-Stop Loss kann es anständige Gewinne erzielen und die Gültigkeitsdauer kann sehr lang sein. Da die Parameter weiterhin optimiert werden, gibt es noch viel Raum für Verbesserungen bei der Leistung dieser Strategie. Es lohnt sich, den Live-Handel zu überprüfen.


// 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")

Mehr