Stratégie de percée du double RSI rapide

Auteur:ChaoZhang est là., Date: 2023-11-07 16h56: 39
Les étiquettes:

img

Résumé

Cette stratégie utilise plusieurs indicateurs RSI pour mettre en œuvre des percées de prix afin de générer des signaux d'entrée et de sortie plus précis.

La logique de la stratégie

La stratégie définit deux groupes de paramètres RSI, l'un avec une période de 7 et une limite de 25, l'autre avec une période de 14 et une limite de 25.

La stratégie calcule d'abord les valeurs des deux indicateurs RSI, puis juge si le prix franchit la limite supérieure ou inférieure du RSI. S'il franchit la limite supérieure, un signal long est généré. S'il franchit la limite inférieure, un signal court est généré.

Si vous avez déjà une position, il continue de juger si le RSI actuel est dans la plage normale.

La stratégie utilise également le système de Martingale. La taille de l'ordre double après chaque perte.

Analyse des avantages

  • L'utilisation de deux indicateurs RSI permet de mieux juger les signaux de percée et d'éviter les faux signaux.

  • En outre, la vérification de la percée du corps évite les mauvaises transactions lors de la consolidation.

  • Martingale aide à arrêter la perte rapidement après les pertes.

  • Les paramètres RSI personnalisables optimisent les opportunités d'entrée.

  • Les sessions de négociation peuvent être limitées pour éviter les effets d'événements majeurs.

Analyse des risques

  • Le double RSI ne peut pas éviter complètement une fausse percée.

  • Martingale augmente sa position après des pertes, risque de faire exploser.

  • Le coût de négociation n'est pas pris en compte.

  • Trop de paramètres optimisables nécessitent beaucoup de tests pour trouver la meilleure combinaison.

Peut définir un stop loss pour limiter les pertes; optimiser les paramètres du RSI; ajouter une considération des coûts; assouplir les critères de percée.

Directions d'optimisation

  • Ajouter un stop loss pour limiter la perte maximale.

  • Optimiser les paramètres du RSI pour réduire les faux signaux.

  • Considérez l'impact sur les coûts de négociation pour éviter une survente.

  • Détendez les critères de découverte pour plus d'opportunités.

  • Ajoutez plus de filtres pour éviter d'être pris au piège.

Résumé

Cette stratégie utilise le double RSI pour déterminer la percée des prix, ajoute un filtre de percée du corps pour éviter les fouets. Elle utilise également le Martingale pour réduire rapidement les pertes. La stratégie peut être améliorée en optimisant les paramètres et en ajoutant des filtres pour des signaux plus précis. La gestion des risques est importante pour limiter les pertes. Dans l'ensemble, cette stratégie fournit un système de percée relativement stable adapté au trading à haute efficacité.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//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, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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 #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

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

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

Plus de