Stratégie de trading adaptative de momentum CCI à tangente hyperbolique inverse et système de contrôle des risques

IFTCCI CCI WMA 动量交易 阈值突破 再入场机制 止损策略
Date de création: 2025-05-27 11:11:47 Dernière modification: 2025-05-27 11:11:47
Copier: 0 Nombre de clics: 310
2
Suivre
319
Abonnés

Stratégie de trading adaptative de momentum CCI à tangente hyperbolique inverse et système de contrôle des risques Stratégie de trading adaptative de momentum CCI à tangente hyperbolique inverse et système de contrôle des risques

Aperçu

La stratégie de trading sur la dynamique CCI auto-adaptative est un système de trading quantitatif basé sur des indicateurs techniques, dont le cœur repose sur l’indicateur IFTCCI développé par Kıvanc Özbilgiç. La stratégie génère des signaux d’achat et de vente en définissant un niveau de dépréciation précis lorsque l’indicateur oscille entre -1 et +1. La stratégie déclenche un signal d’achat lorsque l’indicateur franchit un seuil spécifique à partir d’un niveau bas (inférieur à -0,95) vers le haut; déclenche un signal de vente lorsque l’indicateur franchit un seuil spécifique à partir d’un niveau élevé (supérieur à 0,95) vers le bas.

Principe de stratégie

