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

Stratégie de percée rapide des indices de risque

Auteur:ChaoZhang est là., Date: 2023-10-24 11:51:56 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie met en œuvre des opérations de percée rapide basées sur l'indicateur RSI et l'EMA des corps de chandeliers.

La logique de la stratégie

  1. Calculer l'indicateur RSI avec la période 7 et utiliser le RMA pour l'accélération.

  2. Calculer l'EMA de la taille du corps du chandelier avec la période 30 comme référence pour la taille du corps.

  3. Si le RSI dépasse la ligne limite (par défaut 30) et que le corps de la bougie actuelle est supérieur à 1/4 de la taille moyenne du corps, passez long.

  4. Si l'indicateur RSI dépasse la ligne limite (défaut 70) et que le corps de la bougie actuelle est supérieur à 1/4 de la taille moyenne du corps, passez à la vente.

  5. Si vous êtes déjà en position, fermez lorsque l'indicateur RSI franchit la ligne limite.

  6. Des paramètres tels que la longueur du RSI, la limite, le prix de référence peuvent être configurés.

  7. Des paramètres tels que la période EMA du corps, le multiplicateur de chroot de position ouverte peuvent être configurés.

  8. Le nombre de passages RSI peut être configuré.

Analyse des avantages

  1. Utiliser l'attribut de renversement de l'indicateur RSI pour capturer les renversements en temps opportun.

  2. La RMA accélère la formation de l'indice RSI pour des renversements plus sensibles.

  3. Filtrer les consolidations de petite portée avec de grands corps de chandeliers.

  4. Des données de backtest suffisantes assurent la fiabilité.

  5. Les paramètres personnalisables s'adaptent aux différents environnements du marché.

  6. Une logique simple et claire.

Analyse des risques

  1. RSI a un biais de backtest, la performance réelle à valider.

  2. Les grands organismes ne peuvent pas filtrer complètement les marchés agités.

  3. Les paramètres par défaut peuvent ne pas convenir à tous les produits, une optimisation est nécessaire.

  4. Le taux de victoire peut ne pas être élevé, besoin de supporter des pertes consécutives mentalement.

  5. Risque d'échec de la percée, besoin d'un stop loss en temps opportun.

Directions d'optimisation

  1. Optimiser les paramètres du RSI pour différentes périodes et produits.

  2. Optimisez la période d'EMA du corps pour la taille du corps.

  3. Optimisez le multiplicateur pour les positions ouvertes pour contrôler la fréquence d'entrée.

  4. Ajoutez un stop-loss mobile pour assurer le taux de gain.

  5. Ajouter un filtre de tendance pour éviter les transactions contre tendance.

  6. Optimiser la gestion de l'argent pour le contrôle des risques.

Conclusion

En résumé, il s'agit d'une stratégie d'inversion très simple et directe. Elle utilise à la fois l'attribut d'inversion du RSI et l'élan des grands corps de bougies pour entrer rapidement pendant les inversions du marché. Bien que les résultats des backtests semblent bons, les performances réelles doivent encore être validées. L'optimisation des paramètres et le contrôle des risques sont nécessaires lors de son application.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.2", shorttitle = "Fast RSI str 1.2", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars")
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")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), rsiperiod)
fastdown = rma(-min(change(rsisrc), 0), rsiperiod)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
ur = fastrsi > uplimit
dr = fastrsi < dnlimit
uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0
dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0

//Body
body = abs(close - open)
emabody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 4
dn = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 4
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()

Plus de