
Bei dieser Strategie handelt es sich um eine Grid-Trading-Strategie, die Positionen je nach Ausmaß des Preisrückgangs erhöht und Positionen schließt, wenn ein festes Gewinnziel erreicht wird. Die Kernlogik der Strategie besteht darin, zu kaufen, wenn der Markt in einen voreingestellten Bereich fällt, und die Gesamtposition zu schließen, wenn der Preis wieder ansteigt, um den Zielgewinn zu erreichen, und durch ständige Wiederholung dieses Prozesses Gewinne zu erzielen. Diese Strategie eignet sich besonders dazu, kurzfristige Erholungschancen in volatilen Märkten zu nutzen.
Die Strategie verwendet einen zusammengesetzten Mechanismus aus Grid-Trading und gezielter Gewinnmitnahme:
Dies ist eine einfache, aber praktische Grid-Trading-Strategie, die Positionen stapelweise entsprechend der voreingestellten Rückgangsspanne aufbaut und alle Positionen schließt, wenn der Zielgewinn erreicht ist. Der Hauptvorteil der Strategie liegt in der Sicherheit ihrer Umsetzung und der Risikostreuung, allerdings sollte bei ihrer Anwendung auf die Auswahl des Marktumfelds und die Optimierung der Parameter geachtet werden. Es gibt noch viel Raum für die Optimierung der Strategie durch das Hinzufügen dynamischer Stop-Loss, die Verbesserung des Positionsmanagements usw. Beim Einsatz im realen Handel empfiehlt es sich, zunächst ausreichende Backtests durchzuführen und die Parameter basierend auf den tatsächlichen Marktbedingungen anzupassen.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy Down 5%, Sell at 5% Profit", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)
// Inputs
initial_date = input(timestamp("2024-01-01 00:00:00"), title="Initial Purchase Date")
profit_target = input.float(5.0, title="Profit Target (%)", minval=0.1) // Target profit percentage
rebuy_drop = input.float(5.0, title="Rebuy Drop (%)", minval=0.1) // Drop percentage to rebuy
// Variables
var float initial_price = na // Initial purchase price
var int entries = 0 // Count of entries
var float total_profit = 0 // Cumulative profit
var bool active_trade = false // Whether an active trade exists
// Entry Condition: Buy on or after the initial date
if not active_trade
initial_price := close
strategy.entry("Buy", strategy.long)
entries += 1
active_trade := true
// Rebuy Condition: Buy if price drops 5% or more from the initial price
rebuy_price = initial_price * (1 - rebuy_drop / 100)
if active_trade and close <= rebuy_price
strategy.entry("Rebuy", strategy.long)
entries += 1
// Exit Condition: Sell if the price gives a 5% profit on the initial investment
target_price = initial_price * (1 + profit_target / 100)
if active_trade and close >= target_price
strategy.close_all(comment="Profit Target Hit")
active_trade := false
total_profit += profit_target
// Display information on the chart
plotshape(series=close >= target_price, title="Target Hit", style=shape.labelup, location=location.absolute, color=color.green, text="Sell")
plotshape(series=close <= rebuy_price, title="Rebuy", style=shape.labeldown, location=location.absolute, color=color.red, text="Rebuy")
// Draw statistics on the chart
var label stats_label = na
if (na(stats_label))
stats_label := label.new(x=bar_index, y=close, text="", style=label.style_none, size=size.small)
label.set_xy(stats_label, bar_index, close)
label.set_text(stats_label, "Entries: " + str.tostring(entries) + "\nTotal Profit: " + str.tostring(total_profit, "#.##") + "%")