Stratégie de trading hebdomadaire de support et de résistance à plusieurs niveaux basée sur le retour à la moyenne

Pivot SR MR SMA RSI ATR MA VOL
Date de création: 2025-02-18 18:04:15 Dernière modification: 2025-02-18 18:04:15
Copier: 2 Nombre de clics: 441
1
Suivre
1617
Abonnés

Stratégie de trading hebdomadaire de support et de résistance à plusieurs niveaux basée sur le retour à la moyenne

Aperçu

Cette stratégie est un système de trading de retour à la moyenne basé sur le Pivot Point. Elle détermine les points d’entrée et de sortie des transactions en calculant les niveaux de support (S1-S4) et de résistance (R1-R4) chaque semaine. La stratégie utilise une méthode de création de position par étapes, en effectuant plusieurs achats à différents niveaux de support et en tirant profit des niveaux de résistance correspondants.

Principe de stratégie

Le cœur de la stratégie est de calculer les pivots de la semaine en utilisant les hauts, les bas et les prix de clôture de la semaine précédente, puis de déterminer plusieurs niveaux de support et de résistance en fonction de la distance de points prédéfinie. Les achats sont effectués lorsque les prix touchent les niveaux de support et fixent un objectif de profit pour les niveaux de résistance correspondants. Le pivot = (le prix le plus élevé de la semaine dernière + le prix le plus bas de la semaine dernière + le prix de clôture de la semaine dernière) / 3 La stratégie permet de détenir jusqu’à 4 positions simultanément, chacune correspondant à un support et une résistance différents. Toutes les positions recalculent les nouveaux niveaux de négociation au début de chaque semaine. Cette conception garantit la continuité des transactions et s’adapte aux changements du marché.

Avantages stratégiques

  1. La logique de transaction est claire, facile à comprendre et à exécuter
  2. La mise en place d’un portefeuille par tranches réduit le risque d’une seule transaction
  3. Utilisation de points de résistance de support au niveau de la circonférence pour réduire l’impact du bruit pendant la journée
  4. La stratégie peut adapter les paramètres de manière flexible en fonction des caractéristiques du marché
  5. Contrôle des risques par le pourcentage de portefeuille
  6. Il n’y a pas de délai pour imposer des limites de plafonnement et donner aux transactions une marge de profit suffisante.

Risque stratégique

  1. Aucun arrêt de perte, ce qui pourrait entraîner une reprise plus importante sur un marché en forte tendance
  2. Les positions multiples peuvent prendre plus de fonds
  3. Des signaux erronés peuvent apparaître sur des marchés très volatils
  4. Un mauvais réglage des supports peut entraîner une mauvaise position pour la construction d’un entrepôt. Pour réduire le risque, il est recommandé d’ajouter un filtre de tendance, en ouvrant la position uniquement dans une tendance haussière; un stop-loss dynamique basé sur l’ATR peut également être configuré.

Orientation de l’optimisation de la stratégie

  1. Augmentation des mécanismes de confirmation des volumes et de la fiabilité des signaux d’entrée
  2. Introduction d’indicateurs techniques tels que le RSI pour le filtrage des surachats et des survente
  3. Développer des mécanismes de confirmation à cycles multiples pour réduire les faux signaux
  4. Optimiser le système de gestion des positions et ajuster le nombre de positions créées en fonction des fluctuations du marché
  5. Augmentation de l’analyse de la corrélativité pour éviter la création de positions simultanées dans des marchés hautement corrélatifs

Résumer

Il s’agit d’une stratégie de retour à la moyenne basée sur la théorie classique de l’analyse technique, qui capture les opportunités de négociation par un rebond de rupture dans les points de résistance soutenus par la courbe circulaire. La stratégie est conçue de manière simple et flexible, adaptée à une utilisation dans des marchés à forte volatilité.

Code source de la stratégie
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-17 00:00:00
period: 1d
basePeriod: 1d
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/
// © ViZiV

//@version=5
strategy("Weekly Pivot Strategy, Created by ViZiV", overlay=true, pyramiding=50, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, dynamic_requests=true)

