Stratégie ADX + RSI

Auteur:ChaoZhang est là., Date: 2023-09-27 16:27:39 Je vous en prie.
Les étiquettes:

Résumé

Il s'agit d'une stratégie de suivi des tendances qui combine les indicateurs ADX et RSI. Il utilise RSI pour identifier les niveaux de surachat et de survente pour générer des signaux de trading, et ADX pour déterminer la tendance pour filtrer les transactions lorsque la tendance n'est pas claire, évitant ainsi les fléchettes sur les marchés à fourchette.

La logique de la stratégie

  1. Utiliser l'indice de volatilité sur 7 périodes pour identifier les niveaux de surachat et de survente
  • L'indice de rentabilité inférieur à 30 est considéré comme une survente
  • Le RSI supérieur à 70 est considéré comme suracheté.
  1. Utilisez ADX pour déterminer la tendance
  • L'ADX supérieur à 30 indique une forte tendance
  • ADX inférieur à 30 ne suggère aucune tendance
  1. Règles d'entrée
  • Résultats de l'analyse de risque
  • Résultats de l'analyse de risque
  1. Profitez et arrêtez la perte
  • Le montant de l'exposition au risque de crédit à l'échéance de la période d'exécution de l'exposition au risque de crédit à l'échéance de la période d'exécution de l'exposition à l'échéance de la période d'exécution.
  • Prix de clôture des utilisations proches
  • Utilisations basées sur les fluctuations des hauts/des bas de fluctuation récents

Analyse des avantages

  1. L'indicateur d'indice de volatilité identifie efficacement les niveaux de surachat et de survente pour éviter les pièges d'achat/de vente

  2. L'ADX filtre les marchés en limite de gamme pour éviter les échecs

  3. Les méthodes optionnelles de prise de profit/arrêt de perte permettent de mieux contrôler les risques

  4. Simple et facile à comprendre, bon pour les débutants à apprendre le trading algorithmique

  5. Beaucoup de place pour l'optimisation et le raffinement des paramètres

Analyse des risques

  1. L'indice des taux de rebond suracheté/survendu peut présenter des baisses et des revers

  2. La détermination de la tendance de l'ADX a des retards, peut manquer les points tournants de la tendance

  3. Le placement incorrect d'un stop loss peut entraîner des pertes

  4. Risque d'optimisation excessive due à la simplicité

  5. Optimisation des paramètres nécessaire à une meilleure performance

Directions d'optimisation

  1. Optimiser les paramètres du RSI et les niveaux de surachat/survente

  2. Testez différentes périodes ADX pour trouver le réglage optimal

  3. Tester différentes méthodes de prise de profit/arrêt de perte

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

  5. Combiner avec d'autres indicateurs pour une meilleure performance

Résumé

Cette stratégie combine les forces des indicateurs classiques RSI et ADX pour identifier les tendances et éviter les problèmes. Elle offre beaucoup de marge d'optimisation pour obtenir de meilleures performances.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// This is a strategy that uses the 7 Period RSI to buy when the indicator is shown as oversold (OS) and sells when 
// the index marks overbought (OB). It also uses the ADX to determine whether the trend is ranging or trending
// and filters out the trending trades. Seems to work better for automated trading when the logic is inversed (buying OB 
// and selling the OS) wihout stop loss.

//@version=4
strategy("ADX + RSI Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.04, calc_on_every_tick=false)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))


//SL & TP Inputs
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")
i_TPExpander=input(defval=0, step=.2, title="TP Expander")
i_reverse=input(true, title="Reverse Trades")

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//RSI Calculations
RSI=rsi(close, 7)
OS=input(30, step=5)
OB=input(80, step=5)

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)


//Entry Logic
BUY = sig < adxlevel and (RSI < OS) 
SELL = sig < adxlevel and (RSI > OB) 

//Entries
strategy.entry("long", strategy.long, when=i_reverse?SELL:BUY)
strategy.entry("short", strategy.short, when=not i_reverse?SELL:BUY)
//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")

Plus de