Durchschnittswert der Dollarkosten nach Abwärtstrendstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-17 17.57:58
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, die niedrigen Durchschnittspreise nach Beendigung von kurzfristigen Rückgängen regelmäßig zu verfolgen, insbesondere das Ende eines kurzfristigen Rückgangs am Ende eines jeden Monats zu identifizieren, um regelmäßig Positionen hinzuzufügen und gleichzeitig Positionen zu löschen, wenn die letzte K-Linie geschlossen wird.

Strategieprinzip

  1. Regelmäßiges Beurteilungssignal: Nach 24*30 K-Linien (die einen Monat darstellen) wird festgestellt, dass der regelmäßige Beurteilungspunkt erreicht ist und das erste Signal ausgegeben wird.

  2. Ende des kurzfristigen Rückgangs: Verwenden Sie den MACD-Indikator, um den Trend zu bestimmen.

  3. Eintrittsregeln: Wenn das reguläre Tracking-Signal und das Ende des kurzfristigen Abwärtstrends gleichzeitig ausgelöst werden, wird ein Tracking-Signal freigegeben und Long-Positionen eröffnet.

  4. Ausgangsregeln: Wenn die letzte K-Linie geschlossen wird, räumen Sie alle Positionen.

Das ist der grundlegende Handelsfluss und die Grundsätze der Strategie. Es ist erwähnenswert, dass die Strategie standardmäßig 1000 USD pro Monat in Backtests verfolgt, die auf 33 Monate erweitert werden, dh eine Gesamtinvestition von 33.000 USD.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie regelmäßig Positionen auf niedrigen Niveaus aufbauen kann. Aus langfristiger Sicht kann sie einen relativ erschwinglichen durchschnittlichen Kostenpreis erhalten, um hohe Renditen zu generieren. Darüber hinaus ist die Verwendung des MACD-Indikators zur Identifizierung von kurzfristigen Kaufpunkten auch ziemlich zuverlässig und klar, was zu einem gewissen Grad verhindern kann, dass man in eine Sackgasse gerät, und dies kann auch zu einem gewissen Grad Verluste vermeiden.

Im Allgemeinen handelt es sich um eine Kostendurchschnittsstrategie, die für mittel- und langfristige Inhaber besser geeignet ist, regelmäßig Chargen zu kaufen, um eine zufriedenstellende Rendite zu erzielen.

Risiken und Lösungen

Das Hauptrisiko der Strategie besteht in der Unfähigkeit, das Ende des kurzfristigen Rückgangs genau zu bestimmen. Das Urteil des MACD-Indikators über das Ende des Rückgangs kann verzögert sein, was dazu führen kann, dass der Einstieg nicht am optimalen Punkt erfolgt. Darüber hinaus erhöht die verteilte Investition von Mitteln auch die Betriebskosten.

Es ist wichtig, dass Sie mehr Indikatoren hinzufügen, um Trends zu bestimmen, z. B. Bollinger Bands, KDJ usw. Diese Indikatoren können den Umkehrzeitpunkt im Voraus vorhersagen. Gleichzeitig kann die Menge der monatlich investierten Mittel optimiert werden, um die Auswirkungen der Betriebskosten auf die Rendite zu reduzieren.

Optimierungsrichtlinien

Die Strategie kann in folgenden Richtungen weiter optimiert werden:

  1. Optimieren Sie den regelmäßigen Nachverfolgungszyklus, z. B. alle zwei Monate, um das Problem des übermäßig häufigen Handels zu reduzieren.

  2. Mehr Indikatoren werden eingesetzt, um das Ende eines kurzfristigen Rückgangs zu bestimmen und den Einstiegspunkt näher an den Tiefpunkt zu bringen.

  3. Optimieren Sie den monatlich investierten Betrag, um die optimale Konfiguration zu finden.

  4. Versuchen Sie, Stop-Loss-Strategien einzuführen, um übermäßige Verluste zu vermeiden, wenn die Preise zu tief fallen.

  5. Testen Sie die Auswirkungen verschiedener Haltungszeiten auf die Rendite, um die optimalen Haltungstage zu finden.

Zusammenfassung

Die Gesamtidee dieser Dollar-Kostendurchschnittsverteilung nach einer Abwärtstrendstrategie ist klar und leicht zu verstehen. Durch die Kombination von regelmäßiger Nachfüllung und kurzfristigem Urteil kann ein erschwinglicherer durchschnittlicher Kostpreis erzielt werden. Mittelfristige und langfristige Bestände dieser Strategie können stabile Renditen erzielen und eignen sich für Anleger, die einen langfristigen Anlagewert anstreben. Gleichzeitig gibt es einige Richtungen, die optimiert werden können, um die Strategie weiter zu verbessern, damit ihre Leistung ein Niveau nach oben bewegen kann.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © BHD_Trade_Bot

// @version=5
strategy(
 shorttitle            = 'DCA After Downtrend v2',
 title                 = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = false,
 calc_on_order_fills   = false,
 use_bar_magnifier     = false,
 pyramiding            = 1000,
 initial_capital       = 0,
 default_qty_type      = strategy.cash,
 default_qty_value     = 1000,
 commission_type       = strategy.commission.percent,
 commission_value      = 1.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5

bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
    nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30

// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar

if CLOSE_CONDITIONS
    strategy.close_all()



// Draw
colorRange(src) =>
    if src > bhd_upper5
        color.rgb(255,0,0)
    else if src > bhd_upper4
        color.rgb(255,150,0)
    else if src > bhd_upper3
        color.rgb(255,200,0)
    else if src > bhd_upper2
        color.rgb(100,255,0)
    else if src > bhd_upper
        color.rgb(0,255,100)
    else if src > ema200
        color.rgb(0,255,150)
    else if src > bhd_lower
        color.rgb(0,200,255)
    else if src > bhd_lower2
        color.rgb(0,150,255)
    else if src > bhd_lower3
        color.rgb(0,100,255)
    else if src > bhd_lower4
        color.rgb(0,50,255)
    else
        color.rgb(0,0,255)
        
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))

bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))

plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)


Mehr