Schnelle RSI-Risikokontrolle Kompound-Futures-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-13 11:36:34
Tags:

img

Übersicht

Diese Strategie wurde für die Spot-Handelsplattform BitMEX entwickelt. Durch die Analyse des schnellen RSI-Indikators und die Kombination mehrerer technischer Indikatoren zu Screensignalen wird ein effizienter Trend-Tracking-Handel realisiert. Die Strategie legt auch Risikomanagement- und Stop-Loss-Mechanismen fest, um Handelsrisiken effektiv zu kontrollieren.

Strategie Logik

  1. Berechnen Sie den schnellen RSI mit Parametern von 7 Tagen und der überkauften Linie 25, der überverkauften Linie 75. Wenn der RSI über die überkaufte Linie geht, ist es ein überkauftes Signal. Wenn der RSI unter die überverkaufte Linie geht, ist es ein überverkauftes Signal.

  2. Ein Filter auf den Leib des Kerzenhölzers setzen. Erfordert die Öffnung als bärische Kerze mit einer Leiblänge von mindestens 20% der durchschnittlichen Leiblänge von gestern.

  3. Setzen Sie den Filter auf die Kerzenfarbe, wobei die letzten 4 Kerzen bei einem Short als bearish und die letzten 4 Kerzen bei einem Long als bullish betrachtet werden.

  4. Stellen Sie die Stop-Loss-Logik ein. Schließen Sie die Position, wenn sich der Preis in ungünstige Richtung bewegt.

  5. Setzen Sie den Anti-Whipsaw-Mechanismus ein. Nehmen Sie nur ein Signal an, wenn sich der Preis erholt, um den Verlust nach dem ersten Zug zu stoppen.

  6. Setzen Sie die Positionsgröße fest. Verwenden Sie einen festen Kapitalanteil für jeden Trade und verdoppeln Sie die Positionsgröße nach jedem Verlust.

Analyse der Vorteile

  1. Schnelle RSI-Parameter, die vernünftigerweise eingestellt sind, können Trends schnell erfassen.

  2. Ein mehrschichtiger Filter erhöht die Gewinnrate, indem er die Anzahl der Trades reduziert.

  3. Ein integrierter Stop-Loss-Mechanismus, der Grenzwerte pro Handelsverlust festlegt.

  4. Eine dynamische Positionsgrößerung ermöglicht ein moderat aggressives Kapitalmanagement.

  5. Ein anpassbarer Handelszeitrahmen verhindert Lärm durch große Ereignisse.

Risiken und Optimierungen

  1. Hohe Geschwindigkeit kann einige Handelsmöglichkeiten verpassen.

  2. Es ist schwierig, das Ende des Trends zu bestimmen.

  3. Position Größe Methode zu aggressiv, kann Verriegelung Position Weg einführen.

  4. Kann Parameter für verschiedene Märkte optimieren, um bessere Parameterkombinationen zu finden.

Schlussfolgerung

Insgesamt ist diese Strategie ziemlich robust. Durch das Beurteilen der Trendrichtung mit schnellen RSI und das Filtern von Signalen mit mehreren Indikatoren kann sie während der Trends gute Renditen erzielen. Auch die Strategie hat Raum für Optimierung. Durch Anpassung von Parameterkombinationen kann sie sich an verschiedene Marktumgebungen anpassen und somit eine gute Praktikabilität haben.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma Filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr