Einseitige Trend-Schock-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-18 14:59:30
Tags:

img

Übersicht

Die Single Side Trend Shock Breakout Strategie ist eine Breakout-Strategie, die Preiskanäle und Trendbeurteilung nutzt.

Strategie Logik

Die Strategie berechnet die oberen und unteren Bands eines Preiskanals anhand der höchsten und niedrigsten Preise in den letzten N Perioden. Anschließend berechnet sie eine Preismitte. Die Abstände zwischen Preisen und Mittellinie werden durchschnittlich berechnet, um die Kanalbänder zu erhalten.

Für die Trenddetektion überprüft die Strategie, ob die jüngsten Kerzen alle über (bullisch) oder unter (bearish) dem Kanal schließen. Nach der Trendbestätigung wartet sie auf Preisschläge in der Nähe der Bands und tritt in umgekehrte Richtung ein.

Die Strategie setzt nach dem Eintritt ein Gewinnziel und macht Gewinn, wenn der Preis es erreicht.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Preiskanalfilter verringern das Risiko eines falschen Ausbruchs
  2. Rücklaufverträge profitieren von Trendschokken
  3. Körperbreakouts verbessern die Einstiegsgenauigkeit.
  4. Gewinnziel ermöglicht die aktive Gewinnentnahme

Risikoanalyse

Es gibt auch einige Risiken:

  1. Unzulässige Kanalparameter können den Kanal übermäßig erweitern/verengen
  2. Umkehrungen gegen starke Trends können zu großen Verlusten führen
  3. Körperbrüche erzeugen auf den Oberflächen falsche Signale.
  4. Starres Gewinnziel kann Gewinne auf dem Tisch lassen

Diese können durch Parameter-Tuning, Vermeidung von Umkehrungen bei starken Trends, Optimierung der Exit-Logik usw. behoben werden.

Möglichkeiten zur Verbesserung

Einige Möglichkeiten zur Verbesserung der Strategie:

  1. Hinzufügen von Trendindikatoren zur Bestätigung von Trends
  2. Optimieren Sie die Parameter für den Ausbruch des Körpers, um falsche Signale zu reduzieren
  3. Zusätzliche Filter zum Zeitpunkt des Eintritts
  4. Dynamische Anpassung des Gewinnziels

Schlussfolgerung

Die Single-Side Trend Shock Breakout Strategie profitiert von Ausbrüchen gegen den Trend in unterschiedlichen Perioden. Sie hat den Vorteil der Trendidentifikation und der aktiven Gewinnentnahme, hat aber auch einige Risiken. Diese Risiken können durch Multi-Faktor-Bestätigung, Parameteroptimierung usw. reduziert werden.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Mehr