Diese Strategie kombiniert den Super Trend, die Pivot Points und den Average True Range (ATR), um eine dynamische Stop-Loss-Linie und den Average Directional Movement Index (ADX) zu bilden, um Trends zu beurteilen und zu verfolgen.
Der Super Trend in Kombination mit Pivot Points und ATR Stop Loss beurteilt die Richtung des Preisbruchs durch die dynamische Stop Loss-Linie, um die Öffnungsrichtung zu bestimmen.
Die Pivot Points erhalten zunächst die neuesten Support- und Widerstandspunkte und bilden dann einen dynamischen Mittelkurs mit dem arithmetischen Mittel der vorangegangenen zwei Tage. Dann wird ATR berechnet und mit dem ATR-Faktor multipliziert und dann dem dynamischen Mittelkurs hinzugerechnet oder davon abgezogen, um die oberen und unteren Schienen zu erhalten. Wenn der Preis durch die obere Schiene bricht, ist er bullisch. Wenn er durch die untere Schiene bricht, ist er bärisch. Der ADX-Indikator beurteilt die Stärke des Trends und nimmt nur an dem Handel teil, wenn der Trend stark genug ist.
Die Stop-Loss-Linie wird dynamisch nach dem letzten Preis und dem ATR-Wert angepasst, wodurch der Trend sehr gut verfolgt werden kann.
Die Strategie weist folgende Vorteile auf:
Verwenden Sie den Super Trend-Indikator, um die Richtung des Trendverlaufs zu verfolgen, um durch schwankende Märkte keine Gewinne zu erzielen.
Mit Hilfe des ADX-Indikators können Sie die Stärke des Trends beurteilen und Fehler beim Handel während der Konsolidierung vermeiden.
Die Stop-Loss-Linie wird dynamisch angepasst, um den Gewinn zu maximieren.
Kombinieren Sie RSI, um Überkauf und Überverkauf zu vermeiden.
Im Allgemeinen ist die Einstellung der Strategieparameter angemessen. Die Auswahl von dframe berücksichtigt Kontinuität. Die Einstellung von Take Profit und Stop Loss ist ebenfalls gut.
Die Strategie birgt auch einige Risiken:
Die Super Trend- und MA-Indikatoren können widersprüchliche Signale geben.
Der ADX-Indikator ist auf 14 Zyklen eingestellt, was für plötzliche Ereignisse nicht empfindlich genug ist.
Der RSI-Parameter ist auf Standard eingestellt, was möglicherweise nicht dazu führt, Überkauf und Überverkauf zu vermeiden.
Die Auswirkungen plötzlicher Ereignisse, wie z. B. schlechte/gute Nachrichten, wurden nicht berücksichtigt.
Entsprechende Lösungen
Der MA-Zyklus wird an den Super Trend-Indikator angepasst.
Versuchen Sie, den ADX-Zyklus zu verkürzen, um die Empfindlichkeit gegenüber plötzlichen Ereignissen zu erhöhen.
Optimieren Sie die RSI-Parameter, um optimale Werte zu finden.
Hinzufügen eines Nachrichtenfiltermoduls, um wichtige Pressemitteilungen zu vermeiden.
Die Strategie kann auch in folgenden Aspekten optimiert werden:
Fügen Sie ein maschinelles Lernmodell hinzu, um den Trend zu beurteilen, was Handelsentscheidungen intelligenter macht.
Versuchen Sie, alternative emotionale Indikatoren anstelle von ADX einzuführen, um die Stärke des Trends zu beurteilen.
Erhöhen Sie das adaptive Stop-Loss-Modul, um den Stop-Loss dynamischer und genauer zu gestalten.
Extrahieren Sie mehr Funktionen mit Deep Learning-Technologie, um die Gesamtstrategie zu optimieren.
Verwenden Sie fortgeschrittene Sprachen wie Python für die Strategieentwicklung, um die Skalierbarkeit der Strategie zu erhöhen.
Insgesamt ist diese Strategie sehr praktisch. Der Kern besteht darin, die Richtung des Trendlaufs zu verfolgen und teilzunehmen, wenn der Trend stark genug ist. Die Einstellung von Stop-Loss und Take-Profit ist auch sehr gut, um Gewinne zu maximieren und gleichzeitig Verluste zu vermeiden. Natürlich gibt es noch viel Raum für Optimierung. Das Hinzufügen von maschinellem Lernen und Deep-Learning-Technologie wird die Strategie effektiver und erweiterbar machen.
/*backtest start: 2023-01-15 00:00:00 end: 2024-01-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bendre ADX STrend", overlay = true) /////////////////////////// // SuperTrend + Pivot Point ////////////////////////// src = input(close, title="EMA Source") PPprd = input(defval = 2, title="Pivot Point Period") AtrFactor=input(defval = 2, title = "ATR Factor") AtrPd=input(defval = 21, title = "ATR Period") StartDate = input(timestamp("1 Dec 2023"), title="Start Date") EndDate = input(timestamp("12 Jan 2024"), title="End Date") window() => true var float ph = na var float pl = na ph := ta.pivothigh(PPprd, PPprd) pl :=ta.pivotlow(PPprd, PPprd) float center = na center := center[1] // float lastpp = ph ? ph : pl ? pl : 0.0 float lastpp = na(ph) ? na(pl) ? na : pl : ph if lastpp > 0 if na(center) center := lastpp else center := (center * 2 + lastpp) / 3 Up = center - (AtrFactor * ta.atr(AtrPd)) Dn = center + (AtrFactor * ta.atr(AtrPd)) var float TUp = na var float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // Lines linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na plot(Trailingsl, color = linecolor , linewidth = 2, title = "PP SuperTrend") bsignalSSPP = close > Trailingsl ssignalSSPP = close < Trailingsl /////// // ADX ////// lenADX = 14 th = 14 TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = ta.sma(DX, lenADX) ////// // MA ///// lenMA = 21 srcMA = input(close, title="Source") // offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) offsetMA = input(0, title="Offset") outMA = ta.sma(srcMA, lenMA) // // RSI // length = input( 14 ) overSold = input( 30 ) overBought = input( 65 ) price = close vrsi = ta.rsi(price, length) // // DMI - Direction Movement Index // [diplus1, diminus1, adx] = ta.dmi(14, 14) // Buy - Sell Entries buy = bsignalSSPP and outMA < close and ADX > th sell = ssignalSSPP if (buy and vrsi > overBought and adx > 19) // .order // Tuned version strategy.entry("Buy", strategy.long, when = window()) // strategy.close("Sell", "close Sell") if (sell) and (strategy.position_size > 0) // strategy.entry("Sell", strategy.short) strategy.close("Buy", "Close Buy") if(sell and vrsi < overSold and adx > 25) strategy.entry("Sell", strategy.short, when = window()) if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) ) strategy.close("Sell", "close Sell") // if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold) // strategy.entry("Sell", strategy.short, when = window()) // if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0 and (buy)) // strategy.close("Sell", "close Sell")