Parabolische SAR-Dynamische Breakout-Dreifach-SMMA-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-08 11:53:09
Tags:

img

Übersicht

Dies ist eine Breakout-Handelsstrategie, die den parabolischen SAR-Indikator und die drei SMMA-Linien mit verschiedenen Perioden kombiniert. Sie geht lang, wenn alle drei SMMA-Linien steigen und kurz, wenn alle fallen, während sie den SAR-Indikator verwendet, um die Trendrichtung zu bestimmen und Gegentrend-Einträge nimmt, wenn SAR Richtungen umdreht. Die Strategie beinhaltet auch Stop-Loss und Take-Profit.

Strategie Logik

Die Strategie beruht auf folgenden Schlüsselpunkten:

  1. Die Verwendung des parabolischen SAR-Indikators zur Bestimmung der aktuellen Trendrichtung.

  2. Aufbau von drei SMMA-Linien mit unterschiedlichen Perioden (schnelle Linie 21, mittlere Linie 50, langsame Linie 200).

  3. Lang geht, wenn SAR nach unten dreht, während alle drei SMMA-Linien steigen.

  4. Kurzgeschaltet, wenn die SAR aufschlägt, während alle drei SMMA-Linien fallen.

  5. Einbeziehung von Stop-Loss basierend auf SAR und Gewinnnahme zu einem bestimmten Prozentsatz des Einstiegspreises.

Die Strategie prüft zunächst, ob SAR die Richtungen auf der aktuellen Leiste umdreht. Wenn SAR von oben nach unten umdreht, während SMMAs steigen, geht es lang. Wenn SAR von unten nach oben umdreht, während SMMAs fallen, geht es kurz.

Nach dem Eintritt wird der Stop-Loss auf den SAR-Preis auf der nächsten Bar gesetzt, wobei SAR als dynamischer Trailing-Stop-Loss verwendet wird.

Analyse der Vorteile

Diese Strategie kombiniert den Vorteil eines Trend-folgenden Indikators mit mehreren zeitlichen gleitenden Durchschnitten und ermöglicht zeitnahe Einträge bei Trendumkehrungen und filtert gleichzeitig mit SMMAs falsche Ausbrüche aus.

  1. SAR kann Trendveränderungen schnell erkennen und Umkehrmöglichkeiten erfassen.

  2. Die dreifachen SMMA filtern Marktlärm effektiv aus und vermeiden falsche Ausfälle.

  3. Die Verwendung von SMMA führt zu glatteren Kurven und weniger Störungen durch MA-Whipsaws.

  4. Die Einbeziehung von Stop-Loss und Take-Profit hilft, Einzelhandelsverluste zu kontrollieren und teilweise Gewinne zu erzielen.

  5. Flexible Parameter-Einstellungen ermöglichen eine Optimierung für verschiedene Märkte.

Risikoanalyse

Es gibt auch einige Risiken, die zu berücksichtigen sind:

  1. SAR kann sich während unruhiger Trends häufig ändern, wodurch die Kosten durch übermäßigen Handel steigen.

  2. SMMA-Einstellungen passen möglicherweise nicht gut zu allen Instrumenten und erfordern eine individuelle Optimierung.

  3. SAR-Stop-Loss hat eine Zeitverzögerung, die Verluste möglicherweise erhöht.

  4. SAR kann bei stetigen Trends auf falsche Brüche zurückgreifen.

  5. Schlechte SMMA-Einstellungen können zu verpassten Trends oder schlechten Signalen führen.

Um den Risiken entgegenzuwirken, können sich die Optimierungen auf Folgendes konzentrieren:

  1. Anpassung der SAR-Parameter basierend auf der Volatilität zur Verringerung von Flips.

  2. Anpassung der SMMA-Perioden an die Instrumenteneigenschaften.

  3. Verbesserte Stop-Loss-Verfahren, z. B. mit Trailing- oder Limit-Orders.

  4. Verwendung von Limit-Orders für Stop Loss im aktiven Handel.

  5. Umfangreiche Tests und Einstellungen der Parameter.

