Tendance sur plusieurs périodes basée sur l' EMA et le RSI stochastique à la suite de la stratégie de négociation

Auteur:ChaoZhang est là., Date: 2024-03-08 17:32:38 Je suis désolé
Les étiquettes:

img

Vue d'ensemble de la stratégie

La stratégie, appelée EMA et Stochastic RSI basée sur la stratégie de trading de suivi de tendance multi-temps, utilise deux moyennes mobiles exponentielles (EMA) avec des périodes différentes et l'indicateur Stochastic RSI pour capturer les tendances du marché à moyen et long terme.

Principes de stratégie

  1. Calculer une EMA rapide et une EMA lente. Le paramètre par défaut pour l'EMA rapide est de 12 et 25 pour l'EMA lente. Ceux-ci peuvent être ajustés en fonction des caractéristiques du marché et de la fréquence de négociation.

  2. Déterminer la tendance haussière/baissière:

  • Lorsque l'EMA rapide dépasse l'EMA lente, il génère un signal haussier
  • Lorsque l'EMA rapide traverse le niveau inférieur à l'EMA lente, il génère un signal baissier
  1. Confirmation de tendance: Après l'apparition d'un signal haussier/baissier, il faut 2 bougies haussières/baissières consécutives pour confirmer la tendance.

  2. Utilisez le RSI stochastique comme jugement auxiliaire:

  • Lorsque le RSI stochastique %K franchit la ligne au-dessus de la ligne %D et que %K est inférieur à 20, il génère un signal de survente, indiquant un potentiel renversement haussier
  • Lorsque le RSI stochastique %K traverse la ligne inférieure à la ligne %D et que %K est supérieur à 80, il génère un signal de surachat, indiquant un potentiel renversement baissier.
  1. Règles de négociation:
  • Ouvrir une position longue lorsque les EMA génèrent un signal haussier et que le RSI stochastique n'est pas sur acheté
  • Ouvrir une position courte lorsque les EMA génèrent un signal baissier et que le RSI stochastique n'est pas en territoire de survente

Les avantages de la stratégie

  1. En utilisant deux EMA avec des périodes différentes, la stratégie peut mieux équilibrer la sensibilité et la fiabilité de la capture des tendances.

  2. Le mécanisme de confirmation de tendance peut filtrer efficacement la plupart des faux signaux et améliorer le taux de gain.

  3. Le RSI stochastique sert de jugement auxiliaire, aidant à évaluer la force de la tendance au stade précoce et à prévenir les renversements potentiels au stade tardif.

  4. La logique de la stratégie est simple, avec peu de paramètres, ce qui facilite sa compréhension et sa mise en œuvre.

Analyse des risques

  1. Les EMA sont des indicateurs en retard et peuvent entraîner un glissement significatif au début des renversements de tendance.

  2. Les stratégies de suivi des tendances sont généralement moins performantes sur les marchés instables.

  3. Le RSI stochastique peut produire des signaux trompeurs lors d'une volatilité extrême du marché, affectant la qualité du jugement.

  4. Les paramètres fixes peuvent ne pas s'adapter à toutes les conditions du marché, ce qui nécessite des ajustements dynamiques basés sur les caractéristiques du marché.

Directions d'optimisation

  1. Introduction d'indicateurs de volatilité tels que l'ATR pour ajuster dynamiquement les paramètres de l'EMA et s'adapter aux différents rythmes du marché.

  2. Ajoutez un jugement pour les marchés à plage, comme la combinaison de la largeur des bandes de Bollinger, pour éviter des transactions fréquentes dans des conditions instables.

  3. Incorporer plus de critères auxiliaires en plus du RSI stochastique, tels que les changements de volume, pour améliorer la fiabilité du signal.

  4. Considérer les corrélations du marché et introduire des signaux intermarchés multiactifs pour renforcer la résilience au risque du système.

Résumé

Cette stratégie exploite efficacement les forces des EMA et du RSI stochastique pour former une approche de trading à moyen et long terme basée sur le suivi des tendances et l'inversion de l'élan. Elle capture les tendances grâce aux croisements EMA, confirme la force de la tendance et les avertit des renversements avec le RSI stochastique, et améliore la qualité du signal avec des mécanismes de confirmation de tendance. Les trois composants se combinent organiquement pour créer un cadre de stratégie de trading quantitative simple et efficace. Ses principaux avantages résident dans sa logique concise, ses quelques paramètres, sa faible difficulté de mise en œuvre et sa large applicabilité.


/*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')





Plus de