Handelsstrategie für RSI-Indikatoren

Schriftsteller:ChaoZhang, Datum: 2024-01-29 11:42:46
Tags:

img

Übersicht

Die RSI-Indikator-Grid-Handelsstrategie integriert die RSI- und CCI-Technischen Indikatoren mit einem Fixed-Grid-Handelsansatz. Sie verwendet die Werte der RSI- und CCI-Indikatoren, um Eingangssignale zu bestimmen, und setzt Gewinnordern und zusätzliche Grid-Orders an, die auf einer festen Gewinnquote und Anzahl von Gittern basieren. Die Strategie beinhaltet auch einen Absicherungsmechanismus gegen volatile Preisbewegungen.

Strategie Logik

Einreisebedingungen

Die langen Signale werden erzeugt, wenn der 5-minütige und der 30-minütige RSI unter den Schwellenwerten liegen und der 1-Stunden-CCI unter dem Schwellenwert liegt. Der aktuelle Schlusskurs wird als Einstiegspreis erfasst und die Größe der ersten Order wird anhand des Kontobetrags und der Anzahl der Gitter berechnet.

Nimm Gewinnbedingungen

Der Take-Profit-Preis wird anhand des Einstiegspreises und der Zielgewinnquote berechnet.

Bedingungen für die Netzeingabe

Nach der ersten Bestellung werden die verbleibenden Festgrößengitterbestellungen nacheinander platziert, bis die angegebene Anzahl von Netzen erreicht ist.

Sicherungsmechanismus

Wenn der Preis ab dem Zeitpunkt des Eintritts über den festgelegten Absicherungsschwellenprozentsatz steigt, werden alle offenen Positionen abgesichert, indem sie geschlossen werden.

Umkehrmechanismus

Wenn der Preis ab dem Zeitpunkt des Eintritts über den festgelegten Umkehrschwellenprozentsatz fällt, werden alle ausstehenden Aufträge storniert, um auf neue Eintrittsmöglichkeiten zu warten.

Analyse der Vorteile

  • Kombination von RSI- und CCI-Indikatoren zur Verbesserung der Rentabilität
  • Festnetzziele Gewinnbindung zur Gewissheitssteigerung
  • Integrierte Absicherungsmaßnahmen gegen volatile Kursschwankungen
  • Umkehrmechanismus verringert Verluste

Risikoanalyse

  • Falsche Signale der Indikatoren
  • Preisspitzen durchdringen Absicherungsschwellen
  • Nicht erneute Eingabe bei Umkehrungen

Diese können durch Anpassung der Indikatorparameter, Erweiterung des Absicherungsbereichs und Verringerung des Umkehrbereichs gemildert werden.

Verbesserungsbereiche

  • Test mehr Indikatorkombinationen
  • Anpassungsfähige Gewinnentnahme in Forschung
  • Optimierung der Gitterlogik

Schlussfolgerung

Die RSI-Grid-Strategie bestimmt Einträge mit Indikatoren und sperrt in stabile Gewinne, indem sie festes Netz nutzt, um Gewinne und Einträge zu erzielen. Sie beinhaltet auch Volatilitätssicherung und Wiedereintritt nach Umkehrungen. Die Integration mehrerer Mechanismen hilft, Handelsrisiken zu reduzieren und die Rentabilitätsraten zu erhöhen. Weitere Optimierungen von Indikatoren und Einstellungen können die Live-Performance verbessern.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI/CCI Strategy with Fixed Grid", shorttitle="INVESTCOIN_RSI_CCI_Fixed_Grid", overlay=true)

// Input parameters
input_rsi_5min_value = 55
input_rsi_30min_value = 65
input_cci_1hr_value = 85
input_profit_target_percent = 0.6 // Target profit in percentage
input_grid_size = 15 // Number of orders in grid
input_hedging_percent = 20 // Percentage price change for hedging
input_first_order_offset = 0.2 // Offset for the first order in percentage
input_reversal_percent = 0.4 // Percentage price change for reversal

// Calculating the RSI and CCI values
rsi_5min = ta.rsi(close, 5)
rsi_30min = ta.rsi(close, 30)
cci_1hr = ta.cci(close, 60)

// Define strategy conditions based on the provided screenshot
long_condition = (rsi_5min < input_rsi_5min_value) and (rsi_30min < input_rsi_30min_value) and (cci_1hr < input_cci_1hr_value)

// Plot signals
plotshape(series=long_condition, title="Long Entry Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

// Initialize a variable to store the entry price
var float entry_price = na

// Initialize a variable to store the profit target
var float profit_target = na

// Hedge condition based on price change percentage
var float hedge_price = na

// Initialize a variable to count the total number of orders
var int total_orders = 0

// Calculate the initial order size based on account equity and grid size
var float initial_order_size = 1 / input_grid_size / 100

// Entry orders with fixed size
if (long_condition and total_orders < 9000)
    // Place first order with an offset
    if total_orders == 0
        strategy.order("First Long", strategy.long, qty=initial_order_size, limit=close * (1 - input_first_order_offset / 100))
    total_orders := total_orders + 1
    
    // Place remaining grid orders
    for i = 1 to input_grid_size - 1
        if (total_orders >= 9000)
            break // Stop if max orders reached
        strategy.entry("Long_" + str.tostring(i), strategy.long, qty=initial_order_size)
        total_orders := total_orders + 1

// Calculate the profit target in currency
if (long_condition)
    entry_price := close // Store the entry price when the condition is true

if (not na(entry_price))
    profit_target := entry_price * input_profit_target_percent / 100 // Calculate the profit target

// Setting up the profit target
if (not na(profit_target))
    strategy.exit("Take Profit", "Long", limit=entry_price + profit_target)

// Hedge by closing all positions if the price increases by the hedging percentage
if (strategy.position_size > 0)
    hedge_price := close * (1 + input_hedging_percent / 100)

if (not na(hedge_price) and close >= hedge_price)
    strategy.close_all(comment="Hedging")


// Reversal condition based on the price change percentage
var float reversal_price = na

if (strategy.position_size > 0 and total_orders > 1) // Check if at least one grid order has been placed
    reversal_price := entry_price * (1 - input_reversal_percent / 100)

// Cancel trades and wait for a new entry point if the price reverses by the specified percentage
if (not na(reversal_price) and close <= reversal_price)
    strategy.cancel_all()
    total_orders := 0 // Reset the total orders count after cancellation

Mehr