
Die Hauptidee der Strategie besteht darin, die niedrigen Durchschnittspreise nach dem Ende eines kurzfristigen Rückgangs regelmäßig zu verfolgen. Konkret identifiziert die Strategie am Ende des Monats, wann ein kurzfristiger Rückgang endet, und fügt daher regelmäßig Positionen hinzu. Die Position wird bei der letzten K-Linie abgeschlossen und die Position wird gelöscht.
Das sind die grundlegenden Geschäftsprozesse und Prinzipien der Strategie. Es ist erwähnenswert, dass die Strategie die Fundtracking von 1000 US-Dollar pro Monat als Standard verwendet und im Backtest auf 33 Monate erweitert wird, was insgesamt 33.000 US-Dollar beträgt.
Der größte Vorteil dieser Strategie liegt in der Möglichkeit, regelmäßig Positionen an niedrigen Niveaus aufzubauen, um langfristig günstigere Kaufkosten zu erzielen und eine höhere Rendite zu erzielen. Die Verwendung des MACD-Indikators zur Identifizierung von kurzfristigen Kaufpunkten ist außerdem zuverlässig und klar und führt nicht zu einer Sackgasse, was auch zu einem gewissen Grad Verluste verhindern kann.
Insgesamt ist dies eine kostengünstige Strategie, die sich besser für die Inhaber von mittleren und langen Linien eignet, die regelmäßig in großen Mengen kaufen, um zufriedenstellende Renditen zu erzielen.
Das Hauptrisiko der Strategie besteht darin, dass die Endpunkte für den kurzfristigen Rückgang nicht genau ermittelt werden können. Die MACD-Indikatoren können den Zeitpunkt für das Ende des Rückgangs verzögern, was dazu führt, dass die Kosten nicht optimal eingekauft werden können. Zusätzlich erhöht die Kapitaldifferenzierung die Betriebskosten.
Es kann in Betracht gezogen werden, weitere Indikatoren für Trends, wie Brinline, KDJ usw., einzusetzen, die den Zeitpunkt der Umkehrung vorwegnehmen können. Gleichzeitig kann die Menge der monatlichen Investitionen optimiert werden, um die Auswirkungen der Betriebskosten auf die Erträge zu verringern.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Optimierung der Zeitspanne für die regelmäßige Verfolgung, z. B. Umstellung auf eine regelmäßige Verfolgung alle zwei Monate, um zu häufige Transaktionen zu reduzieren.
In Kombination mit weiteren Indikatoren, die den Zeitpunkt für das Ende eines kurzfristigen Rückgangs bestimmen, wird der Kaufpunkt näher an den Tiefpunkt gebracht.
Das ist eine Optimierung der monatlichen Investitionssumme, um die optimale Konfiguration zu finden.
Versuchen Sie, eine Stop-Loss-Strategie einzubeziehen, um zu verhindern, dass ein zu tiefer Fall zu großen Verlusten führt.
Test der Einwirkung verschiedener Haltungszyklen auf die Erträge, um die optimale Anzahl von Haltungstagen zu finden.
Die Strategie, die regelmäßig die Gesamtkonzepte der Low-Valley-Price-Strategie verfolgt, ist klar und verständlich. Durch die regelmäßige Ergänzung und die Kombination von kurzfristigen Urteilen können günstigere Kostenpreise erzielt werden. Die Strategie bietet einen stabilen Ertrag für Investoren, die nach langfristiger Wertinvestition suchen.
/*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)