Renko et l'indice de vigueur relative Suivre la stratégie

Auteur:ChaoZhang est là., Date: 2024-02-04 15h49: 19
Les étiquettes:

img

Résumé

Cette stratégie combine les graphiques Renko et l'indice de vigueur relative (RVI) pour capturer la plupart des principales tendances du marché.

La logique de la stratégie

La stratégie construit des briques Renko basées sur l'ATR de 9 périodes. Une nouvelle brique verte est construite lorsque le prix de clôture dépasse le plus haut de la brique précédente. Une nouvelle brique rouge est construite lorsque le prix de clôture tombe en dessous du plus bas de la brique précédente. La direction de tendance est déterminée par l'indicateur RVI.

Le RVI oscille entre 0 et 1 pour mesurer la force relative entre la pression d'achat et de vente. Au-dessus de 0,5 représente une pression d'achat plus forte tandis qu'en dessous de 0,5 représente une pression de vente plus forte.

Combinez la direction de la brique Renko et les signaux RVI pour entrer des positions longues ou courtes.

Les avantages

  1. Les briques Renko filtrent le bruit normal du marché et ne réagissent qu'à un mouvement significatif des prix, évitant les coups de fouet.
  2. Le RVI aide à identifier l'inversion de tendance, confirmant ainsi les signaux de négociation.
  3. La combinaison de deux indicateurs élimine un certain bruit et permet de détecter les principales tendances.

Les risques

  1. La taille des briques affecte directement la fréquence des transactions.
  2. Des paramètres RVI incorrects peuvent provoquer des signaux manquants ou plus de faux signaux.
  3. Le double filtrage manque une occasion de négocier.

Amélioration

  1. Taille dynamique de la brique pour s'adapter à la volatilité changeante.
  2. Optimisez les paramètres RVI pour trouver le meilleur équilibre.
  3. Testez la stabilité à travers différents symboles et délais.

Conclusion

Cette stratégie combine deux types d'indicateurs différents pour capturer les tendances majeures. Une optimisation supplémentaire des paramètres Renko et RVI peut améliorer la stabilité. Aucun modèle n'est parfait et le manque de certains métiers est inévitable. Les utilisateurs doivent évaluer leurs propres préférences en matière de risque et choisir la bonne combinaison de symboles / paramètres.


/*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")

Plus de