Dies ist eine Bitcoin-quantitative Handelsstrategie, die auf Dual Take Profit, Dual Stop Loss und Trailing Stop Loss basiert. Es verwendet EMA und WMA Crossover als Einstiegssignale, nimmt Dual Take Profit und Dual Stop Loss Risikomanagement-Methodik an und wendet Trailing Stop Loss an, nachdem der erste Take Profit erreicht wurde, um teilweise Gewinne zu erzielen, während größere Gewinne angestrebt werden.
Lange Einreise, wenn die EMA von unten über die WMA geht, und kurze Einreise, wenn die EMA von oben unter die WMA geht.
Auf der Gewinnseite gibt es zwei Take-Profit-Ziele. Der erste Take-Profit wird auf 20 Pips über dem Einstiegspreis festgelegt, und der zweite Take-Profit wird auf 40 Pips über dem Einstiegspreis festgelegt.
Auf der Stop-Loss-Seite gibt es auch zwei Stop-Losses. Der erste Stop-Loss wird auf 20 Pips unter dem Einstiegspreis eingestellt, und der zweite Stop-Loss wird auf den Einstiegspreis selbst eingestellt.
Wenn der erste Take-Profit ausgelöst wird, wird 50% der Position geschlossen, und der Stop-Loss wird zum Einstiegspreis verfolgt, um Gewinne zu erzielen, während größere Gewinne aus dem zweiten Take-Profit-Ziel gesucht werden.
Daher können für jeden Handel drei mögliche Ergebnisse erzielt werden:
Der größte Vorteil dieser Strategie liegt in der Risikomanagement-Methodik. Durch das Festlegen von doppelten Take-Gewinnen und doppelten Stop-Losses kann sie nach Erreichen des ersten Take-Gewinns teilweise Gewinne erzielen, während sie weiterhin nach größeren Gewinnen sucht. Dies kann die Rentabilität erheblich verbessern.
Ein weiterer Vorteil besteht darin, dass durch die Aufteilung eines einzelnen Handels in drei mögliche Ergebnisse die Wahrscheinlichkeit eines maximalen Verlusts verringert wird, wodurch die Gesamtrendite konsistenter wird. Typische Strategien haben nur zwei Ergebnisse - entweder 2% Stop Loss oder mehr als 2% Gewinn.
Die Hauptrisiken dieser Strategie stammen von der Einstellung des Stop-Loss. Wenn die Stop-Loss-Distanz zu breit ist, kann dies zu einem übergroßen Einzelhandelsverlust führen. Wenn die Stop-Loss-Distanz zu eng ist, kann sie durch Marktgeräusche vorzeitig gestoppt werden. Die richtige Stop-Loss-Distanz muss basierend auf den Eigenschaften und der Volatilität verschiedener Handelsinstrumente festgelegt werden.
Ein weiteres Risiko ist, dass die verbleibende Position nach dem ersten Gewinn immer noch Verlustrisiken birgt. Wenn der nachfolgende Verlust den ersten Gewinn übersteigt, wird er Teile oder alle realisierten Gewinne ausgleichen. Dies muss durch strenge Verfolgung des Stop Loss angegangen werden, um geschlossene Gewinne zu schützen.
Die folgenden Bereiche können für die Strategie optimiert werden:
Testen Sie verschiedene Parameterkombinationen, um optimale Parameter zu finden, z. B. Testen Sie 15 Pips, 25 Pips nehmen Sie Gewinn/Stop-Loss-Distanzen.
Versuchen Sie andere Kombinationen technischer Indikatoren für Eingangssignale, z. B. KDJ, MACD Crossover.
Optimieren Sie den Prozentsatz der bei der ersten Gewinnnahme geschlossenen Position, z. B. 50% ist möglicherweise nicht optimal, 30% oder 70% könnten möglicherweise besser abschneiden.
Testen Sie verschiedene Einstellungen für die Verzögerungsgeschwindigkeit, um die Gewinne auszugleichen und den Preisen genügend Raum für Schwankungen zu geben.
Dies ist eine allgemeine robuste Strategie, die die Rentabilität erheblich verbessern und die Tail-Risiken durch die doppelten Take-Profit-, Dual-Stop-Loss- und Trailing-Stop-Loss-Mechanismen reduzieren kann.
/*backtest start: 2024-01-11 00:00:00 end: 2024-01-18 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true) // Strategy Buy = input(true) Sell = input(true) // Date Range start_year = input(title='Start year' ,defval=2020) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_hour = input(title='Start hour' ,defval=0) start_minute = input(title='Start minute' ,defval=0) end_time = input(title='set end time?',defval=false) end_year = input(title='end year' ,defval=2019) end_month = input(title='end month' ,defval=12) end_day = input(title='end day' ,defval=31) end_hour = input(title='end hour' ,defval=23) end_minute = input(title='end minute' ,defval=59) // MA ema_period = input(title='EMA period',defval=10) wma_period = input(title='WMA period',defval=20) ema = ema(close,ema_period) wma = wma(close,wma_period) // Entry Condition buy = crossover(ema,wma) and nz(strategy.position_size) == 0 and Buy sell = crossunder(ema,wma) and nz(strategy.position_size) == 0 and Sell // Pips pip = input(20)*10*syminfo.mintick // Trading parameters // var bool LS = na var bool SS = na var float EP = na var float TVL = na var float TVS = na var float TSL = na var float TSS = na var float TP1 = na var float TP2 = na var float SL1 = na var float SL2 = na if buy or sell and strategy.position_size == 0 EP := close SL1 := EP - pip * (sell?-1:1) SL2 := EP - pip * (sell?-1:1) TP1 := EP + pip * (sell?-1:1) TP2 := EP + pip * 2 * (sell?-1:1) // current trade direction LS := buy or strategy.position_size > 0 SS := sell or strategy.position_size < 0 // adjust trade parameters and trailing stop calculations TVL := max(TP1,open) - pip[1] TVS := min(TP1,open) + pip[1] TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS if LS and high > TP1 if open <= TP1 SL2:=min(EP,TSL) if SS and low < TP1 if open >= TP1 SL2:=max(EP,TSS) // Closing conditions close_long = LS and open < SL2 close_short = SS and open > SL2 // Buy strategy.entry("buy" , strategy.long, when=buy and not SS) strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1) strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2) // Sell strategy.entry("sell" , strategy.short, when=sell and not LS) strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1) strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2) // Plots a=plot(strategy.position_size > 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) b=plot(strategy.position_size < 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) c=plot(strategy.position_size > 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) d=plot(strategy.position_size < 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) e=plot(strategy.position_size > 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) f=plot(strategy.position_size < 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) g=plot(strategy.position_size >= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) h=plot(strategy.position_size <= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) plot(ema,title="ema",color=#fff176) plot(wma,title="wma",color=#00ced1)