Les ressources ont été chargées... Je charge...

Stratégie d'inversion de l'impulsion du RSI

Auteur:ChaoZhang est là., Date: 2023-11-07 15h45 et 15h
Les étiquettes:

img

Résumé

La stratégie d'inversion de l'impulsion du RSI identifie les conditions de surachat et de survente en combinant les indicateurs du RSI et les directions du corps du chandelier pour le trading d'inversion.

La logique de la stratégie

La stratégie est principalement mise en œuvre à travers les éléments suivants:

  1. Indicateur RSI de Connors

    Calcule le RSI conventionnel, le RSI Win Ratio et le RSI Parisien pour obtenir le RSI de Connors en moyenne.

  2. Indicateur RSI rapide

    Utilise les variations de prix pour calculer le RSI rapide, reflétant les cycles à très court terme.

  3. Filtre du corps du chandelier

    Il faut un corps haussier pour le long et un corps baissier pour le court pour éviter de fausses ruptures.

  4. Conditions longues et courtes

    Allez long quand Connors RSI est en dessous de 20 et rapide RSI en dessous de 25 avec un corps haussier.

    Allez court quand Connors RSI supérieur à 80 et rapide RSI supérieur à 75 avec un corps baissier.

  5. Sortie de stop-loss

    Sort avec stop loss lorsque le corps du chandelier tourne.

Connors RSI identifie les points d'inversion de tendance à long terme, le RSI rapide identifie les inversions à court terme et le corps de chandelier garantit la validité des ruptures.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Combinaison d'indicateurs à long et à court terme

    L'indicateur RSI de Connors reflète les cycles à long terme et l'indicateur RSI rapide reflète les cycles à court terme, combinant les deux pour identifier avec précision les points d'inversion.

  2. Filtre du corps du chandelier

    Le fait de ne négocier que sur les écarts corporels peut réduire les pertes des faux écarts.

  3. Paramètres réglables

    Les paramètres RSI, les produits de négociation et les délais de négociation peuvent être librement ajustés en fonction des différents marchés.

  4. Simple et intuitive

    RSI et corps de chandelier sont des indicateurs de base, logique facile à comprendre.

  5. Facile à mettre en œuvre

    Utilise uniquement des indicateurs intégrés, nécessite peu de code et est facile à mettre en œuvre.

Analyse des risques

Les principaux risques de cette stratégie:

  1. Risque d'échec du renversement

    Le prix continue la tendance initiale après le signal d'inversion, conduisant à des pertes.

  2. Risque de marché variable

    Des signaux inefficaces fréquents déclenchés sur des marchés variés.

  3. Risque de fausse rupture

    Le filtre du corps du chandelier ne peut pas éviter complètement les fausses éruptions.

  4. Risque par paramètre

    Les paramètres RSI inappropriés peuvent manquer des transactions ou déclencher plusieurs transactions inefficaces.

  5. Risque lié aux conditions particulières du marché

    Les indicateurs RSI peuvent échouer et générer des signaux incorrects dans des conditions spéciales de marché.

Directions d'optimisation

La stratégie peut être optimisée par les aspects suivants:

  1. Ajouter des mécanismes de stop loss

    Optimiser les stratégies d'arrêt des pertes pour des arrêts plus raisonnables, réduisant les pertes d'une seule transaction.

  2. Intégrer plusieurs indicateurs

    Ajoutez des filtres comme MACD et KD pour rendre les signaux plus fiables.

  3. Ajouter des filtres de probabilité

    Combiner l'analyse de tendance, le support/résistance pour éviter les transactions à faible probabilité.

  4. Optimiser les paramètres

    Les paramètres doivent être testés sur différents produits et dans des délais différents afin de trouver des valeurs optimales.

  5. Évitez les conditions particulières du marché

    Identifiez et évitez de négocier dans des conditions spéciales de marché pour éviter de grosses pertes.

Conclusion

La stratégie d'inversion de l'impulsion du RSI identifie les inversions à long et à court terme en utilisant le Connors RSI et le RSI rapide, avec des filtres de corps de bougies pour augmenter la validité du signal. Les avantages tels que les combinaisons d'indicateurs et les paramètres réglables permettent de capturer les inversions et de négocier contre-tendance en cas de surachat ou de survente.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.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(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-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")

//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
    roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3

//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false

//Signals

up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body

//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 ((up1 or up2) and usemod == false) or (up1 and up2 and usemod)
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod)
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Plus de