Reverse-Capture-Strategie


Erstellungsdatum: 2023-11-24 16:43:25 zuletzt geändert: 2023-11-24 16:43:25
Kopie: 0 Klicks: 676
1
konzentrieren Sie sich auf
1617
Anhänger

Reverse-Capture-Strategie

Überblick

Die Reverse-Capture-Strategie ist eine Reverse-Trading-Strategie, die die Bolling-Linie des Volatilitätsindikators in Kombination mit dem Dynamikindikator RSI verwendet. Sie setzt den Bolling-Kanal und die Überkauf-Überverkauf-Linie des RSI als Signal ein, um nach Reverse-Gelegenheiten zu suchen, wenn sich die Richtung des Trends ändert.

Strategieprinzip

Die Strategie nutzt die Brinline als primären technischen Indikator, unterstützt durch dynamische Indikatoren wie den RSI, um Handelssignale zu überprüfen. Die spezifische Logik ist:

  1. Beurteilen Sie die Richtung des Grosskreislauftrends und entscheiden Sie, ob Sie bullish oder bearish sind. Verwenden Sie die 50-Tage-EMA und die 21-Tage-EMA für die Gold- und Diebstapel.
  2. In einem Abwärtstrend, wenn die Preiserhöhungen die Bollinger-Abwärtsspur durchbrechen, während der RSI gerade aus der Überverkaufszone zurückschlägt, tritt eine Goldfork-Form auf, die zeigt, dass die Überverkaufszone ihren Boden erreicht hat, und wird als Kaufsignal beurteilt.
  3. Im Aufwärtstrend tritt ein Dead-Fork auf, wenn der Preis nach unten über die Bollinger-Oberbahn fällt und der RSI gerade aus der Überkaufzone zurückfällt, was bedeutet, dass die Überkaufzone sich zurückbewegt hat und als Verkaufssignal gilt.
  4. Die oben genannten Kauf- und Verkaufssignale müssen gleichzeitig erfüllt werden, um falsche Signale zu vermeiden.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. In Kombination mit der Schwankungsrate und der Dynamik ist das Signal zuverlässiger.
  2. Umkehrhandel ist weniger riskant und eignet sich für kurzfristige Operationen.
  3. Die Regeln der Programmierung sind klar und es ist einfach, automatische Transaktionen durchzuführen.
  4. Es ist wichtig, dass Sie mit Trends handeln, um unordentliche Positionen in einem unruhigen Markt zu vermeiden.

Risikoanalyse

Die Strategie birgt auch folgende Risiken:

  1. Die Brinline-Kanal besteht aus einem Risiko für False-Signal-Breakthroughs, die durch den RSI-Indikator gefiltert werden müssen.
  2. Die Gefahr des Rückschlags ist groß, und es ist notwendig, die Schäden rechtzeitig zu stoppen.
  3. Es ist unwahrscheinlich, dass man die richtige Zeit für die Umkehrung erwischt, und es kann zu einem vorzeitigen Eintritt oder einem Verpassen der besten Plätze kommen.

Für die oben genannten Risiken können Sie die Stop-Loss-Position einstellen, um die Risikoöffnung zu steuern und gleichzeitig die Parameter zu optimieren, indem Sie die Brinline-Periode oder den RSI-Parameter anpassen.

Optimierungsrichtung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Optimierung der Brin-Band-Parameter, Anpassung der Periodenlänge und der Größe der Standarddifferenz, Suche nach der optimalen Kombination der Parameter.
  2. Optimierung der Moving-Average-Perioden, um die optimale Periodenlänge für die Trendbeurteilung zu bestimmen.
  3. Anpassung der RSI-Parameter auf die optimale Überkauf-Überverkauf-Bereichs-Reihe.
  4. Das Hinzufügen von Kombinationen aus anderen Indikatoren wie KDJ, MACD usw. bereichert die Eintrittsgründe des Systems.
  5. Die Einführung von Machine Learning-Algorithmen zur automatischen Suche nach den optimalen Parametern mit Hilfe von KI-Technologie.

Zusammenfassen

Die Reverse Capture Strategie ist insgesamt eine leistungsfähige Short-Line-Handelsstrategie. Sie kombiniert Trendurteile und Reverse-Signale. Sie filtert sowohl falsche Signale von Marktausbrüchen als auch die Absicherung von Trends und Trends in einem Trendmarkt. Die Risiken sind kontrollierbar.

