Dual Take Profit Dual Stop Loss Trailing Stop Loss Bitcoin Quantitative Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-19 15:07:04
Tags:

img

Übersicht

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.

Strategie Logik

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:

  1. Der Preis stoppt zuerst den Verlust, verliert 2% Kapital.
  2. Der Preis schlägt zuerst einen Gewinn, zuerst einen Gewinn von 1%, dann schlägt der zweite Stop-Loss, am Ende ein Gewinn von 1%.
  3. Der Preis schlägt zuerst einen Gewinn, zuerst einen Gewinn von 1%, läuft weiter und schlägt zweit einen Gewinn, am Ende mit einem Gewinn von 3%.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

Die folgenden Bereiche können für die Strategie optimiert werden:

  1. Testen Sie verschiedene Parameterkombinationen, um optimale Parameter zu finden, z. B. Testen Sie 15 Pips, 25 Pips nehmen Sie Gewinn/Stop-Loss-Distanzen.

  2. Versuchen Sie andere Kombinationen technischer Indikatoren für Eingangssignale, z. B. KDJ, MACD Crossover.

  3. 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.

  4. Testen Sie verschiedene Einstellungen für die Verzögerungsgeschwindigkeit, um die Gewinne auszugleichen und den Preisen genügend Raum für Schwankungen zu geben.

Schlussfolgerung

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)


Mehr