Le cœur de cette stratégie est l’indicateur IFTCCI, qui est calculé en suivant les étapes suivantes:

  1. Comptez d’abord le CCI standard et divisez-le par 4 pour une standardisation initiale
  2. Multipliez la valeur CCI standardisée par 0,1 pour ajuster la sensibilité
  3. Appliquer la moyenne mobile pondérée (WMA) au traitement en douceur
  4. Enfin, la fonction de coupe orthogonale inverse ((tanh) est utilisée pour cartographier les valeurs dans la plage de -1 à +1.

La formule de calcul est la suivante:

v1 = 0.1 * (CCI(close, period) / 4)
v2 = WMA(v1, wma_period)
IFTCCI = (e^(2*v2) - 1) / (e^(2*v2) + 1)

La logique d’exécution de la stratégie est divisée en plusieurs parties clés:

  1. Conditions d’achat:

    • Signaux d’achat principaux: déclenchés lorsque l’indicateur IFTCCI passe de moins de -0,95 à plus de -0,94
    • Signal de reprise d’achat: déclenché lorsque l’indicateur augmente d’au moins 0,1 unité par rapport au point le plus bas
  2. Conditions de vente:

    • Vente cible: déclenchée lorsque l’indicateur IFTCCI passe de plus de 0,95 à moins de 0,94
    • Stop loss sell: déclenchée lorsque l’indicateur baisse d’au moins 0,1 unité par rapport au point le plus élevé de la période de détention
  3. Suivi du statut:

    • La valeur la plus élevée de l’indicateur enregistrée pendant la période de détention est utilisée pour le calcul du stop loss
    • Les valeurs minimales de l’indicateur de suivi après la clôture de la position sont utilisées pour la réadmission

L’ensemble de la stratégie utilise une gestion de fonds en pourcentage, utilisant 100% de fonds disponibles pour chaque transaction et interdisant les enchères. La stratégie calcule les signaux en temps réel lorsque chaque ligne K se forme, afin de capturer les dynamiques du marché en temps opportun.

Avantages stratégiques

  1. Des règles claires d’entrée et de sortieLa stratégie est basée sur une dévaluation numérique précise qui fournit des signaux de négociation clairs, évitant le jugement subjectif et rendant les décisions de négociation plus objectives et plus disciplinées.

  2. Système de gestion dynamique des risquesLe système de stop loss intégré permet de limiter efficacement les pertes d’une seule transaction et de se retirer automatiquement lorsque le mouvement inverse du marché dépasse la portée prédéfinie, protégeant ainsi les fonds.

  3. La capacité d’adaptation du marchéL’indicateur IFTCCI oscille entre -1 et +1 grâce à une conversion inverse de la courbe de rectification. Il présente des caractéristiques naturelles d’uniformisation et s’adapte à des environnements de marché très volatils.

  4. Signal plus lisse, moins de fausses percées: l’utilisation d’une moyenne mobile pondérée pour un traitement en douceur de la CCI originale, réduit efficacement le bruit et les faux signaux et améliore la fiabilité des signaux de transaction.

  5. La réintégration intelligenteLe mécanisme de réentrée permet au système de saisir à nouveau les opportunités et d’améliorer la rentabilité de la stratégie.

  6. La visualisation est bonne.La stratégie consiste à afficher des changements de couleurs de fond clairs sur le graphique pour aider les traders à comprendre de manière intuitive l’état du marché et les signaux de négociation.

  7. Ajustabilité des paramètres: Tous les paramètres clés peuvent être ajustés via une interface d’entrée, ce qui permet à la stratégie de s’adapter aux différentes conditions du marché et aux préférences de risque personnelles.

Risque stratégique

  1. Des échanges fréquents sur un marché en criseDans un marché en période de volatilité, l’indicateur peut fluctuer fréquemment à proximité d’une baisse, générant plusieurs signaux d’achat et de vente, ce qui entraîne une survente des transactions et une érosion des frais de traitement. Comment faire ?: il est possible d’ajouter des conditions de filtrage supplémentaires, comme un filtrage temporel ou un filtrage de tendance, pour réduire la fréquence des transactions dans un marché en crise.

  2. Problème de l’arrêt des pertes: La stratégie actuelle utilise une valeur fixe ((0,1 unité) comme marge de stop loss, qui peut être trop grande ou trop petite dans différents environnements de marché volatiles. *Comment faire ?*Il est possible de concevoir une amplitude de stop-loss adaptative, en ajustant la distance de stop-loss en fonction de la dynamique de la volatilité récente du marché.

  3. Le manque de confirmation de la tendance à long termeLa stratégie est basée sur la dynamique à court terme sans analyse de tendance à long terme, ce qui peut entraîner des transactions inutiles si la tendance principale est inversée. Comment faire ?: Introduction d’un indicateur de tendance à long terme comme filtre, permettant de négocier uniquement dans le sens de la tendance.

  4. Les risques liés à la réintégrationLe mécanisme de réentrée actuel est basé sur une marge de rebond fixe, qui peut être prématurée en cas de fausse rupture du marché. Comment faire ?: ajouter des conditions de confirmation supplémentaires, telles que la confirmation de la quantité de livraison ou le signal d’accompagnement d’autres indicateurs techniques.

  5. Dépendance à un seul indicateurLa stratégie repose sur un seul indicateur de l’IFTCCI pour prendre des décisions et manque d’analyse de marché multidimensionnelle. *Comment faire ?*L’introduction d’une combinaison d’indicateurs complémentaires, tels que le RSI, le MACD ou les indices de volatilité, fournit une confirmation du marché multi-angles.

Direction d’optimisation

  1. Intégration de l’analyse de plusieurs périodes: Les stratégies actuelles ne fonctionnent que sur une seule période et peuvent être intégrées à l’analyse de plusieurs périodes, par exemple en utilisant l’indicateur IFTCCI pour les périodes plus élevées comme filtre de direction de la transaction et en ne négociant que dans la direction de la plus grande tendance. Cela peut réduire les transactions de contre-courant et améliorer le taux de victoire.

  2. Ajustement dynamique des seuils: Modifier les seuils fixes (−0.950.95) en des seuils ajustés en fonction de la dynamique de la volatilité du marché. Utiliser des seuils plus étroits dans des environnements à faible volatilité et des seuils plus larges dans des environnements à forte volatilité pour s’adapter aux besoins de génération de signaux dans différentes conditions de marché.

  3. Mécanisme de confirmation des livraisons: L’ajout d’un composant d’analyse de la quantité de transaction, qui nécessite un support de transaction significatif lors de la génération du signal, permet de filtrer les signaux de rupture de mauvaise qualité et de réduire les pertes causées par les fausses ruptures.

  4. Optimisation de la gestion des fonds: Les stratégies actuelles utilisent des pourcentages fixes pour la gestion des positions, ce qui peut être amélioré pour un système de gestion de fonds adaptatif basé sur la volatilité et le taux de victoire du marché, augmentant les positions sur les signaux de haute confiance et réduisant les positions sur les signaux de faible confiance.

  5. Le renforcement de l’apprentissage automatique: L’optimisation de l’adaptation des paramètres de l’indicateur IFTCCI (cycle CCI et cycle WMA) est effectuée à l’aide d’algorithmes d’apprentissage automatique, afin d’ajuster automatiquement la meilleure combinaison de paramètres en fonction des différentes conditions du marché et d’améliorer l’adaptabilité de la stratégie.

  6. Filtrage des heures de transaction: Ajouter un filtre de temps de négociation pour éviter les périodes de forte volatilité avant l’ouverture et la fermeture du marché, ou pour éviter les périodes de publication de données économiques importantes, afin de réduire les fluctuations imprévisibles causées par des événements inattendus.

  7. Analyse de corrélation: L’introduction d’analyses de corrélation avec d’autres marchés ou actifs augmente la crédibilité des signaux de négociation et la stabilité de la stratégie lorsque des signaux similaires apparaissent simultanément sur plusieurs marchés concernés.

Résumer

La stratégie de trading CCI auto-adaptative est un système de trading quantifié, bien structuré et logiquement clair, qui génère des signaux de négociation par rupture de seuil de l’indicateur IFTCCI, et est équipé d’un mécanisme de stop-loss et de réentrée pour gérer les risques et saisir les opportunités. Les principaux avantages de cette stratégie résident dans la clarté du signal, la dynamique du contrôle des risques et la flexibilité des paramètres.

Cependant, la stratégie est également exposée à des risques tels que la fréquence des transactions sur les marchés volatiles, l’inflexibilité des arrêts fixes et le manque de confirmation de tendances à long terme. L’intégration de l’analyse sur plusieurs périodes, l’ajustement dynamique des valeurs de dépréciation, l’ajout de la confirmation des volumes, l’optimisation de la gestion des fonds, l’introduction d’améliorations de l’apprentissage automatique et l’ajout de filtrage des heures de négociation peuvent considérablement améliorer la stabilité et la rentabilité de la stratégie.

Pour les traders qui souhaitent appliquer cette stratégie, il est recommandé de tester d’abord différentes combinaisons de paramètres dans un environnement simulé, de trouver les meilleures configurations adaptées à leur variété de trading et à leurs préférences en matière de risque, et d’intégrer progressivement les orientations d’optimisation proposées dans cet article pour construire un système de trading plus complet et plus robuste.

Code source de la stratégie
/*backtest
start: 2024-05-27 00:00:00
end: 2025-01-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © erkankuskonmaz

//@version=5
strategy("IFTCCI Buy Sell Signal Strategy",
         overlay=false,
         pyramiding=0,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=100,
         calc_on_every_tick=true) // NEW LINE: Enables real-time signal generation.

// --- Indicator Settings and Calculations (IFTCCIv2) ---
group_indicator_params = "Indicator Parameters (IFTCCIv2)"
ccilength_param = input.int(5, "CCI Period", group=group_indicator_params)
wmalength_param = input.int(9, title="Smoothing Period (WMA)", group=group_indicator_params)

// IFTCCIv2 Calculation
v1_calc = 0.1 * (ta.cci(close, ccilength_param) / 4)
v2_calc = ta.wma(v1_calc, wmalength_param)
indicator_value_ift = (math.exp(2 * v2_calc) - 1) / (math.exp(2 * v2_calc) + 1)

// --- Strategy Rule Inputs ---
group_entry_rules = "Buy Signal Conditions"
entry_low_prev_max = input.float(-0.95, title="Primary Buy: Previous Bar Max Value", group=group_entry_rules)
entry_low_curr_min = input.float(-0.94, title="Primary Buy: Current Bar Min Value", group=group_entry_rules)
reentry_trigger_units = input.float(0.10, title="Re-entry: Rise from Lowest Value", group=group_entry_rules)

group_exit_rules = "Sell Signal Conditions (Exit Position)"
exit_high_prev_min = input.float(0.95, title="Target Sell: Previous Bar Min Value", group=group_exit_rules)
exit_high_curr_max = input.float(0.94, title="Target Sell: Current Bar Max Value", group=group_exit_rules)
stop_loss_units = input.float(0.10, title="Stop Loss: Drop from Peak Value", group=group_exit_rules)

// --- Indicator Values for Strategy ---
float ind_val = indicator_value_ift
float ind_val_prev = indicator_value_ift[1]

// --- State Tracking Variables ---
var float highest_indicator_since_long_entry = na
var bool track_for_reentry_after_close = false
var float lowest_indicator_since_reentry_tracking_started = na

// --- Update State Logic ---
// 1. Update the highest indicator value since entering long position
if strategy.position_size > 0
    if strategy.position_size[1] <= 0
        highest_indicator_since_long_entry := ind_val
    else
        highest_indicator_since_long_entry := math.max(highest_indicator_since_long_entry, ind_val)
else
    if strategy.position_size[1] > 0
        highest_indicator_since_long_entry := na

// 2. Update re-entry tracking mechanism
if strategy.position_size[1] > 0 and strategy.position_size == 0
    track_for_reentry_after_close := true
    lowest_indicator_since_reentry_tracking_started := ind_val
else if strategy.position_size > 0
    track_for_reentry_after_close := false
    lowest_indicator_since_reentry_tracking_started := na
else if track_for_reentry_after_close and strategy.position_size == 0
    if not na(lowest_indicator_since_reentry_tracking_started)
        lowest_indicator_since_reentry_tracking_started := math.min(lowest_indicator_since_reentry_tracking_started, ind_val)
    else
        lowest_indicator_since_reentry_tracking_started := ind_val

// --- Buy Conditions (Long Entry) ---
bool can_enter_new_position = strategy.opentrades == 0

// Condition 1: Main Buy Condition
bool condition_main_buy_cross = ind_val_prev <= entry_low_prev_max and ind_val >= entry_low_curr_min
bool main_long_entry_trigger = condition_main_buy_cross and can_enter_new_position

// Condition 2: Re-entry Buy Condition
bool condition_re_entry_trigger = false
if track_for_reentry_after_close and not na(lowest_indicator_since_reentry_tracking_started) and can_enter_new_position
    if ind_val >= lowest_indicator_since_reentry_tracking_started + reentry_trigger_units
        condition_re_entry_trigger := true

// Combined Buy Condition
bool final_long_entry_condition = main_long_entry_trigger or condition_re_entry_trigger

// --- Sell Conditions (Long Exit) ---
bool currently_in_long_position = strategy.position_size > 0

// Sell Condition 1: Target Sell
bool condition_sell_target = ind_val_prev >= exit_high_prev_min and ind_val <= exit_high_curr_max

// Sell Condition 2: Stop Loss
bool condition_sell_stop_loss = false
if currently_in_long_position and not na(highest_indicator_since_long_entry)
    if ind_val <= highest_indicator_since_long_entry - stop_loss_units
        condition_sell_stop_loss := true

// Combined Sell Condition
bool final_long_exit_condition = currently_in_long_position and (condition_sell_target or condition_sell_stop_loss)

// --- Strategy Orders ---
if (final_long_entry_condition)
    entry_comment = main_long_entry_trigger ? "Buy (Primary)" : "Buy (Re-entry)"
    strategy.entry("Buy ID", strategy.long, comment=entry_comment)

if (final_long_exit_condition)
    exit_comment = condition_sell_target ? "Sell (Target)" : "Sell (Stop)"
    strategy.close("Buy ID", comment=exit_comment)

// --- Plot Indicator and Strategy Markers ---
plot(indicator_value_ift, title="IFTCCI Value", color=color.rgb(0, 0, 0), linewidth=2)
hline(0, "Mid Level", color=color.new(#787b86, 50), linestyle=hline.style_dotted)
hline(0.95, "Upper Reference (+0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)
hline(-0.95, "Lower Reference (-0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)

// Background Coloring on Entry and Exit Signals
color background_color = final_long_entry_condition ? color.new(color.green, 81) : final_long_exit_condition ? color.new(color.red, 81) : na
bgcolor(background_color, title="Signal Background")