Renko und Relative Vigor Index Trend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-04 15:49:19
Tags:

img

Übersicht

Diese Strategie kombiniert die Renko-Charts und den Relative Vigor Index (RVI), um die meisten wichtigen Markttrends zu erfassen.

Strategie Logik

Die Strategie konstruiert Renko-Ziegel auf der Grundlage von 9 Perioden ATR. Ein neuer grüner Ziegel wird konstruiert, wenn der Schlusskurs den vorherigen Ziegelhoch übersteigt. Ein neuer roter Ziegel wird konstruiert, wenn der Schlusskurs unter den vorherigen Ziegeltief fällt. Die Trendrichtung wird durch den RVI-Indikator bestimmt.

RVI schwingt zwischen 0-1 um die relative Stärke zwischen Kauf- und Verkaufsdruck zu messen. Über 0,5 repräsentiert einen stärkeren Kaufdruck, während unter 0,5 einen stärkeren Verkaufsdruck darstellt.

Kombinieren Sie die Renko-Brick-Richtung und RVI-Signale, um entsprechend Long- oder Short-Positionen einzugeben.

Vorteile

  1. Renko-Ziegel filtern normale Marktgeräusche aus und reagieren nur auf signifikante Preisbewegungen und vermeiden Whipsaws.
  2. RVI hilft bei der Identifizierung von Trendumkehrungen und bestätigt damit die Handelssignale weiter.
  3. Durch die Kombination zweier Indikatoren wird ein gewisses Maß an Lärm ausgeschlossen und es ist möglich, wichtige Trends zu erfassen.

Risiken

  1. Die Größe der Ziegel beeinflusst direkt die Handelsfrequenz. Zu große Ziegel können Gelegenheit verpassen, während zu kleine Kosten erhöhen.
  2. Fehlende RVI-Parameter können fehlende Signale oder mehr falsche Signale verursachen.
  3. Doppelfilterung verpasst einige Handelschancen.

Erweiterung

  1. Dynamische Ziegelgröße zur Anpassung an die sich ändernde Volatilität.
  2. Optimieren Sie die RVI-Parameter, um die beste Balance zu finden.
  3. Stabilität bei verschiedenen Symbolen und Zeitrahmen testen.

Schlussfolgerung

Diese Strategie kombiniert zwei verschiedene Arten von Indikatoren, um wichtige Trends zu erfassen. Eine weitere Optimierung der Renko- und RVI-Parameter kann die Stabilität verbessern. Kein Modell ist perfekt und es ist unvermeidlich, einige Trades zu verpassen. Benutzer müssen ihre eigene Risikopräferenz bewerten und die richtige Symbol- / Parameterkombination auswählen.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Lancelot RR Strategy", overlay=false)
p=9
CO=close-open
HL=high-low
value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6
value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6
num=sum(value1,p)
denom=sum(value2,p)
RVI=denom!=0?num/denom:0
RVIsig=(RVI+ 2*RVI[1] + 2*RVI[2] + RVI[3])/6

rvicloselongcondition = crossunder(RVI, RVIsig)
rvicloseshortcondition = crossover(RVI, RVIsig)

plot(RVI,color=green,style=line,linewidth=1)
plot(RVIsig,color=red,style=line,linewidth=1)
bgcolor(rvicloseshortcondition ? green : na, transp = 75)
bgcolor(rvicloselongcondition ? red : na, transp = 75)

///Renko///
TF = input(title='TimeFrame', defval="D")
ATRlength = input(title="ATR length",  defval=9, minval=2, maxval=100)
SMAlength = input(title="SMA length",  defval=5, minval=2, maxval=100)
SMACurTFlength = input(title="SMA CurTF length",  defval=20, minval=2, maxval=100)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, atr(ATRlength))
SMA = request.security(syminfo.tickerid, TF, sma(close, SMAlength))
SMACurTF = sma(close, SMACurTFlength)

RENKOUP = na
RENKODN = na
H = na
COLOR = na
BUY = na
SELL = na
UP = na
DN = na
CHANGE = na

RENKOUP := na(RENKOUP[1]) ? ((HIGH+LOW)/2)+(ATR/2) : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? ((HIGH+LOW)/2)-(ATR/2) : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP-RENKODN : RENKOUP[1]-RENKODN[1]
COLOR := na(COLOR[1]) ? white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

if(not CHANGE and close >= RENKOUP[1]+H*3)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*3
    RENKODN := RENKOUP[1]+ATR*2
    COLOR := lime
    SELL := 0
    BUY := BUY+3

if(not CHANGE and close >= RENKOUP[1]+H*2)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*2
    RENKODN := RENKOUP[1]+ATR
    COLOR := lime
    SELL := 0
    BUY := BUY+2

if(not CHANGE and close >= RENKOUP[1]+H)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR
    RENKODN := RENKOUP[1]
    COLOR := lime
    SELL := 0
    BUY := BUY+1

if(not CHANGE and close <= RENKODN[1]-H*3)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*3
    RENKOUP := RENKODN[1]-ATR*2
    COLOR := red
    BUY := 0
    SELL := SELL+3

if(not CHANGE and close <= RENKODN[1]-H*2)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*2
    RENKOUP := RENKODN[1]-ATR
    COLOR := red
    BUY := 0
    SELL := SELL+2

if(not CHANGE and close <= RENKODN[1]-H)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR
    RENKOUP := RENKODN[1]
    COLOR := red
    BUY := 0
    SELL := SELL+1
    
plotshape(UP, style=shape.arrowup, location=location.bottom, size=size.normal)

renkolongcondition = UP
renkoshortcondition = DN

///Long Entry///
longcondition = UP
if (longcondition)
    strategy.entry("Long", strategy.long)
    
///Long exit///
closeconditionlong = rvicloselongcondition
if (closeconditionlong)
    strategy.close("Long")

Mehr