Retracement en pourcentage en zigzag à plusieurs niveaux combiné à une stratégie de trading avec indicateur stochastique

ZZ ATR RSI STOCH SMA
Date de création: 2025-02-21 11:18:39 Dernière modification: 2025-02-21 11:18:39
Copier: 0 Nombre de clics: 477
2
Suivre
319
Abonnés

Retracement en pourcentage en zigzag à plusieurs niveaux combiné à une stratégie de trading avec indicateur stochastique Retracement en pourcentage en zigzag à plusieurs niveaux combiné à une stratégie de trading avec indicateur stochastique

Aperçu

La stratégie est un système de négociation qui combine le pourcentage de retraite ZigZag et l’indicateur stochastique. La stratégie identifie les points de basculement critiques de la tendance du marché à l’aide de l’indicateur ZigZag dynamiquement ajusté et, combiné à un indicateur aléatoire, des signaux de surachat et de survente pour optimiser le moment d’entrée.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Indicateur ZigZag dynamique - Pourcentage de rétractation d’ajustement dynamique ATR qui prend en charge un réglage manuel ou basé sur différentes périodes (de 5 à 50)
  2. Filtrage des indices aléatoires - Indicateurs aléatoires avec des valeurs K de 9 cycles et une fluidité de 3 cycles
  3. Le signal de transaction est généré:
    • Conditions d’achat: prix dépassant la ligne de retournement et indice K aléatoire inférieur à 20
    • Conditions de vente: prix en dessous de la ligne de retournement et indice K aléatoire supérieur à 80
  4. Gestion des risques - Stop loss (pour 100 points) et Stop Stop (pour 300 points) avec un nombre fixe de points

Avantages stratégiques

  1. Adaptabilité - Adaptation dynamique des stratégies aux différents environnements du marché grâce aux ATR
  2. Multiple confirmation - combinée à des indicateurs de tendance et de dynamique pour réduire les faux signaux
  3. Les risques sont maîtrisés - avec un système de prévention des pertes bien développé
  4. Signal clair - les signaux de transaction sont clairs et faciles à exécuter
  5. Flexibilité des paramètres - Prise en charge de la personnalisation de plusieurs paramètres pour une optimisation facile

Risque stratégique

  1. Risque de choc du marché - risque de déclenchement fréquent d’un stop loss dans un contexte de choc intermédiaire
  2. Risque de glissade - une plus grande glissade est possible en cas de vitesse élevée
  3. Risque de stop-loss fixe - le stop-loss à points fixes peut ne pas être adapté à toutes les conditions du marché
  4. Risque de fausse percée - peut générer un faux signal de percée dans la zone de réglage
  5. Sensitivité des paramètres - les choix des paramètres ont un impact significatif sur les performances de la stratégie

Orientation de l’optimisation de la stratégie

  1. Optimisation dynamique des arrêts de perte - envisagez d’utiliser l’ATR ou le taux de volatilité pour ajuster dynamiquement la position de perte
  2. Filtrage de l’environnement du marché - ajout d’un indicateur de force de tendance pour ouvrir une position lorsque la tendance est forte
  3. Confirmation de signal renforcée - ajout de confirmation de livraison envisageable
  4. Optimisation du temps d’entrée - l’introduction de la reconnaissance des formes de prix pour améliorer la précision d’entrée
  5. Gestion de position efficace - ajustement dynamique de la taille de la position en fonction de la volatilité

Résumer

Cette stratégie, combinée à ZigZag et à des indicateurs aléatoires, permet de construire un système de négociation relativement complet. Les principales caractéristiques de la stratégie sont la clarté des signaux et la maîtrise des risques, mais les paramètres doivent toujours être optimisés en fonction de la situation réelle du marché. Il est recommandé de faire un retour d’expérience suffisant avant la négociation en direct et d’améliorer continuellement la stratégie en fonction de l’expérience du marché.

