Stratégie de trading de tendance intelligente à oscillation aléatoire multiparamètres

STOCH EMA SMA RR SL TP POP
Date de création: 2025-01-06 16:09:58 Dernière modification: 2025-01-06 16:09:58
Copier: 1 Nombre de clics: 374
1
Suivre
1617
Abonnés

Stratégie de trading de tendance intelligente à oscillation aléatoire multiparamètres

Aperçu

Cette stratégie est un système de trading intelligent basé sur l’oscillateur stochastique. Il combine la reconnaissance dynamique des tendances, la confirmation de plusieurs signaux et des fonctions de gestion intelligente des risques, et peut identifier automatiquement les conditions de marché de surachat et de survente et effectuer des transactions. La stratégie affiche visuellement l’état du marché via un système de codage couleur, intègre des moyennes mobiles sur plusieurs périodes (EMA) pour la confirmation des tendances et fournit des paramètres flexibles de stop-loss et de take-profit.

Principe de stratégie

Le cœur de la stratégie repose sur la coordination de l’oscillateur stochastique et du système de moyennes mobiles multiples. Un signal de trading est généré lorsque la valeur K dépasse le niveau de surachat ou de survente prédéfini (9315) ou le niveau médian (40). Le système affiche visuellement l’état du marché par des changements de couleur (le rouge indique une baisse possible, le vert indique une hausse possible et le bleu indique la neutralité). Il intègre également des moyennes mobiles exponentielles (EMA) sur 20, 50, 100 et 200 périodes pour la confirmation des tendances. La stratégie comprend également un système de gestion des risques intelligent qui prend en charge différents paramètres de ratio risque/rendement tels que 1:1, 1:4 et 1:8.

Avantages stratégiques

  1. Le système de signalisation est clair et intuitif, avec un code couleur pour identifier rapidement l’état du marché
  2. Mécanisme de confirmation de signaux multiples pour réduire le risque de faux signaux
  3. Système de gestion des risques flexible, prend en charge le rapport risque-rendement personnalisé
  4. Combiné avec des moyennes mobiles sur plusieurs périodes pour fournir une confirmation de tendance
  5. Paramètres automatisés de stop loss et de take profit pour réduire le risque d’opération manuelle
  6. La structure du code est claire, facile à entretenir et à optimiser

Risque stratégique

  1. Des signaux de trading fréquents peuvent être générés dans un marché volatil
  2. Les seuils fixes de surachat et de survente peuvent ne pas être appropriés dans tous les environnements de marché
  3. Les systèmes de moyenne mobile peuvent être à la traîne dans les marchés volatils
  4. Il est nécessaire de fixer un stop loss raisonnable pour contrôler le risque Les solutions incluent : l’ajout de mécanismes de filtrage du signal, l’ajustement dynamique des seuils, l’optimisation des paramètres de moyenne mobile et la mise en œuvre stricte de stratégies de stop-loss.

Orientation de l’optimisation de la stratégie

  1. Introduction d’un système de seuil adaptatif pour ajuster dynamiquement les niveaux de surachat et de survente en fonction des fluctuations du marché
  2. Ajoutez un indicateur de volume pour confirmer le signal
  3. Développer un mécanisme de filtrage de signal intelligent pour réduire les faux signaux
  4. Optimiser les paramètres de moyenne mobile pour améliorer la précision du jugement de tendance
  5. Présentation des algorithmes d’apprentissage automatique pour optimiser la sélection des paramètres
  6. Ajouter un mécanisme de contrôle de retracement

Résumer

Cette stratégie construit un système de trading complet en combinant l’oscillateur stochastique, le système de moyenne mobile et la gestion intelligente des risques. La conception de la stratégie met l’accent sur l’aspect pratique et l’opérabilité et convient aux traders ayant des préférences de risque différentes. Grâce à une optimisation et une amélioration continues, la stratégie devrait permettre de maintenir des performances stables dans différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//██████╗ ███████╗████████╗██████╗ ██╗   ██╗███████╗                             
//██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██║   ██║██╔════╝                             
//██████╔╝█████╗     ██║   ██████╔╝██║   ██║███████╗                             
//██╔═══╝ ██╔══╝     ██║   ██╔══██╗██║   ██║╚════██║                             
//██║     ███████╗   ██║   ██║  ██║╚██████╔╝███████║                             
//╚═╝     ╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝ ╚══════╝                             
                                                                               
//██╗   ██╗ ██████╗ ██████╗ ███████╗███╗   ██╗██╗   ██╗███████╗                  
//██║   ██║██╔═══██╗██╔══██╗██╔════╝████╗  ██║██║   ██║██╔════╝                  
//██║   ██║██║   ██║██████╔╝█████╗  ██╔██╗ ██║██║   ██║███████╗                  
//╚██╗ ██╔╝██║   ██║██╔══██╗██╔══╝  ██║╚██╗██║██║   ██║╚════██║                  
// ╚████╔╝ ╚██████╔╝██║  ██║███████╗██║ ╚████║╚██████╔╝███████║                  
//  ╚═══╝   ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝                  
                                                                               
