Die Ressourcen sind geladen. Beförderung...

Multi-RSI-EMA-Momentum-Hedging-Strategie mit Skalierung von Positionen

Schriftsteller:ChaoZhang, Datum: 2024-12-04 15:41:10
Tags:RSIEMATPSL

img

Übersicht

Dies ist eine Momentum-Hedging-Handelsstrategie, die auf RSI-Indikatoren und EMA- gleitenden Durchschnitten basiert. Die Strategie nutzt doppelte RSI-Perioden (RSI-14 und RSI-2) in Kombination mit dreifachen EMA-Linien (50, 100, 200), um Markttrendumkehrmöglichkeiten zu erfassen und die Absicherung durch dynamisches Positionsmanagement zu implementieren. Das Kernmerkmal der Strategie ist die allmähliche Erhöhung der Positionen, wenn die Einstiegsbedingungen erfüllt sind, mit Gewinnbedingungen, die auf RSI-Überkauf / Überverkaufsniveaus basieren.

Strategieprinzipien

Die Strategie verwendet RSI-14 und RSI-2 mit unterschiedlichen Perioden, zusammen mit EMA-50, EMA-100, und EMA-200, um Handelssignale zu bestimmen. Lange Konditionen erfordern einen RSI-14 unter 31 und ein RSI-2-Kreuz über 10, während EMAs in einer Bären-Ausrichtung sein müssen (EMA-50 < EMA-100 < EMA-200). Kurze Konditionen sind entgegengesetzt, erfordern einen RSI-14 über 69 und einen RSI-2-Kreuz unter 90, wobei EMAs in einer Bullish-Ausrichtung sind (EMA-50 > EMA-100 > EMA-200). Die Strategie verwendet 20x Hebelwirkung und berechnet dynamisch Handelsmengen auf der Grundlage des aktuellen Eigenkapitals. Neue Positionen werden mit doppelt der aktuellen Positionsgröße geöffnet, wenn die Bedingungen erfüllt sind. Die Gewinnbedingungen werden auf der Grundlage der umgekehrten Ausbrüche des RSI-Indikators festgelegt.

Strategische Vorteile

  1. Die Kreuzvalidierung mehrerer technischer Indikatoren verbessert die Signalsicherheit
  2. Dynamisches Positionsmanagement ermöglicht eine flexible Portfolioanpassung
  3. Der zweiseitige Handelsmechanismus ermöglicht einen Gewinn aus beiden Richtungen
  4. Anpassungsfähige Gewinnbedingungen verhindern vorzeitige Ausstiege
  5. Übersichtliche grafische Schnittstelle mit Handelssignalen und Marktbedingungen
  6. Der Absicherungsmechanismus verringert das gezielte Risikoposition
  7. Berechnung der dynamischen Position auf Basis von Eigenkapital für eine bessere Risikokontrolle

Strategische Risiken

  1. Hohe Verschuldung (20x) kann zu erheblichen Liquidationsrisiken führen
  2. Die inkrementelle Positionierung könnte bei Marktvolatilität zu schweren Verlusten führen
  3. Abwesenheit von Stop-Loss-Bedingungen kann zu einem anhaltenden Zugriffsrisiko führen
  4. Die RSI-Indikatoren können in den unterschiedlichen Märkten falsche Signale erzeugen
  5. Kombination mehrerer technischer Indikatoren kann Handelschancen verringern
  6. Positionsmanagementmethode kann bei aufeinanderfolgenden Geschäften zu einem übermäßigen Risiko führen

Strategieoptimierungsrichtlinien

  1. Einführung eines anpassungsfähigen Stop-Loss-Mechanismus auf Basis von ATR oder Volatilität
  2. Optimierung des Hebelwirtschaftsmultiplikators mit dynamischer Anpassung an die Marktvolatilität
  3. Hinzufügen von Zeitfiltern, um den Handel in Zeiten geringer Volatilität zu vermeiden
  4. Einbeziehung von Lautstärkenindikatoren zur Verbesserung der Signalsicherheit
  5. Optimierung des Positionsinkrementmultiplikators mit maximalen Positionsgrenzen
  6. Hinzufügen von Trendstärkenfiltern, um den Handel mit schwachen Trends zu vermeiden
  7. Verbesserung des Risikomanagements durch tägliche Höchstverlustgrenzwerte

Zusammenfassung

Diese umfassende Strategie kombiniert Dynamik und Trendfolgen und verwendet mehrere technische Indikatoren, um die Genauigkeit des Handels zu verbessern. Die Strategie ist innovativ durch dynamisches Positionsmanagement und Hedging-Mechanismen, obwohl sie erhebliche Risiken birgt. Durch die Optimierung von Risikokontrollmechanismen und die Einführung zusätzlicher Filter hat diese Strategie das Potenzial für eine bessere Leistung im Live-Handel.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na


Verwandt

Mehr