Stratégie de percée de la moyenne inverse

Auteur:ChaoZhang est là., Date: 2023-12-20 14:48:57 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie d'inversion de la moyenne inverse est une stratégie d'inversion de tendance à facteurs multiples. Elle combine la moyenne mobile, les bandes de Bollinger, le CCI, le RSI et d'autres indicateurs techniques pour capturer les opportunités d'inversion des prix dans les zones de surachat et de survente.

Principe de stratégie

La logique de base de cette stratégie est de prendre des positions courtes ou longues appropriées lorsque les prix s'inversent depuis des zones de surachat ou de survente.

  1. L'indicateur CCI ou l'indicateur de dynamique émet des signaux croisés dorés pour déterminer le statut de surachat ou de survente.

  2. L'indicateur RSI juge si elle est dans la zone de surachat ou de survente.

  3. Utilisez le rail supérieur et inférieur des bandes de Bollinger pour déterminer si le prix dévie de la fourchette normale.

  4. Détecter une divergence régulière de l'indicateur RSI pour éviter de poursuivre de fausses ruptures.

Lorsque les conditions ci-dessus sont remplies, la stratégie prendra l'entrée de direction inverse et définira un stop loss pour contrôler le risque.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle combine plusieurs indicateurs pour déterminer les opportunités d'inversion avec un taux de gain relativement élevé.

  1. La fiabilité est plus élevée si l'on utilise plusieurs facteurs.

  2. L'inversion de tendance a une plus grande probabilité de gagner.

  3. La détection de la divergence permet d'éviter la poursuite d'une fausse rupture et de réduire le risque systémique.

  4. Le mécanisme de stop-loss contrôle le risque et réduit au maximum la perte d'un seul billet.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Les erreurs de jugement sur le moment de l'inversion peuvent être déclenchées. Élargir la plage d'arrêt de perte de manière appropriée.

  2. Les paramètres des bandes de Bollinger mis en place de manière inappropriée, prennent l'action normale des prix comme anormale.

  3. Le nombre de transactions pourrait être relativement élevé. élargir la gamme de jugement CCI etc. correctement pour réduire la fréquence des transactions.

  4. Jugez si les paramètres correspondent aux données historiques.

Optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Utilisez des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres.

  2. Augmenter l'indice de schiste, l'indice d'amplitude, etc. pour déterminer la force de surachat et de survente.

  3. Ajouter des indicateurs de volume de négociation pour déterminer la fiabilité de l'inversion, par exemple volume, intérêt ouvert, etc.

  4. Incorporer les données de la chaîne de blocs pour mesurer le sentiment du marché.

  5. Mettre en place un mécanisme de stop loss adaptatif basé sur la volatilité du marché.

Résumé

La stratégie de percée moyenne inverse intègre plusieurs indicateurs pour déterminer les transactions d'inversion. Avec un contrôle de risque approprié, elle a un taux de gain relativement élevé. La stratégie est pratique avec une marge d'optimisation supplémentaire. Avec un réglage approprié des paramètres, elle devrait donner des résultats assez idéaux.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ INV', overlay=true)

// Input settings
stopLossInPips = input.int(10, minval=0, title='Stop Loss (in Pips)')
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'])
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.6, title='Outer Bands Multiplier')

// 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]

// 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

// Entry Conditions
prevHigh = ta.highest(high, 1)
prevLow = ta.lowest(low, 1)
shortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
longEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldShortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldLongEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, 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(oldShortEntryCondition, 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)

// Strategy logic
if (longEntryCondition)
    stopLoss = close - stopLossInPips
    strategy.entry("Buy", strategy.long)
    strategy.exit("exit", "Buy", stop=stopLoss)
if (shortEntryCondition)
    stopLoss = close + stopLossInPips
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit", "Sell", stop=stopLoss)

// Close all open positions when outside of bands
closeAll = (high >= upperBand) or (low <= lowerBand)

if (closeAll)
    strategy.close_all("Take Profit/Cut Loss")

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


Plus de