Adaptive Trendfolgestrategie


Erstellungsdatum: 2024-01-15 14:20:32 zuletzt geändert: 2024-01-15 14:20:32
Kopie: 3 Klicks: 835
1
konzentrieren Sie sich auf
1617
Anhänger

Adaptive Trendfolgestrategie

Überblick

Die Strategie verwendet den Brin-Band-Indikator, um die Preisfluktuation zu berechnen, um die angemessene Trendstärke zu berechnen, und kombiniert diese Strategie mit dem ATR-Indikator, um einen selbständigen Trendkanal zu erstellen, um den Trend zu beurteilen und zu verfolgen. Die Strategie enthält außerdem einen Stop-Loss-Mechanismus, der das Risiko effektiv kontrolliert.

Strategieprinzip

Der Kern der Strategie ist der Brin-Band. Der Brin-Band besteht aus der Mittelbahn, der Oberbahn und der Unterbahn. Die Mittelbahn ist ein einfacher Moving Average von n Tagen, die Oberbahn ist die n-Tage-Standarddifferenz der Mittelbahn + k-mal, die Unterbahn ist die n-Tage-Standarddifferenz der Mittelbahn-k-mal.

Wir berechnen dann das Verhältnis zwischen der Bandbreite des Brin-Bands (Oberbahn-Unterbahn) und dem Mittelbahn-Faktor, der als Schwingungsstärkefaktor bezeichnet wird. Dieser Faktor spiegelt die aktuelle Marktfluktuation und die Stärke der Trends wider. Wir setzen den Maximal-Minimalwert des Stärkefaktors fest, um zu verhindern, dass er zu groß oder zu klein wird.

Nachdem ein vernünftiger Stärkefaktor erreicht wurde, wird der ATR in Kombination mit dem ATR-Wert nach oben und unten bewegt.*Der Stärkefaktor ist die Distanz, die einen Anpassungs-Trendkanal bildet. Wenn der Kurs von unten aufwärts auftritt, machen Sie mehr; wenn der Kurs von oben aufwärts auftritt, machen Sie weniger.

Darüber hinaus gibt es eine Stop-Loss-Strategie. Wenn der Kurs nach dem Auftreten einer Mehrkopfposition den Tiefpunkt der Eröffnung des Kurses überschreitet, wird der Niedrigststand beendet.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Berechnung des Intensitätsfaktors ermöglicht es der Strategie, die Kanalbreite an die Dynamik der Marktfluktuation anzupassen, die Kanalbreite in einem Trendbullmarkt und die Kanalverkleinerung in einem Schwingungsmarkt zu erweitern und sich an verschiedene Arten von Märkten anzupassen.

  2. Durchschnittliche Frequenz der Handlungen. Im Vergleich zu einfachen Moving-Average-Strategien ist die Frequenz der Kanal-Anpassung der Brin-Strategie niedriger und vermeidet unnötige häufige Ausgleichspositionen.

  3. Eintritt ist genau. Eintritt, der durch den Auf- und Abstieg durchbricht, filtert effektiv den Marktlärm und sorgt dafür, dass der Trend mit hoher Wahrscheinlichkeit erfasst wird.

  4. Ein Einzelschaden ist durch die integrierte Stop-Loss-Methode effektiv kontrolliert, was ein großer Vorteil der Strategie ist.

Strategisches Risiko

Die Strategie birgt auch einige Risiken:

  1. Die Parameter sind sehr empfindlich. Die Perioden n und die Multiplikatoren k des Brin-Bandes beeinflussen die Ergebnisse erheblich und erfordern wiederholte Tests, um die optimale Kombination der Parameter zu finden.

  2. Die Brin-Band-Umlaufbahn kann nicht verfolgt werden, wenn sie sich ausbreitet. Wenn die Preise stark schwanken, wird die Brin-Band-Umlaufbahn schnell entfernt, was zu einer Verhinderung der Verfolgung der Trends führt. Die Strategie muss dann ausgesetzt werden, bis die Umlaufbahn sich zusammenschließt.

  3. Manchmal werden falsche Signale erzeugt. Die Brin-Band-Strategie ist nicht perfekt, es werden auch falsche Signale erzeugt, die entsprechende Verluste verursachen.

  4. Der Stop-Loss dieser Strategie berücksichtigt nur den Höchst- und Mindestpreis nach der Positionöffnung, ohne die Kombination von komplexeren Stop-Loss-Methoden wie Volatilität, die möglicherweise zu radikal oder konservativ sind und optimiert werden müssen.

Richtung der Strategieoptimierung

Die Strategie erfordert auch Optimierungen in folgenden Bereichen:

  1. Die Parameter der Strategie können für verschiedene Währungen und Perioden optimiert werden, um die Anpassungsfähigkeit der Strategie zu verbessern.

  2. Optimierung der Stop-Loss-Mechanismen. Es können mobile Stop-Loss, Schwingungsstop-Loss, Tracking-Stop-Loss usw. eingeführt werden, um die Stop-Loss-Methode intelligenter zu machen.

  3. In Kombination mit anderen Indikatoren filtern Sie den Einstieg. Indikatoren wie MACD, KDJ und andere können hinzugefügt werden, um zu verhindern, dass die Brin-Band in den Querplatten-Schwankungen ein falsches Signal erzeugt.

  4. Positionsmanagement-Methoden wie Stop-Loss-Tracking, Pyramiden-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Platz-Plat

  5. Optimierung des Feedbacks. Durch Erweiterung des Feedback-Zeitraums, Anpassung der Parameter und Analyse des Feedback-Berichts wird die Effektivität der Strategie umfassend geprüft, um die optimalen Parameter zu finden.

Zusammenfassen

Die Adaptionsstrategie folgt der Strategie insgesamt. Sie ist eine ausgereiftere quantitative Strategie. Sie verwendet die dynamische Erfassung der Trends der Brin-Band-Indikatoren, um mit den ATR-Indikatoren einen Adaptionskanal zu erstellen, um die Trends zu beurteilen. Die Risikokontrolle wird durch den integrierten Stop-Loss-Mechanismus gesteuert.

Strategiequellcode
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)

Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")

plot_losscut = input(true, title="Plot losscut")

/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB     = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)

///////////// Trend ////////////////////////////

rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1

///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1] 
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])

sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut

bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)

LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)

plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
    
    
///////////// Strategy //////////////////////////// 
if true

    strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
    strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
    
    if(current_trend == 1)
        strategy.close('long', when=sig_loss_cut == true) 
        //strategy.exit('lc',from_entry='long', stop=price_cut)
    
    if( current_trend == -1 )
        strategy.close('short', when=sig_loss_cut == true) 
        //strategy.exit('sc',from_entry='short', stop=price_cut)