Exponentielle gleitende Durchschnitt-Crossover-B-Xtrender-Strategie


Erstellungsdatum: 2024-02-20 14:45:17 zuletzt geändert: 2024-02-20 14:45:17
Kopie: 0 Klicks: 1666
1
konzentrieren Sie sich auf
1617
Anhänger

Exponentielle gleitende Durchschnitt-Crossover-B-Xtrender-Strategie

Überblick

Die Strategie ist eine Handelsstrategie, die auf dem Prinzip des Index-Gleichgewichts-Kreuzens basiert. Sie kombiniert gleichzeitig den RSI-Indikator und den Gleichgewichtsfilter zu einem relativ vollständigen Trend-Tracking- und Umkehrhandelssystem.

Strategieprinzip

  1. Die schnelle und langsame Kreuzung des Index-Moving-Averages bildet das Handelssignal. Die EMA-Kreuzung der schnellen Linie mit den Parametern der 5- und 20-Tage-Linien und die EMA-Kreuzung der langsamen Linie mit den Parametern der 20- und 15-Tage-Linien.
  2. Bei schneller Linie überschreiten Sie die langsame Linie und bei schneller Linie unter der langen Linie machen Sie eine leere Linie. Die RSI-Anzeige wird zweimal verifiziert, um die Wirksamkeit des Handelssignals nur zu bestätigen, wenn der RSI auch die Richtung kreuzt.
  3. Der 200-Tage-Moving-Average wird als Filter eingesetzt, um ein Handelssignal nur zu senden, wenn der Preis die Durchschnittslinie überschreitet, wodurch mehrere Falschkreuzungen unter schwankenden Bedingungen vermieden werden.

Strategische Vorteile

  1. Die doppelte EMA-Kreuzung in Verbindung mit dem RSI erhöht die Signalzuverlässigkeit erheblich und reduziert die Falschsignalrate.
  2. Durch die Kombination der schnellen EMA-Parameter wird sowohl die Empfindlichkeit des Handelssignals berücksichtigt als auch die Stabilität des Signals gewährleistet.
  3. Die Einbeziehung eines linearen Filters filtert effektiv den Schwingungsgeräusch und verhindert unnötige Transaktionen.

Strategisches Risiko

  1. Die EMA ist ein Verzögerungsindikator, der bei starken Preisbewegungen deutlich nachlässt. Dies führt zu einem erhöhten Verlust oder der Gefahr, dass ein Signal verpasst wird.
  2. Die falsche Einstellung der RSI-Parameter kann auch zu Signalverzögerungen führen.
  3. Die Einheitsfilterung verhindert zwar Marktschwankungen, kann aber auch frühe Einstiegsmöglichkeiten in den Anfangsphasen des Trends ausfiltern.

Richtung der Strategieoptimierung

  1. Dynamische Anpassung der EMA-Parameter zur Auswahl der optimalen Parameterkombination in verschiedenen Zyklen.
  2. Versuchen Sie, andere Indikatoren wie MACD mit dem RSI zu kombinieren.
  3. Optimieren Sie die Parameter des Gleichfilters, um ein Gleichgewicht zwischen Geräuschminderung und Gewinnchancen zu finden.

Zusammenfassen

Die Strategie ist insgesamt ein vollständiges Index-Moving-Average-Handelssystem. Es basiert auf dem Erwerb von Handelssignalen und führt zusätzliche RSI-Indikatoren durch. Dies kann zweifellos die Signalqualität erheblich verbessern.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © QuantTherapy
//@version=4
strategy("B-Xtrender [Backtest Edition] @QuantTherapy")

i_short_l1  = input(5 , title="[Short] L1")
i_short_l2  = input(20, title="[Short] L2")
i_short_l3  = input(15, title="[Short] L3")

i_long_l1   = input(20, title="[Long] L1")
i_long_l2   = input(15, title="[Long] L2")

