
La stratégie de suivi des tendances de la dynamique du CCI à deux cycles est un système de trading quantitatif combiné à l’indice de canal des marchandises à cycle court et long (CCI) conçu pour identifier et capturer les tendances fortes du marché. La stratégie utilise habilement le CCI à cycle long de 50 cycles pour déterminer la direction des principales tendances du marché, tout en utilisant le CCI à cycle court de 5 cycles pour capturer les changements de dynamique du marché et les opportunités d’entrée.
La logique centrale de cette stratégie est basée sur la théorie de la traversée de la ligne zéro et de la variation de la dynamique de l’indicateur CCI. Les principes de fonctionnement sont les suivants:
Conditions d’admission pour plusieurs personnes:
Conditions de mise en équilibre multiple:
Conditions d’entrée à vide(seulement si la fonction de vide est activée):
Conditions de mise à zéro:
Stratégies par variablesinPositiveCciLongCycle、firstCrossoverOccurredetfirstCrossunderOccurredSuivre le cycle de tendance et s’assurer qu’une seule transaction est exécutée au cours d’un cycle de tendance, évitant ainsi des transactions fréquentes et des frais de transaction inutiles en cas de choc sur le marché.
En analysant le code en profondeur, la stratégie présente plusieurs avantages notables:
Une double confirmation de la tendance et de la dynamiqueLe système de double confirmation de la direction de la tendance et de l’heure d’entrée, combiné à des indices CCI à longue période et à courte période, réduit considérablement le risque de faux signaux.
L’heure exacte d’entréeLa stratégie consiste à identifier les changements de dynamique par le passage du CCI à court terme à travers la ligne zéro, ce qui permet de fournir des points d’entrée plus précis au début de la tendance et d’améliorer l’efficacité de l’utilisation des fonds.
Évitez les transactions fréquentesLe système d’entrée unique dans le cycle a permis d’éviter les transactions fréquentes dans les marchés instables et de réduire les coûts de transaction.
Modèles de négociation flexibles: Prise en charge des transactions multi ou bidirectionnelles, permettant aux utilisateurs de s’adapter aux différentes conditions du marché en fonction de l’environnement et des préférences personnelles.
Une réponse visuelle claire: La stratégie fournit des indications visuelles intuitives, comprenant des lignes d’indicateurs CCI et des marqueurs de signaux de transaction, pour faciliter l’analyse et la vérification des retours.
Ajustabilité des paramètres: L’utilisateur peut ajuster les paramètres du cycle CCI long ou court en fonction des caractéristiques des différents marchés et variétés, ce qui améliore l’adaptabilité de la stratégie.
Malgré la bonne conception de la stratégie, les risques potentiels sont les suivants:
Risque d’inversion de tendance: Dans le cas d’un revirement soudain d’une tendance forte, le CCI à long terme peut ne pas être en mesure de traverser la ligne zéro à temps, ce qui entraîne un retard dans le signal de placement et peut entraîner un renversement des bénéfices déjà réalisés. La solution consiste à introduire un mécanisme d’arrêt ou à ajouter un indicateur de placement plus sensible.
Le marché horizontal ne fonctionne pas bien: Dans un environnement de marché où il y a une courbe horizontale prolongée ou aucune tendance évidente, la stratégie peut générer plusieurs signaux d’inefficacité, entraînant des pertes. Il est recommandé d’utiliser la stratégie lorsque le marché est dans une tendance évidente.
Paramètre Sensibilité:Le choix des paramètres du cycle CCI a un impact significatif sur la performance de la stratégie, et différents marchés peuvent nécessiter des paramètres différents. Il est recommandé de trouver la combinaison de paramètres appropriée pour un marché particulier en optimisant le feedback.
Dépendance à un seul indicateur: La stratégie repose uniquement sur l’indicateur CCI et l’absence de confirmation auxiliaire d’autres indicateurs techniques ou de formes de prix peut augmenter le risque de faux signaux. Considérez l’ajout de conditions de filtrage supplémentaires.
Une mauvaise gestion des fonds: Le code utilise la gestion de positions à taux fixe ((100% de fonds) et peut entraîner un risque élevé dans un marché très volatil. Il est recommandé d’ajuster la taille de la position en fonction de la dynamique de la volatilité du marché.
L’analyse du code permet d’optimiser cette stratégie dans les directions suivantes:
Ajout de conditions de filtrage: la combinaison d’autres indicateurs techniques tels que la moyenne, le RSI ou le MACD, la construction d’un mécanisme de confirmation multiple, l’amélioration de la qualité du signal. Cette optimisation est due au fait qu’un seul indicateur CCI peut produire des signaux trompeurs dans certains environnements de marché, la combinaison de plusieurs indicateurs peut compléter leurs faiblesses respectives.
Paramètres d’adaptation: la conception des paramètres du cycle CCI pour s’adapter automatiquement en fonction de la volatilité du marché, ce qui permet à la stratégie de s’adapter aux différentes phases du marché. Cette optimisation permet à la stratégie de maintenir une performance stable dans différents environnements de volatilité.
Améliorer la gestion des fondsIntroduction d’une gestion de position dynamique basée sur l’ATR, qui ajuste automatiquement la taille de la position en fonction de la volatilité du marché, équilibrant les gains et les risques. Cette amélioration permet à la stratégie de contrôler les risques dans les marchés à forte volatilité, tout en profitant des opportunités dans les tendances à faible volatilité.
Augmentation du mécanisme de stop-loss: Conception d’une stratégie d’arrêt et de perte dynamique basée sur la volatilité du marché, protégeant les bénéfices déjà réalisés et limitant les pertes sur une seule transaction. Cela évite le retrait massif des bénéfices causé par le retard de réaction du CCI à long terme.
Optimisation des fuseauxAjuster les paramètres de la stratégie ou la logique de négociation pour les différentes périodes de négociation (par exemple, ouverture et fermeture) afin de s’adapter aux caractéristiques du marché à chaque période. Les marchés présentent souvent des caractéristiques de volatilité et de tendance différentes à différentes périodes de la journée.
Augmentation des contrôles de retrait: Conception d’un mécanisme de contrôle de retrait maximal, qui réduit automatiquement la position ou suspend la négociation en cas de mauvaise performance de la stratégie, afin de prévenir les pertes continues. Ce mécanisme aide la stratégie à se protéger dans un environnement de marché défavorable.
La stratégie est conçue pour être simple et efficace, particulièrement adaptée aux marchés à tendance claire. Bien qu’il existe une certaine sensibilité aux paramètres et un risque de dépendance à un seul indicateur, l’orientation d’optimisation recommandée, comprenant la combinaison de plusieurs indicateurs, des paramètres adaptatifs et un mécanisme de gestion de fonds amélioré, peut considérablement améliorer la robustesse et l’adaptabilité de la stratégie. Pour les investisseurs quantifiés qui recherchent des transactions tendance, cette stratégie offre un point de départ idéal, permettant une personnalisation et une optimisation supplémentaires en fonction des besoins et des caractéristiques du marché.
/*backtest
start: 2024-07-03 00:00:00
end: 2025-07-01 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
// @version=6
// @description= Trend-following trading strategy based on the Commodity Channel Index (CCI) and price action confirmation.
// The strategy focuses on identifying momentum-driven trends with entry and exit conditions.
// @author: withoutbug
strategy("Momentum CCI Trend Following Strategy",
overlay=false,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.075,
margin_long=0,
margin_short=0)
// Input parameters
cciLongPeriod = input.int(50, "Long CCI Period", minval=1)
cciShortPeriod = input.int(5, "Short CCI Period", minval=1)
twoWayTrading = input(false, "Enable Short Order Book")
// Calculate CCI
cciLong = ta.cci(hlc3, cciLongPeriod)
cciShort = ta.cci(hlc3, cciShortPeriod)
cciLongCrossUnderZero = ta.crossunder(cciLong, 0)
cciShortCrossOverZero = ta.crossover(cciShort, 0)
cciLongCrossOverZero = ta.crossover(cciLong, 0)
cciShortCrossUnderZero = ta.crossunder(cciShort, 0)
// Track CCI Long > 0 state and first crossover
var bool inPositiveCciLongCycle = false
var bool firstCrossoverOccurred = false
var bool firstCrossunderOccurred = false
// Update CCI Long cycle state
firstCrossoverOccurred := false
firstCrossunderOccurred := false
// Buy conditions
buySignal = strategy.position_size==0 and cciLong > 0 and cciLong[1] > 0 and cciShortCrossOverZero and firstCrossoverOccurred == false
if buySignal
firstCrossoverOccurred := true
// Exit conditions
exitLong = strategy.position_size>0 and cciLongCrossUnderZero
// Sell conditions
sellSignal = strategy.position_size==0 and cciLong < 0 and cciLong[1] < 0 and cciShortCrossUnderZero and firstCrossunderOccurred == false
if sellSignal
firstCrossunderOccurred := true
// Exit conditions
exitShort = strategy.position_size<0 and cciLongCrossOverZero
// Strategy logic
if (buySignal)
strategy.entry("Long", strategy.long)
if (exitLong)
strategy.close("Long", comment="CCI Exit Long")
if (sellSignal and twoWayTrading)
strategy.entry("Short", strategy.short)
if (exitShort and twoWayTrading)
strategy.close("Short", comment="CCI Exit Short")
// Plot CCI indicators on the panel
plot(cciLong, title="Long CCI", color = cciLong>=0 ? color.green:color.red, linewidth=2, style = plot.style_area)
plot(cciShort, title="Short CCI", color=color.yellow, linewidth=1)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_solid)
// Plot buy and sell signals on the panel
plotshape(buySignal, title="Buy Signal", location=location.bottom, color=color.green, style=shape.triangleup, size=size.tiny)
plotshape(exitLong, title="exitLong", location=location.top, color=color.red, style=shape.triangledown, size=size.tiny)
plotshape(sellSignal, display = twoWayTrading?display.pane:display.none, title="Sell Signal", location=location.top, color=color.red, style=shape.triangledown, size=size.tiny)
plotshape(exitShort, display = twoWayTrading?display.pane:display.none, title="exitShort", location=location.bottom, color=color.green, style=shape.triangleup, size=size.tiny)