Optimierungsrichtlinien

Auf der Grundlage der vorstehenden Analyse können Optimierungen Folgendes beinhalten:

  1. Optimierung der SAR-Parameter für glattere Kurven und weniger Flips.

  2. Anpassung der SMMA-Länge an die Handelsinstrumente.

  3. Ein dynamischer Stop-Loss wie Trailing-Stops oder Limit-Orders.

  4. Verwendung von Limitordern für Stop Loss im Hochfrequenzhandel.

  5. Filter wie RSI, KD hinzufügen, um die Signalqualität zu verbessern.

  6. Verbesserung der Einstiegsbedingungen, z. B. Überprüfung der Kerzenmuster mit SAR-Flips.

  7. Hinzufügen von Wiedereintrittsbedingungen nach Stop-Loss-Triggern.

  8. Erhöhung des Gewinns mit nachlassenden, teilweisen Schließungen, atemberaubenden Niveaus.

  9. Parameter-Tuning auf der Grundlage von Backtest-Ergebnissen und Empfindlichkeitsanalyse.

Zusammenfassung

Zusammenfassend ist dies eine einfache und praktische Breakout-Strategie, die die Empfindlichkeit von SAR bei der Aufnahme von Trendänderungen und den Filtereffekt von gleitenden Durchschnitten kombiniert. Sie kann Trendumkehrpunkte schnell identifizieren. Die Verwendung von Stop-Loss und Take-Profit hilft, Risiken zu kontrollieren und Gewinne zu erzielen. Weitere Optimierungen der Parameter-Einstellungen, der Ein/Aus-Regeln und der Robustheit gegen falsche Breaks können die Strategieleistung für verschiedene Handelsinstrumente verbessern.


/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03)
start = input.float(0.02, step=0.01, group="SAR")
increment = input.float(0.02, step=0.01, group="SAR")
maximum = input.float(0.2, step=0.01, group="SAR")

//Take Profit Inputs     
take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01

//Stop Loss Inputs
stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01

// Smooth Moving Average
fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average")
midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average")
slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average")

src = input(close, title="Source", group = "Smooth Moving Average")

smma(ma, src, len) => 
    smma = 0.0
    smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len
    smma

fastSma = ta.sma(src, fastSmmaLen)
midSma = ta.sma(src, midSmmaLen)
slowSma = ta.sma(src, slowSmmaLen)

fastSmma = smma(fastSma, src, fastSmmaLen)
midSmma = smma(midSma, src, midSmmaLen)
slowSmma = smma(slowSma, src, slowSmmaLen)

isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1)

var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na

if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := math.max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := math.min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := math.min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := math.min(AF + increment, maximum)
	if uptrend
		SAR := math.min(SAR, low[1])
		if bar_index > 1
			SAR := math.min(SAR, low[2])
	else
		SAR := math.max(SAR, high[1])
		if bar_index > 1
			SAR := math.max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

sarIsUpTrend = uptrend ? true : false

sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false
sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false


longEntryCondition = isSmmaUpward and sarFlippedDown
shortEntryCondition = not isSmmaUpward and sarFlippedUp

if(longEntryCondition)
    strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L")

if(shortEntryCondition)
    strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S")


strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss))
strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss))


plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua)
plot(series = fastSmma, title="fastSmma", linewidth=1)
plot(series = midSmma, title="midSmma", linewidth=2)
plot(series = slowSmma, title="slowSmma", linewidth=3)
plotchar(series = isSmmaUpward, title="isSmmaUpward", char='')
plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='')
plotchar(series=sarFlippedUp, title="sarFlippedUp", char='')
plotchar(series=sarFlippedDown, title="sarFlippedDown", char='')
plotchar(series=longEntryCondition, title="longEntryCondition", char='')
plotchar(series=shortEntryCondition, title="shortEntryCondition", char='')
plotchar(series=strategy.position_size > 0, title="inLong", char='')
plotchar(series=strategy.position_size < 0, title="inShort", char='')


//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)



Mehr