i_ma_use    = input(true , title="[MA Filter] Yes/No" )
i_ma_len    = input(200  , title="[MA Filter] length" )
i_ma_type   = input("EMA", title="[MA Filter] type", options = ["SMA", "EMA"])

shortTermXtrender = rsi( ema(close, i_short_l1) - ema(close, i_short_l2), i_short_l3 ) - 50
longTermXtrender  = rsi( ema(close, i_long_l1), i_long_l2 ) - 50

shortXtrenderCol = shortTermXtrender > 0 ? shortTermXtrender > shortTermXtrender[1] ? color.lime : #228B22 : shortTermXtrender > shortTermXtrender[1] ? color.red : #8B0000
plot(shortTermXtrender, color=shortXtrenderCol, style=plot.style_columns, linewidth=1, title="B-Xtrender Osc. - Histogram", transp = 40)

longXtrenderCol   = longTermXtrender> 0 ? longTermXtrender > longTermXtrender[1] ? color.lime : #228B22 : longTermXtrender > longTermXtrender[1] ? color.red : #8B0000
macollongXtrenderCol =  longTermXtrender > longTermXtrender[1] ? color.lime : color.red
plot(longTermXtrender , color=longXtrenderCol, style=plot.style_columns, linewidth=2, title="B-Xtrender Trend - Histogram", transp = 90)

plot(longTermXtrender , color=#000000             , style=plot.style_line, linewidth=5, title="B-Xtrender Trend - Line", transp = 100)
plot(longTermXtrender , color=macollongXtrenderCol, style=plot.style_line, linewidth=3, title="B-Xtrender Trend - Line", transp = 100)

// --- Initialize MA Filter
ma = i_ma_type == "EMA" ? ema(close, i_ma_len) : sma(close, i_ma_len)
maFilterLong = true
maFilterShort = true
if i_ma_use
    maFilterLong  := close > ma ? true : false
    maFilterShort := close < ma ? true : false

long  = shortTermXtrender > 0 and longTermXtrender > 0 and maFilterLong
closeLong = shortTermXtrender < 0 or longTermXtrender < 0 
short = shortTermXtrender < 0 and longTermXtrender < 0 and maFilterShort
closeShort = shortTermXtrender > 0 or longTermXtrender > 0 

plotshape(long[1]==true  and long[2]==false  ? 0 : na , location=location.absolute, style=shape.labelup  , color=color.lime, size=size.small, transp=10)
plotshape(short[1]==true and short[2]==false ? 0 : na, location=location.absolute, style=shape.labeldown, color=color.red , size=size.small, transp=10)
plotshape(closeLong[1]==true and closeLong[2]==false
 or closeShort[1]==true and closeShort[2]==false ? 0 : na, location=location.absolute, style=shape.circle, color=color.orange , size=size.small)

i_perc     = input(defval = 20.0, title = "[TSL-%] Percent"  , minval = 0.1 )
i_src = close // constant for calculation
sl_val = i_src * i_perc / 100

strategy.entry("Long", strategy.long, when = long ) 
strategy.close("Long", when = closeLong)

strategy.entry("Short", strategy.short, when = short) 
strategy.close("Short", when = closeShort)

// Calculate SL
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
    stopValue = close - sl_val
    max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if (strategy.position_size < 0)
    stopValue = close + sl_val
    min(stopValue, shortStopPrice[1])
else
    syminfo.mintick*1000000

// For TSL Visualisation on Chart    
// plot(series=(strategy.position_size > 0) ? longStopPrice : na,
//      color=color.fuchsia, style = plot.style_circles,
//      linewidth=1, title="Long Trail Stop")
     
// plot(series=(strategy.position_size < 0) ? shortStopPrice : na,
//      color=color.fuchsia, style = plot.style_circles,
//      linewidth=1, title="Short Trail Stop")

if (strategy.position_size > 0)
    strategy.exit(id="TSL Long", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="TSL Short", stop=shortStopPrice)