Dreifache SMA-Auto-Tracking-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-26 15:05:58
Tags:

img

Übersicht

Die Triple SMA-Strategie ist eine Trendfolgestrategie, die auf drei einfachen gleitenden Durchschnitten (SMA) verschiedener Perioden für die Trendenidentifizierung und Einträge basiert.

Strategie Logik

Die Strategie verwendet drei SMAs aus verschiedenen Perioden als Haupttrendindikator, darunter 200-, 400- und 600-Perioden-SMAs. Wenn der Preis über allen drei SMAs liegt, zeigt dies einen Aufwärtstrend an und umgekehrt für einen Abwärtstrend.

Für Einträge kombiniert die Strategie den Einsatz von Schlusskurs und dem StochClose-Oszillator. Die Signale werden nur erzeugt, wenn der Preis mit der dreifachen SMAs-Richtung übereinstimmt. StochClose identifiziert Überkauf/Überverkaufsspiegel und gibt ein langes Signal, wenn es über 95 und ein kurzes Signal, wenn es unter 5 überschreitet.

Der Stop-Loss wird auf den Preis unter dem langsamsten SMA gesetzt.

Die Strategie erlaubt bis zu 10-fache Pyramiden.

Analyse der Vorteile

Der größte Vorteil der Triple-SMA-Strategie besteht darin, dass sie durch die Kombination von drei SMAs unterschiedlicher Perioden die Trendrichtung und -stärke besser identifizieren kann.

Darüber hinaus vermeidet die Einbeziehung von StochClose für die Überkauf-/Überverkaufsanalyse, Signale um potenzielle Trendumkehrpunkte zu nehmen.

Der auf der langsamsten SMA basierende Stop-Loss maximiert auch die Fähigkeit der Strategie, Trends zu überstehen und gleichzeitig vorzeitige Stop-Outs zu minimieren.

Die Erlaubnis der Pyramidenbildung ermöglicht es der Strategie, kontinuierlich an Trends teilzunehmen.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass die dreifachen SMAs möglicherweise nicht alle falschen Signale vollständig filtern. Wenn der Preis nach dem Durchbrechen der SMAs keinen Trend bildet und bald zurückzieht, können Verluste auftreten. Dies geschieht oft um wichtige Unterstützungs- / Widerstandsniveaus.

Außerdem kann StochClose selbst falsche Signale erzeugen, was zu unangemessenen Einträgen führt, insbesondere in den Märkten mit unterschiedlichen Abständen.

Um diese Risiken zu mindern, können Parameter wie SMA-Perioden angepasst und weitere Indikatoren wie KDJ und MACD hinzugefügt werden, um die Signalqualität zu verbessern.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Hinzufügen/Ausrichten von SMA-Perioden, um optimale Werte für bestimmte Produkte zu finden

  2. Hinzufügen zusätzlicher Indikatoren wie KDJ und MACD für die Kombinationsfilterung und bessere Einträge

  3. Optimierung der Stop-Loss- und Take-Profit-Standards, um die Marktvolatilitätsbereiche besser anzupassen

  4. Optimieren Sie Pyramiden-Einstellungen, um ideale Pyramiden-Strategien zu finden

  5. Versuchung verschiedener Produkte und Anpassung der Parameter an mehr Produkte

Schlussfolgerung

Zusammenfassend ist die Triple SMA-Strategie ein sehr praktischer Trendfolgungsansatz. Durch die Kombination von dreifachen SMAs und StochClose erreicht sie eine solide Trendidentifizierung und vermeidet falsche Signale.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution=""
len = input(200, minval=1, title="sma 1 length")
len1 = input(400, minval=1, title="sma 2 length")
len2 = input(600, minval=1, title="sma 3 length")
src = input(close, title="Source")
////////////////////////////////////////////
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len

up = smma > smma [1]
down =smma < smma[1]
mycolor = up ? #64b5f6 : down ? #d32f2f : na
fastma = sma(hl2, 1)

fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle')
slowplot = plot(smma, color=mycolor, transp=55, title='sma1')

////////////////////////////////////////////
smma1 = 0.0
smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1

up2 = smma1 > smma1 [1]
down2 =smma1 < smma1[1]

mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na
slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2')

////////////////////////////////////////////
smma2 = 0.0
smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2

up3 = smma2 > smma2 [1]
down3 =smma2 < smma2[1]

mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na
slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3')

////////////////////////////////////////////////////////////////////////////////////////
//Fill gaps
fillData = smma > fastma
fillData2 = smma < fastma

fillDtat = smma1 > smma
fillDtat2 = smma1 < smma

fillDat = smma2 > smma1
fillDat2 = smma2 < smma1


fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na
fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na
fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na


fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill")
fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill")
fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill")

uc = (close > smma) and (close > smma1)
dc = (close < smma) and (close < smma1)

barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be
barcolor(color=barColor)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//StochClose from @trendinvestpro 
periods = input(50, minval=1, title="length for the oscillator")
smooth = input(5, minval=1, title="oscillator smoothing")
hhc=highest(close,periods)
llc=lowest(close,periods)
StochClose = sma((close-llc)/(hhc-llc)*100, smooth)

shortline = input(95, minval=0, title="signal when oscillator crosses above")
longline = input(5, minval=0, title="signal when oscillator crosses below")

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
longs = close > smma2
shorts = close < smma2



long = longs == true and crossunder(StochClose, longline)
short = shorts == true and crossover(StochClose, shortline)

stoplong = close < smma and close < smma1 and close < smma2
stopshort = close > smma and close > smma1 and close > smma2

p1 = strategy.position_avg_price / 100 / syminfo.mintick

maxx = input(2500, title="max orders filled on a day", minval=0)
takeprofit1 = input(1, title="take profit level 1", minval=0)
takeprofit2 = input(2, title="take profit level 2", minval=0)
takeprofit3 = input(6, title="take profit level 3", minval=0)

takeprofitqt1 = input(30, title="take profit quantity first", minval=0)
takeprofitqt2 = input(30, title="take profit quantity second", minval=0)
takeprofitqt3 = input(30, title="take profit quantity third", minval=0)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////Strategy entries/////////////////////////////////////////////////////////////////////////////////////////
// strategy.risk.max_intraday_filled_orders(maxx)
strategy.entry("long", strategy.long, when=long)
strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("long", when=stoplong == true)


strategy.entry("short", strategy.short, when=short)
strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1)
strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1)
strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1)
strategy.close("short", when=stopshort == true)




Mehr