Die Super Trend Dual Moving Average Strategie ist eine quantitative Handelsstrategie, die auf dem Super Trend Indikator und dem einfachen gleitenden Durchschnitt basiert.
Die Strategie setzt auf zwei Indikatoren:
Super Trend Indikator: Berechnet die oberen und unteren Schienen basierend auf der wahren Volatilität ATR und einem Multiplikator. Wenn der Schlusskurs höher als die oberen Schienen ist, zeigt er eine bullische Sicht an. Wenn er niedriger als die unteren Schienen ist, zeigt er eine bärische Sicht an.
200-tägiger einfacher gleitender Durchschnitt: Er erfasst den arithmetischen Durchschnitt der Schlusskosten der letzten 200 Tage. Wenn der Schlusskurs über dieser Linie liegt, stellt er einen großen Aufwärtstrend dar. Wenn er unter dieser Linie liegt, stellt er einen großen Bärentrend dar.
Strategie Logik:
Wenn der Super Trend-Indikator ein bullisches Signal gibt (Super Trend-Wert größer als 0) und der Schlusskurs höher als der 200-Tage-MA ist, gehen Sie lang.
Wenn der Super Trend-Indikator ein bärisches Signal gibt (Super Trend-Wert kleiner als 0) und der Schlusskurs unter dem 200-Tage-MA liegt, wird kurz gehandelt.
Schließen Sie die Position, wenn der Super Trend-Indikator ein umgekehrtes Signal gegenüber der vorherigen gibt.
Der Stop-Loss beträgt 25%.
Die Strategie kombiniert den Super Trend-Indikator zur Bestimmung des kurzfristigen Trends und den 200-Tage-MA zur Bestimmung des langfristigen Trends, der falsche Ausbrüche effektiv filtern, die Handelsfrequenz reduzieren und gleichzeitig die Gewinnrate verbessern kann.
Das Hauptrisiko dieser Strategie besteht darin, dass der Stop-Loss-Bereich relativ groß ist. Es kann das Risiko einer erzwungenen Liquidation bei hohen Hebelwirkungssituationen erhöhen. Darüber hinaus wird der Super Trend-Indikator redundante Signale erzeugen, wodurch die Transaktionskosten und die Handelsfrequenz erhöht werden.
Das Risiko kann durch angemessene Anpassung der ATR-Periode, Multiplikatorparameter und Stop-Loss-Bereich verringert werden.
Die Strategie kann in folgenden Aspekten optimiert werden:
Anpassung der ATR-Periode und Multiplikatorparameter zur Optimierung des Super Trend-Indikators.
Versuchen Sie, andere MA-Indikatoren wie EMA und VIDYA zu ersetzen.
Zusätzliche Hilfsindikatoren wie BOLL-Kanal oder KD-Indikator für eine weitere Signalfilterung hinzufügen.
Optimieren Sie die Stop-Loss-Strategie, z. B. bewegen Sie sie zu einem Breakeven-Punkt oder zu einem Trailing-Stop zusammen mit höheren Zeitrahmen.
Insgesamt ist diese Strategie sehr praktisch. Sie berücksichtigt sowohl kurzfristige Trendbeurteilung als auch langfristige Trendbeurteilung mit angemessenen Stop-Loss-Einstellungen. Sie kann durch Parameteranpassung und Optimierung bessere Ergebnisse erzielen, was eine echte Handelsverifizierung und Anwendung wert ist.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef