Cet article explique en détail une stratégie de trading quantitative qui utilise l'indicateur RSI pour générer des signaux de trading.
I. Logique stratégique
La logique de négociation principale est la suivante:
Calculer l'indicateur RSI(14) et l'assouplir à l'aide de l'EMA(28) pour obtenir l'oscillateur traité.
Calculer les bandes de Bollinger sur le RSI traité pour obtenir les bandes supérieures/inférieures.
Lorsque le RSI traité traverse en dessous de la ligne d'entrée, un signal d'achat est généré.
Lorsque l'indicateur entre dans les zones de surachat/survente, un signal de position close est généré.
De cette façon, les caractéristiques du RSI peuvent être utilisées pour saisir les opportunités d'inversion.
II. Avantages de la stratégie
Le plus grand avantage est l'accroissement de l'espace de réglage des paramètres grâce au traitement des indicateurs, ce qui permet un contrôle plus strict de la fréquence des transactions et empêche une survente.
Un autre avantage est les critères d'entrée intuitifs basés sur des valeurs numériques claires de l'indicateur.
Enfin, la fourchette suracheté/survendu permet également de réaliser des bénéfices en temps opportun et de contrôler les risques par transaction.
III. Les faiblesses potentielles
Toutefois, la stratégie comporte également les risques suivants:
Tout d'abord, le RSI se concentre sur les transactions d'inversion, qui peuvent générer de faux signaux pendant les tendances.
Deuxièmement, un ajustement inapproprié des paramètres peut également conduire à une optimisation excessive et à une incapacité à s'adapter aux conditions changeantes du marché.
Enfin, le taux de réussite relativement faible expose également la stratégie à des risques de retrait.
IV. Résumé
En résumé, cet article présente principalement une stratégie de trading quantitative utilisant l'indicateur RSI. Il contrôle la fréquence des transactions via l'ajustement des paramètres et a des règles d'entrée/sortie claires. Tout en optimisant les paramètres, les risques de trading inversés doivent également être gérés.
/*backtest start: 2023-08-14 00:00:00 end: 2023-09-13 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //----------------------------------------------------------------- //This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below: //----------------------------------------------------------------- //1.Define Oscillator Line //+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe //2.Define Overbought and Oversold //+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b //+ Overbought Zone marked above level 0.8 //+ Oversold Zone marked below level 0.2 //3.Buy Signal //+ Entry Long Positon when %b crossover Point of Entry Long //+ Deafault Point of Entry Long is 0.2 //+ Buy signal marked by Green dot //4.Sell Signal //+ Entry Short Position when %b crossunder Point of Entry Short //+ Deafault Point of Entry Short is 0.8 //+ Sell signal marked by Red dot //5.Exit Signal //+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone //+ Exit signal marked by Yellow dot //----------------------------------------------------------------- strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false) //RSI rsi_gr="=== RSI ===" rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr) smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr) rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len) //rsi's BOLLINGER BANDS pb_gr="=== %b ===" length = input(80, title = "Length",inline="set1",group=pb_gr) rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr) ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr) ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr) et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr) et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr) [rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult) //rsi's %B rsipB = ((rsi - rsilower) / (rsiupper - rsilower)) plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1) h1=hline(1,color=color.new(color.red,100)) h4=hline(ovb,color=color.new(color.red,100)) h0=hline(0,color=color.new(color.green,100)) h3=hline(ovs,color=color.new(color.green,100)) h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted) fill(h1,h4, title="Resistance", color=color.new(color.red,90)) fill(h0,h3, title="Support", color=color.new(color.green,90)) //Signal rsi_buy= rsipB[1]<et_long and rsipB>et_long rsi_sell= rsipB[1]>et_short and rsipB<et_short rsi_exit= (rsipB[1]>ovs and rsipB<ovs) or (rsipB[1]<ovb and rsipB>ovb) plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute) plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute) plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute) //Alert strategy.entry("Long",strategy.long,when=rsi_buy) strategy.close("Long",when=rsi_exit) strategy.entry("Short",strategy.short,when=rsi_sell) strategy.close("Short",when=rsi_exit) //EOF