
La stratégie est basée sur l’indicateur CCI, qui utilise les entrées d’adaptation dynamique pour déterminer le moment de la reprise de la tendance, tout en utilisant le suivi des arrêts de perte pour localiser les bénéfices. Le nom de la stratégie est optimisé pour s’adapter au bas du CCI. La stratégie de trading de marchandises pour capturer le bas du CCI contient les éléments centraux de la stratégie: utiliser l’indicateur CCI pour déterminer les zones de survente pour capturer les opportunités de reprise et utiliser les entrées d’adaptation dynamique pour optimiser les entrées horizontalement.
L’indicateur central est l’indicateur CCI, utilisé pour déterminer les zones de survente et les chances d’un renversement de tendance. De plus, l’ampleur de la zone de survente CCI peut varier en fonction de différents indicateurs et de l’environnement du marché. Par conséquent, cette stratégie utilise une approche pessimiste pour déterminer la position du point le plus bas du CCI au cours d’une période passée et définit dynamiquement le niveau d’achat du CCI.
En particulier, le niveau de CCI par défaut pour les signaux d’achat est de -145. Ensuite, on juge la position du point le plus bas de la CCI au cours des 40 derniers jours, 50 derniers jours, etc. Si le point le plus bas est supérieur au niveau par défaut du niveau suivant, par exemple -90, alors on prend -90 comme niveau de nouvelles entrées. Si le point le plus bas est supérieur à -90, on prend -70 comme niveau de nouvelles entrées, et ainsi de suite.
En outre, la stratégie utilise le suivi des arrêts-pertes pour localiser les bénéfices, les niveaux de stop-loss évoluant à mesure que les prix évoluent.
Une telle conception dynamique permet d’optimiser le timing des entries par rapport à un niveau d’entries fixe. La recherche d’un niveau d’entries plus élevé dans un marché à forte baisse peut réduire le risque, tandis qu’une réduction du niveau d’entries dans un marché classé dans une zone de choc peut saisir plus d’opportunités.
Le CCI lui-même est un indicateur clair et fiable pour juger de l’achat et de la vente excessive, et l’analyse de l’inversion de tendance basée sur le CCI est efficace. Combiné à la conception d’entries dynamiques, l’avantage global de cette stratégie est significatif.
En outre, le mécanisme d’adaptation dynamique de l’horizon des entrées peut être difficile à adapter parfaitement à l’environnement du marché actuel, ce qui rend les entrées ne sont pas nécessairement le meilleur moment. Enfin, le marché des marchandises lui-même est très volatil, même avec un stop loss, mais le paramètre spécifique peut également entraîner des pertes importantes si le paramètre n’est pas défini à ce moment-là.
Il est possible d’optimiser les paramètres CCI, les niveaux d’entrée et les paramètres de stop loss.
La stratégie utilise l’indicateur CCI pour juger de la survente et la conception d’un niveau d’entrées adaptatif dynamique pour capturer les tendances de rupture. Par rapport aux paramètres fixes, le niveau d’entrées dynamiques améliore considérablement l’adaptabilité de la stratégie.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true)
// Inputs
cciLength = input(20, title="CCI Period")
defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level")
adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days")
adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days")
adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days")
adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days")
adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days")
adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days")
adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days")
adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days")
lookback40 = input(40, title="Lookback Period for -90 Level")
lookback50 = input(50, title="Lookback Period for -70 Level")
lookback60 = input(60, title="Lookback Period for -50 Level")
lookback90 = input(90, title="Lookback Period for -4 Level")
lookback120 = input(120, title="Lookback Period for 0 Level")
lookback140 = input(140, title="Lookback Period for +25 Level")
lookback160 = input(160, title="Lookback Period for +50 Level")
lookback180 = input(180, title="Lookback Period for +70 Level")
// Indicator Calculation
cci = ta.cci(close, cciLength)
// Determine adaptive entry level based on lookback periods
var float entryLevel = defaultCCIEntryOversold // Initialize with the default level
if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90
entryLevel := adaptiveCCIEntryLevel90
if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days
entryLevel := adaptiveCCIEntryLevel70_50Days
if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50
entryLevel := adaptiveCCIEntryLevel50
if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4
entryLevel := adaptiveCCIEntryLevel4
if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0
entryLevel := adaptiveCCIEntryLevel0
if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25
entryLevel := adaptiveCCIEntryLevel25
if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days
entryLevel := adaptiveCCIEntryLevel50_160Days
if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days
entryLevel := adaptiveCCIEntryLevel70_180Days
// Entry Condition
longCondition = cci < entryLevel
// Entry and Exit
if (longCondition)
strategy.entry("Long", strategy.long, qty=1)
alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar)
trailOffset = input(10.0, title="Trailing Stop Offset in USD")
strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close)
if (close < entryLevel - trailOffset)
alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar)
// Plotting
plot(series=cci, color=color.purple, title="CCI")
hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level")
hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)")
hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)")
hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)")
hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)")
hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)")
hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)")
hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)")
hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")