Le système d'inversion de tendance est une stratégie de suivi de tendance qui utilise des moyennes mobiles, l'indicateur CCI et l'indicateur Supertrend pour identifier la tendance et entrer sur les retraits.
La stratégie utilise l'EMA à 21 périodes comme moyenne mobile à court terme et l'EMA à 55 périodes comme moyenne mobile à long terme.
L'indicateur CCI montre quand le prix a atteint des niveaux extrêmes. Le signal de niveau 1 est lorsque le CCI atteint 100/-100 par défaut, le niveau 2 est 140/-140 et le niveau 3 est 180/-180. Cela suggère des conditions de surachat ou de survente.
L'indicateur Supertrend détermine la direction de tendance spécifique. Il intègre ATR pour identifier les niveaux de stop loss et d'entrée pour les tendances haussières et baissières.
Lorsque 21 EMA est au-dessus de 55 EMA et CCI atteint un niveau bas (zone de survente), il peut signaler une entrée longue. Lorsque 21 EMA est au-dessous de 55 EMA et CCI atteint un niveau élevé (zone de surachat), il peut signaler une entrée courte. Le stop loss est défini au niveau de stop de Supertrend
La stratégie combine plusieurs indicateurs pour identifier les tendances et les situations de surachat / survente, ce qui aide à filtrer les fausses ruptures. Le taux de rentabilité fixe permet un ratio risque-rendement stable. Le trading avec la tendance offre un taux de gain plus élevé. Les signaux de surachat / survente CCI offrent un bon moment d'entrée pendant les retraces de tendance.
Les paramètres doivent être optimisés pour différents symboles car les paramètres actuels peuvent ne pas être idéaux. La méthode de stop loss est brute et incapable de s'adapter aux différentes conditions du marché. Le profit fixe ne s'ajuste pas en fonction de la volatilité du marché.
Testez les paramètres sur différents symboles, optimisez les périodes de MA, la période ATR, le multiplicateur ATR, etc. Considérez un arrêt de trail ou un arrêt ATR pour un arrêt de perte adaptatif. Testez le profit basé sur ATR pour une cible de profit dynamique. Ajoutez des filtres pour vérifier l'élan de la tendance lors de la prise de signaux CCI afin d'éviter les marchés agités. Ajoutez des indicateurs de force de tendance quantifiables pour une meilleure validation de la tendance.
Le système d'inversion de tendance combine des moyennes mobiles, CCI et Supertrend pour identifier les tendances et les surachats / survente pour les entrées de retracement. Il a une stabilité et un taux de gain relativement élevés, mais les mécanismes de stop loss, take profit et de validation de tendance nécessitent une optimisation supplémentaire pour la robustesse à travers les symboles et les conditions du marché.
/*backtest start: 2022-10-16 00:00:00 end: 2023-01-08 00:00:00 period: 1d basePeriod: 1h 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/ // © greenmask9 //@version=4 strategy("Oath", overlay=true) // 21 EMA emalength = input(21, title="Short EMA") emashort = ema(close, emalength) // 55 EMA emalength2 = input(55, title="Long EMA") ema = ema(close, emalength2) //CCI calculation and inputs lengthcci = input(20, minval=1, title="Overbought/sold detector period") src = input(close, title="Overbought/sold detector source") ma = sma(src, lengthcci) ccivalue = (src - ma) / (0.015 * dev(src, lengthcci)) //CCI plotting ccioverbought = input(defval=100, title="Overbought level 1") ccioverbought2 = input(defval=140, title="Overbought level 2") ccioverbought3 = input(defval=180, title="Overbought level 3") ccioversold = input(defval=-100, title="Oversold level 1") ccioversold2 = input(defval=-140, title="Oversold level 2") ccioversold3 = input(defval=-180, title="Oversold level 3") //cciOB = (ccivalue >= ccioverbought and ccivalue < ccioverbought2) //cciOS = (ccivalue <= ccioversold and ccivalue > ccioversold2) //cciOB2 = (ccivalue >= ccioverbought2 and ccivalue < ccioverbought3) //cciOS2 = (ccivalue <= ccioversold and ccivalue > ccioversold3) //cciOB3 = (ccivalue >= ccioverbought3) //cciOS3 = (ccivalue <= ccioversold3) //Supertrend length = input(title="ATR Period", type=input.integer, defval=55) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=5.0) wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=true) illuminate = input(title="Illuminate Trend", type=input.bool, defval=false) atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := (wicks ? low[1] : close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir //entries uptrend = emashort>ema and dir == 1 upsignal = ccivalue<=ccioversold and ccivalue>ccioversold2 upsignal2 = ccivalue<=ccioversold2 and ccivalue>ccioversold3 upsignal3 = ccivalue<=ccioversold3 downtrend = emashort<ema and dir == -1 downsignal = ccivalue>=ccioverbought and ccivalue<ccioverbought2 downsignal2 = ccivalue>=ccioverbought2 and ccivalue<ccioverbought3 downsignal3 = ccivalue>=ccioverbought3 //adapts to the current bar, I need to save the bars number when the condition for buy was true, static number is spread spread = input (0.00020, title="Spread") upstoploss = longStop - spread downstoploss = shortStop + spread strategy.initial_capital = 50000 ordersize=floor(strategy.initial_capital/close) testlong = input(title="Test longs", type=input.bool, defval=true) testshort = input(title="Test shorts", type=input.bool, defval=true) //new degree = input(title="Test level 1 overbought/sold levels", type=input.bool, defval=true) degree2 = input(title="Test level 2 overbought/sold levels", type=input.bool, defval=false) degree3 = input(title="Test level 3 overbought/sold levels", type=input.bool, defval=false) statictarget = input(title="Use static target", type=input.bool, defval=true) statictargetvalue = input(title="Static target in pips", type=input.integer, defval=400) //timetrade = input(title="Open trades only withing specified time", type=input.bool, defval=true) //timtrade = input() //přidat možnost TP podle ATR a sl podle ATR buy1 = uptrend and upsignal and strategy.opentrades==0 and testlong and degree x1 = barssince (buy1) if (buy1) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath1", strategy.long, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1" , profit=statictargetvalue,stop=upstoploss[x1]) buy2 = uptrend and upsignal2 and strategy.opentrades==0 and testlong and degree2 x2 = barssince (buy2) if (buy2) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath2", strategy.long, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2" , profit=statictargetvalue,stop=upstoploss[x2]) buy3 = uptrend and upsignal3 and strategy.opentrades==0 and testlong and degree3 x3 = barssince (buy3) if (buy3) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath3", strategy.long, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3" , profit=statictargetvalue,stop=upstoploss[x3]) sell1 = downtrend and downsignal and strategy.opentrades==0 and testshort and degree y1 = barssince (sell1) if (sell1) if (statictarget) strategy.entry("Oath1.s", strategy.short, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1.s" , profit=statictargetvalue,stop=downstoploss[y1]) sell2 = downtrend and downsignal2 and strategy.opentrades==0 and testshort and degree2 y2 = barssince (sell2) if (sell2) if (statictarget) strategy.entry("Oath2.s", strategy.short, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2.s" , profit=statictargetvalue,stop=downstoploss[y2]) sell3 = downtrend and downsignal3 and strategy.opentrades==0 and testshort and degree3 y3 = barssince (sell3) if (sell3) if (statictarget) strategy.entry("Oath3.s", strategy.short, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3.s" , profit=statictargetvalue,stop=downstoploss[y3]) plotshape(uptrend and upsignal and degree, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up") plotshape(downtrend and downsignal and degree, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down") plotshape(uptrend and upsignal2 and degree2, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up+") plotshape(downtrend and downsignal2 and degree2, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down+") plotshape(uptrend and upsignal3 and degree3, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up++") plotshape(downtrend and downsignal3 and degree3, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down++")