Stratégie de trading de suivi des signaux manqués basée sur le RSI inversé


Date de création: 2023-09-28 10:54:24 Dernière modification: 2023-09-28 10:54:24
Copier: 1 Nombre de clics: 693
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie permet de réaliser des revers en suivant les signaux de survente et de survente manqués par le RSI. Lorsque l’indicateur RSI recule de la zone de survente, il génère des signaux de suivi.

Principe de stratégie

Signal détecté

L’indicateur RSI est utilisé pour juger si le RSI est en sur-achat ou en sur-vente.

overbought = rsi > uplimit 
oversold = rsi < dnlimit

Si un précédent K-line RSI était en cours d’excédent, le K-line RSI actuel sort de l’excédent, générant un signal de suiviup1; si un précédent K-line RSI était en survente, l’indicateur K-line RSI actuel sort de l’état de survente, générant un signal de suividn1

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false 

Retrait de la décision

Un signal de sortie est émis lorsque la direction du portefeuille correspond à la direction de l’entité en ligne K et que l’entité dépasse la moitié de sa moyenne de 10 cycles.

exit = (((strategy.position_size > 0 and bar == 1) or 
         (strategy.position_size < 0 and bar == -1)) and 
        body > abody / 2)

Avantages stratégiques

  1. Le RSI est un indicateur qui permet de suivre les signaux négatifs et d’éviter les difficultés de saisir les points d’achat et de vente.

  2. L’indicateur RSI est un indicateur de rétrogradation qui permet de saisir les opportunités de rétrogradation.

  3. Le jugement de sortie est effectué en fonction de la direction et de la taille de l’entité de la ligne K, afin d’éviter la poursuite après le rebond.

Les risques et les solutions

  1. Le risque de faux signaux du RSI

    • La solution: vérifier les données en les combinant avec d’autres indicateurs pour éviter les erreurs.
  2. Le risque de perte est élevé si le prix a déjà été ajusté au moment de suivre les signaux.

    • La solution: réduire la position d’entrée ou optimiser le moment de l’entrée.
  3. Une reprise partielle risque d’émettre un signal de sortie

    • La solution: optimiser la logique de décision de sortie et améliorer les chances de rentabilité de la position.

Optimiser les idées

  1. Les paramètres d’optimisation sont définis, tels que la ligne de survente, le cycle de révision, etc., adaptés aux différents marchés.

  2. Modifier la gestion de la position, par exemple en réduisant la position lors du suivi des signaux.

  3. Optimiser le temps d’entrée, ajouter d’autres restrictions conditionnelles basées sur le suivi des signaux.

  4. Optimiser les méthodes de retrait pour améliorer la probabilité de gagner, par exemple en introduisant des arrêts mobiles.

  5. Optimiser les méthodes de stop loss pour réduire le risque de pertes, comme l’introduction de stop loss mobile, stop loss en forme de sphéroïde, etc.

Résumer

Cette stratégie est basée sur les signaux de sur-achat et de sur-vente basés sur l’indicateur RSI pour permettre le suivi des transactions de revers. La stratégie a l’avantage de suivre les signaux de revers, mais il existe également un certain risque de faux signaux et de pertes. La stabilité et le rendement de la stratégie peuvent être encore améliorés par une optimisation continue.

Code source de la stratégie
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//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, %")
rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
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
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit = 100 - rsilimit1
dnlimit = rsilimit1

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

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overbought = rsi > uplimit
oversold = rsi < dnlimit

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
up2 = bar == -1 and strategy.position_size > 0 and overbought == false
dn2 = bar == 1 and strategy.position_size < 0 and oversold == false

norma = overbought == false and oversold == false
exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : 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, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    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()