Stratégie de négociation de contrats à terme composés de contrôle rapide des risques RSI

Auteur:ChaoZhang est là., Date: le 13 novembre 2023
Les étiquettes:

img

Résumé

Cette stratégie est conçue pour la plate-forme de trading au comptant BitMEX. En analysant l'indicateur RSI rapide et en combinant plusieurs indicateurs techniques pour afficher des signaux, elle réalise un trading efficace de suivi des tendances.

La logique de la stratégie

  1. Calculez le RSI rapide avec des paramètres de 7 jours et la ligne 25 surachetée, la ligne 75 survendue. Lorsque le RSI traverse la ligne surachetée, c'est un signal de surachat. Lorsque le RSI traverse en dessous de la ligne survendue, c'est un signal de survente.

  2. Mettez le filtre sur le corps du chandelier. Il faut ouvrir comme une bougie baissière avec une longueur du corps pas inférieure à 20% de la longueur moyenne du corps d'hier.

  3. Réglez le filtre sur la couleur du chandelier. Exigez que les 4 dernières bougies soient baissières lorsque vous allez court, et les 4 dernières bougies comme haussières lorsque vous allez long.

  4. Mettez la logique de stop loss. Fermez la position lorsque le prix se déplace dans une direction défavorable.

  5. Mettez en place un mécanisme anti-serre à ciseaux, ne recevez le signal que lorsque le prix se redresse pour arrêter la perte après le premier mouvement.

  6. Utilisez un pourcentage fixe de capital pour chaque transaction et doublez la taille de la position après chaque perte.

Analyse des avantages

  1. Les paramètres RSI rapides définis de manière raisonnable peuvent rapidement capturer les tendances.

  2. Le filtre multicouche augmente le taux de victoire en réduisant le nombre de transactions.

  3. Le mécanisme de stop loss intégré limite les pertes par transaction.

  4. Le dimensionnement dynamique des positions permet une gestion modérément agressive du capital.

  5. Un calendrier de négociation personnalisable évite le bruit des événements majeurs.

Risques et optimisations

  1. La vitesse élevée peut manquer certaines opportunités commerciales, peut assouplir les paramètres pour plus de flexibilité.

  2. Difficile de déterminer la fin de la tendance, il est possible de combiner avec d'autres indicateurs pour détecter les éventuels retours en arrière.

  3. La méthode de dimensionnement de la position est trop agressive, peut introduire un verrouillage de la position.

  4. Peut optimiser les paramètres pour différents marchés afin de trouver de meilleures combinaisons de paramètres.

Conclusion

Dans l'ensemble, cette stratégie est assez robuste. En jugeant la direction de la tendance avec un RSI rapide et en filtrant les signaux avec plusieurs indicateurs, elle peut obtenir de bons rendements pendant les tendances. La stratégie a également une marge d'optimisation. En ajustant les combinaisons de paramètres, elle peut s'adapter à différents environnements de marché, ce qui est pratique.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.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(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma 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")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//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 up
    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 dn
    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()

Plus de