Strategiequellcode
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This is an Open source work. Please do acknowledge in case you want to reuse whole or part of this code.
// Please see the documentation to know the details about this.

//@version=5
strategy('Strategy:Reversal-Catcher', shorttitle="Reversal-Catcher", overlay=true , currency=currency.NONE, initial_capital=100000)

// Inputs
src = input(close, title="Source (close, high, low, open etc.")

BBlength = input.int(defval=20, minval=1,title="Bollinger Period Length, default 20")
BBmult = input.float(defval=1.5, minval=1.0, maxval=4, step=0.1, title="Bollinger Bands Standard Deviation, default is 1.5")

fastMovingAvg = input.int(defval=21, minval=5,title="Fast Exponential Moving Average, default 21", group = "Trends")
slowMovingAvg = input.int(defval=50, minval=8,title="Slow Exponential Moving Average, default 50", group = "Trends")

rsiLenght = input.int(defval=14, title="RSI Lenght, default 14", group = "Momentum")
overbought = input.int(defval=70, title="Overbought limit (RSI), default 70", group = "Momentum")
oversold = input.int(defval=30, title="Oversold limit (RSI), default 30", group = "Momentum")

hide = input.bool(defval=true, title="Hide all plots and legends from the chart (default: true)")


// Trade related
tradeType = input.string(defval='Both', group="Trade settings", title="Trade Type", options=['Both', 'TrendFollowing', 'Reversal'], tooltip="Consider all types of trades? Or only Trend Following or only Reversal? (default: Both).")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=false, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked. (Default: off)", group="Trade settings")


// Utils
annotatePlots(txt, val, hide) => 
    if (not hide)
        var l1 = label.new(bar_index, val, txt, style=label.style_label_left, size = size.tiny, textcolor = color.white, tooltip = txt)
        label.set_xy(l1, bar_index, val)

/////////////////////////////// Indicators /////////////////////
vwap = ta.vwap(src)
plot(hide ? na : vwap, color=color.purple, title="VWAP", style = plot.style_line)
annotatePlots('VWAP', vwap, hide)

// Bollinger Band of present time frame
[BBbasis, BBupper, BBlower] = ta.bb(src, BBlength, BBmult)
p1 = plot(hide ? na : BBupper, color=color.blue,title="Bollinger Bands Upper Line")
p2 = plot(hide ? na : BBlower, color=color.blue,title="Bollinger Bands Lower Line")
p3 = plot(hide ? na : BBbasis, color=color.maroon,title="Bollinger Bands Width", style=plot.style_circles, linewidth = 1)
annotatePlots('BB-Upper', BBupper, hide)
annotatePlots('BB-Lower', BBlower, hide)
annotatePlots('BB-Base(20-SMA)', BBbasis, hide)

// RSI
rsi = ta.rsi(src, rsiLenght)

// Trend following
ema50 = ta.ema(src, slowMovingAvg)
ema21 = ta.ema(src, fastMovingAvg)
annotatePlots('21-EMA', ema21, hide)
annotatePlots('50-EMA', ema50, hide)


// Trend conditions
upTrend = ema21 > ema50 
downTrend = ema21 < ema50


// Condition to check Special Entry: HH_LL
// Long side:
hhLLong = barstate.isconfirmed and (low > low[1]) and (high > high[1]) and (close > high[1])
hhLLShort = barstate.isconfirmed and (low < low[1]) and (high < high[1]) and (close < low[1])

longCond =  barstate.isconfirmed and (high[1] < BBlower[1]) and (close > BBlower) and (close < BBupper) and hhLLong and ta.crossover(rsi, oversold) and downTrend
shortCond = barstate.isconfirmed and (low[1] > BBupper[1]) and (close < BBupper) and (close > BBlower) and hhLLShort and ta.crossunder(rsi, overbought) and upTrend

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, 1, limit=na, stop=na, comment="Long[E]")
        sl := low[1]
        target := high >= BBbasis ? BBupper : BBbasis
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, 1, limit=na, stop=na, comment="Short[E]")
        sl := high[1]
        target := low <= BBbasis ? BBlower : BBbasis
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long[SL]" : "Long[T]")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short[SL]" : "Short[T]")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "EoD[Exit]", alert_message = "EoD Exit", immediately = true)