Els Instant Trend Line Strategie


Erstellungsdatum: 2023-12-20 16:51:05 zuletzt geändert: 2023-12-20 16:51:05
Kopie: 0 Klicks: 938
1
konzentrieren Sie sich auf
1621
Anhänger

Els Instant Trend Line Strategie

Überblick

Die Ehlers-Instant-Trend-Line-Strategie wurde von John Ehlers in seinem Control-Analysis-Paket für die Buchführung von Aktien und Futures entwickelt. Die Strategie nutzt technische Indikatoren, um den sofortigen Trend einer Aktie oder einer Futures zu erkennen und Positionen zu eröffnen, wenn der Trend umgekehrt wird.

Strategieprinzip

Der Kern der Strategie ist die Berechnung der sofortigen Trendlinie. Die Berechnungsformel für die IT-Linie lautet wie folgt:

it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]

Die Formel ist ein zweistufiger Filter, der die Preise ausgleicht und Trends erzeugt.

Ein weiterer wichtiger Indikator ist die Verzögerungslinie ((lag)), die mit folgender Formel berechnet wird:

lag = 2.0 * it - nz(it[2])

Die Linie hinterlässt die IT-Linie für einen Zyklus. Wenn der Preis die Rückstandslinie oben durchbricht, bedeutet dies eine Trendwende, ein Plus; wenn der Preis die Rückstandslinie unten durchbricht, bedeutet dies eine Trendwende, ein Minus.

Darüber hinaus wurde eine Stop-Loss-Regelung eingeführt, um die Risiken zu kontrollieren.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Nutzung von IT-Leitungen zur Erkennung von Trends, um Marktlärm zu filtern und die Signalqualität zu verbessern
  2. Einsatz von zweitstufigen Filtern, großer Raum für die Optimierung von Parametern und hohe Anpassbarkeit
  3. Vermeidung von Wiederholungen von Schließungen im Trend in Verbindung mit Rückstandslinien
  4. Setzen Sie Stop-Loss-Einzelrisikokontrolle und können Sie den Stop-Loss-Prozentsatz vordefinieren
  5. Klare Code-Struktur, leicht zu verstehen und zu ändern

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Die falsche Einstellung der IT- und Lagger-Parameter kann zu Fehlsignalen führen
  2. Unzureichend eingestellte Stop-Loss-Punkte können zu früh oder zu stark stoppen
  3. Hohe Handelsfrequenz und die Kosten für die Transaktionen beeinträchtigen die Gewinne
  4. Zu lange konzentrierte Positionen können die Rendite beeinträchtigen

Diese Risiken können durch folgende Maßnahmen verringert werden:

  1. Optimierungsparameter für die Anwendung von Machine Learning-Algorithmen
  2. Einstellung der adaptiven Stop-Loss-Punkt
  3. Um die Anzahl der offenen Positionen entsprechend anzupassen und die Häufigkeit der Transaktionen zu verringern
  4. Setzen Sie eine Stop-Loss-Prozess-Position

Optimierungsrichtung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Testen Sie die Auswirkungen verschiedener Filterparameter auf die Ergebnisse und suchen Sie nach den optimalen Parametern
  2. Versuchen Sie, Handelssignale in Kombination mit anderen Indikatoren zu filtern, um die Signalqualität zu verbessern
  3. Optimierung der Positionsöffnungslogik und Erhöhung der Positionen während der Trendbeschleunigung
  4. Setzen Sie eine anpassungsfähige Stop-Loss-Strategie und passen Sie die Stop-Loss-Punkte an die Marktschwankungen an
  5. Durchführung von Zeitreihenanalysen zur Beurteilung der Auswirkungen von Handelszeit und -zyklen auf die Ergebnisse

abschließend

Alles in allem nutzt die Ells-Instant-Trend-Line-Strategie technische Indikatoren, um die Echtzeit-Trends von Aktien/Futures zu identifizieren und Positionen zu eröffnen, wenn sich der Trend umkehrt. Sie hat die Vorteile einer effektiven Geräuschfilterung, einer hohen Parameter-Anpassbarkeit, einer klaren Signalgenerationslogik und einer integrierten Risikokontrolle. Durch die weitere Optimierung der Parameter-Signal-Auswahl, der Filterung, der Positionsgröße und der Stop-Loss-Anpassung kann die Strategie eine bessere Leistung erzielen.

Strategiequellcode
/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Instantaneous Trendline Strategy", shorttitle = "Ehlers Instantaneous Trendline Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, backtest_fill_limits_assumption = 1)
src = input(hl2, title="Source")
a = input(0.07, title="Alpha", step=0.01) 
fr = input(false, title="Fill Trend Region")
it = na
if (na(it[2]) or na(it[1]))
    it := (src + 2 * src[1] + src[2]) / 4.0
else
    it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]
lag = 2.0 * it - nz(it[2])
rngFrac = input(0.35)
revPct = input(0.015)
stopType = input(title="Stop type", defval = "stop-order", options = ["stop-order", "market-order", "None"])

diff = input(0.5, title = "Spread")
LongPrice(p) =>
    LongPrice = diff == 0 ? p : floor(p / diff) * diff

ShortPrice(p) =>
    ShortPrice = diff == 0 ? p : ceil(p / diff) * diff

strategy.cancel_all()
reverseTrade = false
if stopType == "market-order" 
    if  strategy.position_size > 0 and close < strategy.position_avg_price * (1 - revPct) 
        strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, limit = close - 2 * diff)
        reverseTrade := true
    if  strategy.position_size < 0 and close > strategy.position_avg_price * (1 + revPct) 
        strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, limit = close + 2 * diff)
        reverseTrade := true
    
if lag > it and not reverseTrade
    price = LongPrice(max(close - (high - low) * rngFrac, low))
    if strategy.position_size <= 0
        strategy.order("Open long", strategy.long, strategy.equity / price - strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.short, 2 * strategy.equity / price, stop = ShortPrice(price * (1 - revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, stop = ShortPrice(strategy.position_avg_price * (1 - revPct)))
if lag < it and not reverseTrade
    price = ShortPrice(min(close - (high - low) * rngFrac, high))
    if strategy.position_size >= 0
        strategy.order("Open short", strategy.short, strategy.equity / price + strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.long, 2 * strategy.equity / price, stop = LongPrice(price * (1 + revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, stop = LongPrice(strategy.position_avg_price * (1 + revPct)))


itPlot=plot(it, color=red, linewidth=1, title="Trend")
lagPlot=plot(lag, color=blue, linewidth=1, title="Trigger")
fill(itPlot, lagPlot, it < lag ? green : red,  transp=70)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(9, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()