// This is my first COMPLETED strategy, go easy on me :) - Feel free to imrprove upon this script by adding more features if you feel up to the task. Im 100% confiedent there are better coders than me :) I'm still learning.

// This is a LONG ONLY SWING STRATEGY (Patience REQUIRED) that being said, you can go short at you're own discretion. I prefer to use on NQ / US100 / USTech 100 but not limited to it. Im sure it can work in most markets. "You'll need to change settings to suit you're market".

// IMPORTANT NOTE: "default_qty_type=strategy.percent_of_equity" Can be changed to "Contacts" within the properties tab which allow you to see backtest of other markets. Reccomend 1 contract but it comes to preference.

// Inputs for support/resistance distances (Defined by Points). // IMPORTANT NOTE: Completely user Defined. Figure out best settings for what you're trading. Each market is different with different characteristics. Up to you to figure out YOU'RE market volatility for better results. 
s1_offset = input.float(155, "S1 Distance", step=1)
s2_offset = input.float(310, "S2 Distance", step=1)
s3_offset = input.float(465, "S3 Distance", step=1)
s4_offset = input.float(775, "S4 Distance", step=1)
r1_offset = input.float(155, "R1 Distance", step=1)
r2_offset = input.float(310, "R2 Distance", step=1)
r3_offset = input.float(465, "R3 Distance", step=1)
r4_offset = input.float(775, "R4 Distance", step=1)

// Weekly pivot calculation
var float pivot = na
var float s1 = na
var float s2 = na
var float s3 = na
var float s4 = na
var float r1 = na
var float r2 = na
var float r3 = na
var float r4 = na

// Get weekly data (Pivot Calculation)
prevWeekHigh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
prevWeekLow = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
prevWeekClose = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)

// Track active trades
var array<string> entry_ids = array.new<string>(0)
var array<float> profit_targets = array.new<float>(0)

// Update weekly levels
isNewWeek = ta.change(time("W")) != 0
if isNewWeek or na(pivot)
    pivot := (prevWeekHigh + prevWeekLow + prevWeekClose) / 3
    s1 := pivot - s1_offset
    s2 := pivot - s2_offset
    s3 := pivot - s3_offset
    s4 := pivot - s4_offset
    r1 := pivot + r1_offset
    r2 := pivot + r2_offset
    r3 := pivot + r3_offset
    r4 := pivot + r4_offset

// Plot current week's levels
plot(pivot, "Pivot", color=color.gray, linewidth=2)
plot(s1, "S1", color=color.blue, linewidth=1)
plot(s2, "S2", color=color.blue, linewidth=1)
plot(s3, "S3", color=color.blue, linewidth=1)
plot(s4, "S4", color=color.blue, linewidth=1)
plot(r1, "R1", color=color.red, linewidth=1)
plot(r2, "R2", color=color.red, linewidth=1)
plot(r3, "R3", color=color.red, linewidth=1)
plot(r4, "R4", color=color.red, linewidth=1)

// Function to create unique trade entries
checkEntry(level, target, entryNumber) =>
    currentWeek = str.tostring(year(time)) + "_" + str.tostring(weekofyear(time))
    entryId = "Entry" + str.tostring(entryNumber) + "_W" + currentWeek
    
    if low <= level and not array.includes(entry_ids, entryId)
        array.push(entry_ids, entryId)
        array.push(profit_targets, target)
        strategy.entry(entryId, strategy.long)
        strategy.exit("Exit" + entryId, entryId, limit=target)

// Check all entry levels
checkEntry(s1, r1, 1)
checkEntry(s2, r2, 2)
checkEntry(s3, r3, 3)
checkEntry(s4, r4, 4)

// Clean up completed trades using while loop
i = array.size(entry_ids) - 1
while i >= 0
    entryId = array.get(entry_ids, i)
    target = array.get(profit_targets, i)
    
    if high >= target
        array.remove(entry_ids, i)
        array.remove(profit_targets, i)
    i := i - 1