//██████╗ ███████╗██████╗ ███████╗ ██████╗ ██████╗ ██╗███╗   ██╗██╗   ██╗███████╗
//██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔══██╗██║████╗  ██║██║   ██║██╔════╝
//██████╔╝█████╗  ██████╔╝█████╗  ██║  ███╗██████╔╝██║██╔██╗ ██║██║   ██║███████╗
//██╔═══╝ ██╔══╝  ██╔══██╗██╔══╝  ██║   ██║██╔══██╗██║██║╚██╗██║██║   ██║╚════██║
//██║     ███████╗██║  ██║███████╗╚██████╔╝██║  ██║██║██║ ╚████║╚██████╔╝███████║
//╚═╝     ╚══════╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝

//@version=6
strategy("CM Stochastic POP Method 3", shorttitle="CM_Stochastic POP_M3", overlay=true)

// Stochastic Settings
length = input.int(14, "Stochastic Length", minval=1)
smoothK = input.int(5, "Smooth K", minval=1)

// Risk:Reward Settings
use_rr = input.bool(true, "Use Risk:Reward Ratio")
use_sl = input.bool(true, "Use Stop Loss")  // New input for Stop Loss toggle
rr_options = input.string("1:1", "Risk:Reward Ratio", options=["1:1", "1:4", "1:8"])
stop_percent = input.float(1.0, "Stop Loss (%)", minval=0.1, step=0.1)

// Convert selected R:R ratio to number
get_rr_multiplier(rr) =>
    switch rr
        "1:1" => 1.0
        "1:4" => 4.0
        "1:8" => 8.0
        => 1.0  // default case
rr_ratio = get_rr_multiplier(rr_options)

// Fixed Level Settings
upperLine = 93.0  // Fixed sell level
midLine = 40.0    // Buy/Sell level
lowerLine = 15.0  // Fixed buy level

// EMA Settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Calculate Stochastic with smoothing
k = ta.sma(ta.stoch(close, high, low, length), smoothK)

// Dynamic color based on K value
kColor = k >= upperLine ? color.red :    // Above 93 -> Red
         k <= lowerLine ? color.green :   // Below 15 -> Green
         k <= midLine ? color.green :     // Below 40 -> Green
         color.blue                       // Between 40-93 -> Blue

// Buy Signals:
longCondition1 = ta.crossover(k, lowerLine)   // Cross above 15
longCondition2 = ta.crossover(k, midLine)     // Cross above 40

// Sell Signals:
shortCondition1 = ta.crossunder(k, upperLine) // Cross below 93
shortCondition2 = ta.crossunder(k, midLine)   // Cross below 40

calc_tp_sl(entry_price, is_long) =>
    sl_distance = entry_price * (stop_percent / 100)
    sl = is_long ? entry_price - sl_distance : entry_price + sl_distance
    tp_distance = sl_distance * rr_ratio
    tp = is_long ? entry_price + tp_distance : entry_price - tp_distance
    [sl, tp]

// Long entries
if (longCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_15", strategy.long)
        if (use_sl)
            strategy.exit("Exit_15", "Long_15", stop=sl, limit=tp)
        else
            strategy.exit("Exit_15", "Long_15", limit=tp)
    else
        strategy.entry("Long_15", strategy.long)

if (longCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_40", strategy.long)
        if (use_sl)
            strategy.exit("Exit_40", "Long_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Long_40", limit=tp)
    else
        strategy.entry("Long_40", strategy.long)

// Short entries
if (shortCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_93", strategy.short)
        if (use_sl)
            strategy.exit("Exit_93", "Short_93", stop=sl, limit=tp)
        else
            strategy.exit("Exit_93", "Short_93", limit=tp)
    else
        strategy.entry("Short_93", strategy.short)

if (shortCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_40", strategy.short)
        if (use_sl)
            strategy.exit("Exit_40", "Short_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Short_40", limit=tp)
    else
        strategy.entry("Short_40", strategy.short)

// Plot EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=1, force_overlay = true)
plot(ema50, title="EMA 50", color=color.yellow, linewidth=1, force_overlay = true)
plot(ema100, title="EMA 100", color=color.orange, linewidth=1, force_overlay = true)
plot(ema200, title="EMA 200", color=color.purple, linewidth=1, force_overlay = true)

// Plot Stochastic line 
plot(k, title="Stochastic", color=kColor, linewidth=2)

// Plot reference lines 
hline(100, title="100 Line", color=color.white, linestyle=hline.style_solid)
hline(upperLine, title="93 Line", color=color.red, linestyle=hline.style_solid)
hline(midLine, title="40 Line", color=color.green, linestyle=hline.style_dashed)
hline(lowerLine, title="15 Line", color=color.green, linestyle=hline.style_solid)
hline(0, title="0 Line", color=color.white, linestyle=hline.style_solid)