Stratégie d'indicateur de réversal

Auteur:ChaoZhang est là., Date: 2023-12-13 14:45:51 Je suis désolé
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de revasal basée sur plusieurs indicateurs techniques. Il combine CCI, indicateur de momentum, RSI et d'autres indicateurs pour identifier les opportunités de trading potentielles longues et courtes. La stratégie génère des signaux de trading lorsque les indicateurs montrent des signaux de surachat/survente et que les prix reculent.

La logique de la stratégie

Les signaux de trading de la stratégie proviennent d'un indicateur personnalisé appelé Edri Extreme Points Buy & Sell. Il prend en compte l'indicateur CCI, l'indicateur Momentum et les croisements RSI.

Conditions de signal à longue portée:

  1. L'indicateur Edri Extreme Points Buy & Sell déclenche un signal d'achat, c'est-à-dire un CCI dépassant 0 ou un Momentum dépassant 0, et le RSI est inférieur au niveau de survente.
  2. Le prix se rapproche ou tombe en dessous de l'EMA à 100 périodes.

Conditions de signal court:

  1. L'indicateur Edri Extreme Points Buy & Sell déclenche un signal de vente, c'est-à-dire un CCI qui dépasse 0 ou un Momentum qui dépasse 0, et le RSI est au-dessus du niveau de surachat.
  2. Le prix se rapproche ou dépasse l'EMA à 100 périodes.

La stratégie peut également être configurée pour trouver des divergences haussières/baissières régulières, générant des signaux de trading uniquement lorsque le RSI dévie de manière significative du prix.

Lorsque les signaux de négociation sont déclenchés, la stratégie définit un stop loss au prix d'entrée ± 2ATR, un profit au prix d'entrée ± 4ATR. Cela permet un intervalle raisonnable de stop loss et de profit basé sur la volatilité du marché.

Analyse des avantages

  1. La combinaison de plusieurs indicateurs permet d'éviter les faux signaux émis par un seul indicateur.
  2. Le style de négociation inverse capte les opportunités à moyen terme sur les marchés à plage.
  3. Le système de stop loss et de take profit basé sur l'ATR peut ajuster les positions en fonction de la volatilité du marché.
  4. La détection de la divergence permet d'éviter d'ouvrir des positions sans niveaux extrêmement élevés de surachat/survente.

Analyse des risques

  1. Des paramètres d'indicateur incorrects peuvent entraîner des occasions manquées ou trop de signaux erronés.
  2. Le trading à inversion peut entraîner un stop loss consécutif sur les marchés en tendance.
  3. L'ATR a un effet de retard et ne peut pas mettre à jour le stop loss/take profit en temps opportun sur des marchés en évolution rapide.

Les solutions:

  1. Testez et optimisez les paramètres des indicateurs pour trouver la meilleure combinaison.
  2. Pensez à suspendre la stratégie lorsque la tendance est forte.
  3. Combiner avec d'autres méthodes de stop loss comme le stop loss en mouvement ou le stop loss contraire.

Directions d'optimisation

  1. Les essais doivent être effectués sur des échantillons de l'échantillon.
  2. Ajouter d'autres conditions de filtrage comme les tendances des prix, les changements de volume, etc.
  3. Ajustez les règles de dimensionnement de la position comme le rapport de position basé sur ATR.
  4. Définir des modèles de paramètres pour différents produits et délais.
  5. Envisager d'ajouter le suivi des tendances pour suspendre les opérations d'inversion sur les marchés en tendance.

Résumé

La stratégie fonctionne principalement pour les marchés à plage, capturant les inversions à moyen terme pour des gains relativement stables. Elle aide à identifier les étirements de prix à court terme et génère des signaux de trading basés sur plusieurs indicateurs. Avec une optimisation et une gestion de risque appropriées, ses avantages peuvent être efficacement utilisés.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-02 00:00:00
period: 1h
basePeriod: 15m
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/
// © MagicStrategies

//@version=5
strategy("Reversal Indicator Strategy", overlay = true)

// Input settings
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'], tooltip='CCI or Momentum will be the final source of the Entry signal if selected.')
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(true, title='Find Regular Bullish/Bearish Divergence', tooltip='If checked, it will only consider an overbought or oversold condition that has a regular bullish or bearish divergence formed inside that level.')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level', tooltip='Adjusting the level to extremely high may filter out some signals especially when the option to find divergence is checked.')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level', tooltip='Adjusting this level extremely low may filter out some signals especially when the option to find divergence is checked.')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(false, 'Plot Mean Reversion Bands on the chart', tooltip='This function doesn\'t affect the entry of signal but it suggests buying when the price is at the lower band, and then sell it on the next bounce at the higher bands.')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.8, title='Outer Bands Multiplier', tooltip='Multiplier for both upper and lower bands')


// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Entry Conditions
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)


// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na


// Plotting
plotshape(longEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(shortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

plot(upperBand, title='Upper Band', color=color.new(color.fuchsia, 0), linewidth=1)
plot(meanReversion, title='Mean', color=color.new(color.gray, 0), linewidth=1)
plot(lowerBand, title='Lower Band', color=color.new(color.blue, 0), linewidth=1)

// Entry signal alerts
alertcondition(longEntryCondition, title='BUY Signal', message='Buy Entry Signal')
alertcondition(shortEntryCondition, title='SELL Signal', message='Sell Entry Signal')
alertcondition(longEntryCondition or shortEntryCondition, title='BUY or SELL Signal', message='Entry Signal')

ema100 = ta.ema(close, 100)
plot(ema100, color=color.red)

// Define trading signals based on the original indicator's entry conditions
// Buy if long condition is met and price has pulled back to or below the 100 EMA
longCondition  = longEntryCondition and close <= ema100
// Sell if short condition is met and price has pulled back to or above the 100 EMA
shortCondition = shortEntryCondition and close >= ema100

// Strategy Entries
if longCondition
    strategy.entry("Buy", strategy.long)
if shortCondition
    strategy.entry("Sell", strategy.short)

Plus de