Code source de la stratégie
/*backtest
start: 2025-02-18 14:00:00
end: 2025-02-20 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("[RS]ZigZag Percent Reversal with Stochastic Strategy", overlay=true)

//  ||---}---------------------------------------------------------------------||

//  |--------------------------------------------------------------------------||
//  |   ZigZag:                                                                ||
//  |--------------------------------------------------------------------------||
//  |{
string percent_method = input.string(
         defval="MANUAL", 
         title="Method to use for the zigzag reversal range:", 
         options=[
             "MANUAL", 
             "ATR005 * X", "ATR010 * X", "ATR020 * X", "ATR050 * X", "ATR100 * X", "ATR250 * X"
             ]
         )

var float percent = input.float(
         defval=0.25, 
         title="Percent of last pivot price for zigzag reversal:", 
         minval=0.0, maxval=99.0
         ) / 100

float percent_multiplier = input.float(
         defval=1.0, 
         title="Multiplier to apply to ATR if applicable:"
         )
if percent_method == "ATR005 * X"
    percent := ta.atr(5) / open * percent_multiplier
if percent_method == "ATR010 * X"
    percent := ta.atr(10) / open * percent_multiplier
if percent_method == "ATR020 * X"
    percent := ta.atr(20) / open * percent_multiplier
if percent_method == "ATR050 * X"
    percent := ta.atr(50) / open * percent_multiplier
if percent_method == "ATR100 * X"
    percent := ta.atr(100) / open * percent_multiplier
if percent_method == "ATR250 * X"
    percent := ta.atr(250) / open * percent_multiplier

//  ||-------------------------------------------------------------------------||
//  ||  zigzag function:
//  ||-------------------------------------------------------------------------||
//  |{
f_zz(_percent)=>


    //  direction after last pivot
    var bool _is_direction_up = na
    //  track highest price since last lower pivot
    var float _htrack = na
    //  track lowest price since last higher pivot
    var float _ltrack = na
    //  zigzag variable for plotting
    var float _pivot = na
    //  range needed for reaching reversal threshold
    float _reverse_range = 0.0
    //  real pivot time
    var int _real_pivot_time = na
    var int _htime = na
    var int _ltime = na
    //  reverse line
    var float _reverse_line = na
    
    if bar_index >= 1
        
        if na(_is_direction_up)
            _is_direction_up := true
        
        _reverse_range := nz(_pivot[1]) * _percent
        
        if _is_direction_up
            _ltrack := na
            _ltime := time
            
            if na(_htrack)
                if high > high[1]
                    _htrack := high
                    _htime := time
                else
                    _htrack := high[1]
                    _htime := time[1]
            else
                if high > _htrack
                    _htrack := high
                    _htime := time

            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _htrack - _reverse_range
            
            // If close <= reversal line, mark pivot and reverse direction
            if close <= _reverse_line
                _pivot := _htrack
                _real_pivot_time := _htime
                _is_direction_up := false

        if not _is_direction_up
            _htrack := na
            _htime := na
            
            if na(_ltrack)
                if low < low[1]
                    _ltrack := low
                    _ltime := time
                else
                    _ltrack := low[1]
                    _ltime := time[1]
            else
                if low < _ltrack
                    _ltrack := low
                    _ltime := time
                
            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _ltrack + _reverse_range
            
            // If close >= reversal line, mark pivot and reverse direction
            if close >= _reverse_line
                _pivot := _ltrack
                _real_pivot_time := _ltime
                _is_direction_up := true

    [_pivot, _is_direction_up, _reverse_line, _real_pivot_time]

[pivot, direction_up, reverse_line, pivot_time] = f_zz(percent)

// Çizim
// Sabit Reversal Line (fiyat seviyesinde sabit)
var float static_reverse_line = na
if (not na(reverse_line))
    static_reverse_line := reverse_line

plot(series=static_reverse_line, color=color.gray, style=plot.style_line, title="Reversal Line", trackprice=false)

//  ||-------------------------------------------------------------------------||
//  ||  Stochastic:                                                            ||
//  ||-------------------------------------------------------------------------||
//  |{
K_length = 9
K_smoothing = 3

// Stochastic %K hesaplama
stochK = ta.sma(ta.stoch(close, high, low, K_length), K_smoothing)

//  ||-------------------------------------------------------------------------||
//  ||  Custom Buy/Sell Signals:
//  ||-------------------------------------------------------------------------||
//  |{
// Buy sinyali: Fiyat reversal line'ının üstünde ve stochastic K değeri 20'nin altında ise
buy_signal = close > static_reverse_line and stochK < 20

// Sell sinyali: Fiyat reversal line'ının altındaysa ve stochastic K değeri 80'in üstünde ise
sell_signal = close < static_reverse_line and stochK > 80

// Alım ve satım sinyali için strateji girişlerini ekle
long_condition = buy_signal
short_condition = sell_signal

// **Burada Stop Loss ve Take Profit değerleri ayarlandı**
stop_loss_pips = 100  // Stop Loss 10 pip
take_profit_pips = 300  // Take Profit 30 pip

// Stop Loss ve Take Profit seviyeleri hesaplanıyor
long_stop_loss = close - stop_loss_pips * syminfo.mintick
long_take_profit = close + take_profit_pips * syminfo.mintick
short_stop_loss = close + stop_loss_pips * syminfo.mintick
short_take_profit = close - take_profit_pips * syminfo.mintick

// Long stratejisi: Alım sinyali ve stop loss/take profit seviyeleri ile
if long_condition
    strategy.entry("Buy", strategy.long, stop=long_stop_loss, limit=long_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Buy", stop=long_stop_loss, limit=long_take_profit)
    // Webhook ile alım bildirimi gönder
    alert("Buy Signal Triggered!", alert.freq_once_per_bar)

// Short stratejisi: Satım sinyali ve stop loss/take profit seviyeleri ile
if short_condition
    strategy.entry("Sell", strategy.short, stop=short_stop_loss, limit=short_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Sell", stop=short_stop_loss, limit=short_take_profit)
    // Webhook ile satım bildirimi gönder
    alert("Sell Signal Triggered!", alert.freq_once_per_bar)

// Alım sinyali gösterimi
plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", textcolor=color.white)
// Satım sinyali gösterimi
plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", textcolor=color.white)