Mehrere RSI-EMA Momentum Hedge Scaling Strategie

RSI EMA TP SL
Erstellungsdatum: 2024-12-04 15:41:10 zuletzt geändert: 2024-12-04 15:41:10
Kopie: 0 Klicks: 514
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrere RSI-EMA Momentum Hedge Scaling Strategie

Überblick

Es handelt sich um eine dynamische Hedging-Trading-Strategie, die auf dem RSI-Indikator und der EMA-Mittellinie basiert. Die Strategie verwendet den Doppel-RSI-Zeitraum ((RSI-14 und RSI-2) in Kombination mit dem Doppel-EMA-Mittelpunkt ((50 , 100 , 200)), um Trendwende-Möglichkeiten zu erfassen und durch dynamische Positionsverwaltung einen Aufprallwirkung zu erzielen.

Strategieprinzip

Die Strategie verwendet die relativ starken Indizes RSI-14 und RSI-2 in zwei verschiedenen Phasen in Kombination mit den drei Ebenen EMA-50, EMA-100 und EMA-200, um ein Handelssignal zu ermitteln. Mehrfache Bedingungen erfordern einen RSI-14 unter 31 und einen RSI-2 nach oben, um 10 zu brechen, und verlangen, dass die drei Ebenen eine leere Reihenfolge aufweisen (EMA-50 < EMA-100 < EMA-200). Im Gegensatz dazu verlangen die Leerlaufbedingungen einen RSI-14 über 69 und einen RSI-2 nach unten, um 90 zu brechen, und alle drei Linien haben eine mehrfache Reihenfolge (EMA: 50 > EMA-100 > EMA-200). Die Strategie verwendet 20-fache Hebelwirkung und berechnet die Anzahl der Geschäfte pro Handel basierend auf der aktuellen Positionsdynamik.

Strategische Vorteile

  1. Multi-Level-Verifizierung von technischen Kennzahlen zur Erhöhung der Signalsicherheit
  2. Dynamische Positionsverwaltung mit flexiblen Positionsanpassungen in Abhängigkeit von Marktbedingungen
  3. Zwei-Wege-Trading-Mechanismen, die in zwei Richtungen profitieren können
  4. Anpassung an die Stillstandsbedingungen und Vermeidung eines vorzeitigen Ausstiegs
  5. Graphische Oberfläche, die Handelssignale und Marktzustände klar darstellt
  6. Sicherungsmechanismen können die einseitige Risikobereitschaft verringern
  7. Risikokontrollen sind durch die Berechnung von dynamischen Positionen auf Basis von Interessen und Rechten sinnvoller.

Strategisches Risiko

  1. Ein hoher Leverage-Multiplex (etwa 20-mal) kann zu einem größeren Risiko für einen Ausbruch führen.
  2. Inkrementelle Positionen können bei starken Marktschwankungen zu schweren Verlusten führen.
  3. Ohne Stop-Loss-Bedingungen besteht die Gefahr eines anhaltenden Rückgangs
  4. Der RSI-Indikator kann in einem Seitwärtsmarkt falsche Signale erzeugen
  5. Eine Kombination aus mehreren technischen Indikatoren könnte zu weniger Handelsmöglichkeiten führen
  6. Positionsmanagement kann bei fortlaufenden gleichgewichteten Transaktionen zu hohem Risiko führen

Richtung der Strategieoptimierung

  1. Einführung von adaptiven Stop-Loss-Mechanismen wie ATR-basierten oder dynamischen Stop-Losses
  2. Optimierung der Leverage-Modalitäten, die in Abhängigkeit von dynamischen Marktfluktuationen berücksichtigt werden können
  3. Hinzufügen von Zeitfiltern, um den Handel während der niedrigen Schwankungen zu vermeiden
  4. Einführung von Verkehrsmesswerten zur Verbesserung der Signalsicherheit
  5. Optimierung der Multiplikation der Positionserhöhung, wobei die Einrichtung einer maximalen Positionsbeschränkung in Betracht gezogen werden kann
  6. Trendstärkefilter hinzugefügt, um den Handel mit schwachen Trends zu vermeiden
  7. Verbesserte Risikomanagementmechanismen, wie z. B. die Festlegung eines maximalen Tagesverlustes

Zusammenfassen

Es ist eine umfassende Strategie, die Dynamik und Trends kombiniert, um die Genauigkeit des Handels durch die Kombination von mehreren technischen Indikatoren zu verbessern. Die Innovation der Strategie besteht darin, dass eine dynamische Positionsverwaltung und ein Sicherungsmechanismus verwendet werden, aber gleichzeitig ein höheres Risiko mit sich bringt. Durch die Optimierung der Risikokontrollmechanismen und die Einführung von mehr Filterbedingungen wird die Strategie eine bessere Performance im tatsächlichen Handel erwarten.

Strategiequellcode
/*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