Stratégie de négociation quantitative basée sur les signaux de l'indicateur RSI

Auteur:ChaoZhang est là., Date: le 14 septembre 2023 à 20h26h49
Les étiquettes:

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:

  1. Calculer l'indicateur RSI(14) et l'assouplir à l'aide de l'EMA(28) pour obtenir l'oscillateur traité.

  2. Calculer les bandes de Bollinger sur le RSI traité pour obtenir les bandes supérieures/inférieures.

  3. Lorsque le RSI traité traverse en dessous de la ligne d'entrée, un signal d'achat est généré.

  4. 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

Plus de