RSI-Lang-Kurz-Balance-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

img

Übersicht

Diese Strategie verwendet eine Kombination von RSI-Indikatoren in verschiedenen Zeitrahmen, um festzustellen, ob der aktuelle Markt überkauft oder überverkauft ist, und kombiniert die Beziehung zwischen Preis und gleitendem Durchschnitt, um Kauf- und Verkaufssignale zu generieren.

Strategie Logik

  1. Berechnen Sie die RSI-Werte der 5-minütigen, 15-minütigen und 1-stündigen Zeitrahmen. Wenn der 5-minütige, 15-minütige und 1-stündige RSI alle gleichzeitig unter 25 liegen, wird er als Überverkaufssituation beurteilt und erzeugt ein Kaufsignal. Wenn der 5-minütige, 15-minütige und 1-stündige RSI alle gleichzeitig über 75 liegen, wird er als Überkaufssituation beurteilt und erzeugt ein Verkaufssignal.

  2. Wenn der Preis unter dem gleitenden Durchschnitt liegt, wird ein Kaufsignal generiert. Wenn der Preis über dem gleitenden Durchschnitt liegt, wird ein Verkaufssignal generiert.

  3. Auf der Grundlage der aktuellen Position werden die anfängliche Handelsgröße und die Pyramidenregeln festgelegt: 2 Verträge für den ersten Eintrag und anschließend jedes Mal 1 Vertrag hinzugefügt, bis die Position 2 Verträge erreicht.

  4. Der Stop-Loss wird ausgelöst, wenn der Verlust 3% erreicht.

Vorteile

  1. Die Verwendung von RSI-Indikatoren über mehrere Zeitrahmen hinweg zur Bestimmung von Überkauf- und Überverkaufsbedingungen verbessert die Signalzuverlässigkeit.

  2. Die Kombination von gleitenden Durchschnitten erzeugt zusätzliche Handelssignale und erweitert die Handelsmöglichkeiten.

  3. Die Einstellung der Positionsgrößenkontrolle und der Gewinn-Verlust-Ratio für Stop-Loss und Take-Profit verwaltet Risiken.

  4. Die Skalierung mit einer festen Menge erweitert das Gewinnpotenzial.

Risiken

  1. RSI-Divergenzrisiko. Der Kurs kann für einen Zeitraum nach Erreichen des RSI-Überkauf- oder -Überverkaufsschwellenwerts anhalten, bevor er umkehrt.

  2. Bewegliche Durchschnittshandelssignale können irreführend sein. Bewegliche Durchschnittswerte verfehlen es, die Preisänderung während großer Kursschwankungen rechtzeitig zu verfolgen.

  3. Eine falsche Positionsgröße und eine falsche Gewinn-Verlust-Verhältnis-Einstellung führen zu einer unsachgemäßen Risikokontrolle.

  4. Um Verluste zu vermeiden, müssen die Pyramidenbedingungen angemessen festgelegt werden.

Optimierungsrichtlinien

  1. Anpassung der RSI-Parameter und Prüfung verschiedener Periodenkombinationen, um zuverlässigere Überkauf-/Überverkaufssignale zu finden.

  2. Verschiedene gleitende Durchschnitte als Hilfshandelssignale oder andere technische Indikatoren testen.

  3. Optimierung der Positionsgröße und der Stop-Loss-/Take-Profit-Regeln, um wissenschaftlichere Risikokontrollmechanismen zu schaffen.

  4. Optimieren Sie die Pyramidenbedingungen, um Verluste zu vermeiden.

Zusammenfassung

Diese Strategie verwendet den RSI über mehrere Zeitrahmen hinweg, um das Trendpotenzial zu bestimmen und eine höhere Gewinnrate zu erzielen. Zusätzliche Signale werden mit gleitenden Durchschnitten generiert, um die Handelsmöglichkeiten zu erweitern. Das Risiko wird durch Positionsgrößen, Stop-Loss/Take-Profit und Festmenge-Pyramiden verwaltet. Insgesamt kombiniert diese Strategie Trend- und Mittelumkehrindikatoren, beinhaltet sowohl Trend-Nachfolgungs- als auch Bottom-Picking-Logik und ist während der Konsolidierung wirksam. Weitere Tests und Optimierungen sind erforderlich, um eine robustere Risikokontrolle für eine konsistentere Leistung zu schaffen.


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

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()

Mehr