Stratégie de trading de suivi de tendance sur plusieurs périodes basée sur l'EMA et le RSI stochastique


Date de création: 2024-03-08 17:32:38 Dernière modification: 2024-03-08 17:32:38
Copier: 3 Nombre de clics: 772
1
Suivre
1617
Abonnés

Stratégie de trading de suivi de tendance sur plusieurs périodes basée sur l’EMA et le RSI stochastique

Aperçu de la stratégie

Cette stratégie, appelée “stratégie de suivi de tendance multi-cycle basée sur EMA et RSI aléatoire”, utilise les moyennes mobiles indicielles (EMA) et les indicateurs RSI aléatoires de deux cycles différents pour capturer les tendances à moyen et long terme du marché. L’idée centrale de la stratégie est de juger de la direction de la tendance à travers les croisements d’EMA, tout en combinant le RSI aléatoire comme signal de confirmation de tendance et de réversion d’alerte, afin de construire des positions au début de la formation de la tendance et de les liquider à la fin de la tendance.

Principe de stratégie

  1. Calcul des EMA rapides et des EMA lentes. Le paramètre par défaut de l’EMA rapides est de 12, celui de l’EMA lentes est de 25 et peut être adapté en fonction des caractéristiques du marché et de la fréquence des transactions dans les applications réelles.

  2. Pour juger de la tendance à la surpopulation:

  • Lorsque l’EMA rapide est traversée par l’EMA lente, un signal de multiplication est généré
  • Lorsque l’EMA rapide est traversée par l’EMA lente, un signal d’ouverture est généré
  1. Confirmation de la tendance: après l’apparition du signal, il faut que 2 lignes K apparaissent pour confirmer la formation de la tendance. Cela aide à filtrer les faux signaux.

  2. En utilisant le RSI aléatoire comme jugement auxiliaire:

  • Un signal de survente est généré lorsque le RSI %K passe le %D au hasard et que le %K est inférieur à 20 pour indiquer une éventuelle reprise de la hausse
  • Lorsque le RSI %K passe au hasard par le %D et que le %K est supérieur à 80, un signal de survente est généré pour indiquer une éventuelle inversion de la baisse.
  1. Stratégie de négociation:
  • Lorsque l’EMA génère un signal de prise et que le RSI aléatoire n’est pas dans la zone de survente, ouvrez une position de prise
  • Lorsque l’EMA génère un signal de baisse et que le RSI aléatoire n’est pas dans la zone de survente, ouvrez une position vide

Avantages stratégiques

  1. L’analyse a montré que la combinaison d’EMA du cycle 1225 est plus efficace pour la saisie des tendances à moyen et long terme.

  2. Les mécanismes de confirmation de tendances peuvent filtrer efficacement la plupart des signaux faux et améliorer la probabilité de succès de la stratégie.

  3. Le RSI aléatoire sert de jugement auxiliaire, aidant à déterminer la force de la tendance au début de la tendance et à prévenir d’éventuels retours de tendance à la fin de la tendance.

  4. La logique de la stratégie est simple, avec peu de paramètres, facile à comprendre et à mettre en œuvre, et s’applique à une variété de marchés et de variétés.

Analyse des risques

  1. L’EMA est un indicateur de retard qui peut avoir des points de glissement importants au début d’un renversement de tendance.

  2. Les stratégies tendancielles sont généralement utilisées dans les marchés en tremblement.

  3. Le RSI aléatoire peut être déformé en cas de fortes fluctuations du marché, ce qui affecte la qualité du jugement.

  4. Les paramètres fixes peuvent ne pas s’adapter à toutes les conditions du marché et doivent être adaptés en fonction des caractéristiques du marché.

Direction d’optimisation

  1. L’introduction d’indicateurs de volatilité tels que l’ATR et l’ajustement des paramètres EMA en fonction de la dynamique de la volatilité pour s’adapter aux différents rythmes du marché.

  2. Augmenter le jugement sur les marchés instables, par exemple en combinant la direction de l’ouverture de la zone de Brin, afin d’éviter de négocier fréquemment dans les marchés instables.

  3. L’intégration de plus d’éléments auxiliaires, tels que les variations du volume de transactions, sur la base du RSI aléatoire améliore la fiabilité du signal.

  4. Prendre en compte la connectivité des marchés, introduire des signaux multivariés et renforcer la résistance au risque du système.

Résumer

La stratégie exploite pleinement les avantages de l’EMA et du RSI aléatoire pour former un ensemble de stratégies de trading à moyen et long terme basées sur le suivi de la tendance et le retour de la dynamique. La capture de la tendance par le croisement de la même ligne, la confirmation de la force de la tendance par le RSI aléatoire et le retour d’alerte précoce, le mécanisme de confirmation de la tendance améliorent la qualité du signal, les trois se combinent de manière organique pour former un cadre de stratégie de trading quantitatif simple et efficace.

Code source de la stratégie
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')