Stratégie de croisement SMA long et short combinée à un contrôle de retracement de pic et à une terminaison automatique

SMA
Date de création: 2024-07-29 14:16:58 Dernière modification: 2024-07-29 14:16:58
Copier: 0 Nombre de clics: 555
1
Suivre
1617
Abonnés

Stratégie de croisement SMA long et short combinée à un contrôle de retracement de pic et à une terminaison automatique

Aperçu

Cette stratégie est un système de trading multichannel qui combine les signaux de croisement des moyennes mobiles simples (SMA) et le contrôle des retraits des pics. Elle utilise les croisements des SMA des périodes 14 et 28 pour générer des signaux de négociation multichannels, tout en surveillant en temps réel les retraits des pics de la stratégie.

Principe de stratégie

  1. Le signal de transaction est généré:

    • Un signal de multiplication est généré lorsque le SMA de 14 est traversé par le SMA de 28.
    • Un signal de couverture est généré lorsque le SMA de 14 est traversé par le SMA de 28.
  2. Le contrôle des retraits de pointe:

    • Le suivi en temps réel de la courbe des droits et intérêts de la stratégie, en enregistrant les plus hauts de l’histoire (pic) [2].
    • Lorsque la valeur actuelle est inférieure à la valeur maximale, on entre dans un état de retrait et on enregistre un point le plus bas (le fond de la vallée).
    • Le pourcentage de rétractation est calculé comme = (Pic-Bottom) /Pic * 100%.
    • Si le pourcentage de retrait dépasse le seuil de retrait maximal prévu, la stratégie cesse d’ouvrir de nouvelles positions.
  3. L’analyse des cycles sommet-fond:

    • Définir le pourcentage de retraite minimum pour définir un cycle de pointe-fond efficace.
    • Chaque fois qu’un cycle valide est terminé, le numéro de cycle, l’augmentation, le retrait et la fin des cycles précédents sont enregistrés.
    • Les résultats de l’analyse seront présentés sous forme de tableaux, permettant aux traders de voir la performance historique de la stratégie.

Avantages stratégiques

  1. Le suivi des tendances et le contrôle des risques: La stratégie de croisement SMA est une méthode classique de suivi de la tendance, tandis que la maîtrise des retraits de pointe offre une couche supplémentaire de gestion du risque. Cette combinaison permet de contrôler efficacement le risque de baisse tout en capturant les tendances du marché.

  2. Il est très adaptable: En paramétrant les seuils de retrait maximal et minimal, la stratégie peut être adaptée de manière flexible en fonction des différentes conditions du marché et des préférences de risque personnelles.

  3. Les indicateurs de risque sont transparents: L’analyse des cycles de crête et de crevasse fournit des informations détaillées sur les retraits historiques, permettant aux traders de comprendre intuitivement les caractéristiques de risque de la stratégie et de prendre des décisions commerciales plus avisées.

  4. Le contrôle automatique des risques: La stratégie arrête automatiquement la négociation lorsque le retrait dépasse la barre de départ. Ce mécanisme est efficace pour prévenir les pertes continues dans un environnement de marché défavorable.

  5. Une analyse complète de la performance: En plus des indicateurs de retournement habituels, la stratégie fournit des données détaillées sur les cycles de crête et de crevasse, y compris des informations sur la montée, la descente et le moment de la descente, ce qui permet d’analyser en profondeur la performance de la stratégie.

Risque stratégique

  1. La dépendance à l’égard des données historiques: La stratégie de croisement SMA est basée sur des données historiques de prix et peut être retardée dans un marché en évolution rapide, ce qui entraîne des signaux erronés.

  2. Les transactions sont fréquentes: Dans les marchés volatiles, les SMA peuvent se croiser fréquemment, ce qui entraîne des transactions excessives et des coûts de transaction élevés.

  3. Le retrait potentiel est important: Bien qu’il y ait un maximum de contrôle des retraits, une seule chute peut entraîner des pertes plus importantes en cas de forte volatilité du marché.

  4. Sensitivité des paramètres: La performance de la stratégie est fortement tributaire de la sélection des cycles SMA et des seuils de rétractation. Des paramètres mal réglés peuvent entraîner des résultats sous-optimisés.

  5. Le blogueur a écrit sur son blog: La stratégie peut manquer l’occasion d’un retournement de marché après avoir atteint le seuil maximal de retrait.

Orientation de l’optimisation de la stratégie

  1. Modifier les paramètres dynamiques: On peut envisager d’ajuster les cycles SMA et les valeurs de retrait en fonction de la dynamique de la volatilité du marché pour s’adapter à différentes conditions de marché.

  2. Pour ajouter un filtre supplémentaire: Il peut être combiné avec d’autres indicateurs techniques ou fondamentaux, tels que le RSI ou le volume de transactions, pour filtrer les signaux potentiellement faux.

  3. Les joueurs sont admis et évacués par lots: Au lieu d’opérer sur l’ensemble des entrepôts, il est possible de construire des entrepôts par lots et par tranches, afin de réduire le risque d’une seule décision.

  4. Le système de rétention d’eau: Ajout d’une fonction d’arrêt dynamique basée sur le contrôle de retrait pour verrouiller les bénéfices et améliorer le taux de rendement global.

  5. Optimisation de la gestion des fonds: Gestion dynamique des positions basée sur la taille des comptes et la volatilité du marché pour une meilleure maîtrise des risques.

  6. Les algorithmes de l’apprentissage automatique: Optimiser le processus de sélection des paramètres et de génération des signaux en utilisant des techniques d’apprentissage automatique pour améliorer l’adaptabilité et la précision des stratégies.

Résumer

La stratégie SMA Cross Multiple Options combinant le contrôle des retraits de crête et l’arrêt automatique est un système de trading quantitatif qui combine le suivi de la tendance et la gestion des risques. Il capture les tendances du marché en croisant des moyennes mobiles simples, tout en utilisant le contrôle des retraits de crête pour gérer les risques de baisse. La stratégie est unique en raison de sa fonctionnalité d’analyse détaillée des cycles de crête et de vallée, qui fournit aux traders des outils d’approfondissement des caractéristiques du risque de la stratégie.

Bien que la stratégie présente des risques inhérents, tels qu’une dépendance excessive aux données historiques et à la sensibilité des paramètres, sa stabilité et sa rentabilité peuvent être considérablement améliorées par des optimisations et des améliorations appropriées, telles que l’introduction d’ajustements de paramètres dynamiques, l’ajout de filtres de marché supplémentaires et la réalisation d’une gestion de fonds plus intelligente.

Dans l’ensemble, cette stratégie offre aux traders un bon point de départ sur lequel ils peuvent s’appuyer pour la personnalisation et l’optimisation ultérieures afin de répondre à leurs objectifs de trading et à leurs préférences en matière de risque. La conception modulaire de la stratégie permet également une intégration facile avec d’autres stratégies de trading ou technologies de gestion des risques, ce qui permet de construire des systèmes de trading plus complexes et plus complets.

Code source de la stratégie
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
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/

capital = 10000

//@version=5
strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100)

// The code below is from Tradingwhale LLC
/// ==============================================================================
//  Peak-Trough Cycles with Date and Prev. RunUp
// Initialize variables
showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?")
min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.")
maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.")

var float equityPeak = na
var float equityTrough = na
var int cycleCount = 0
var bool inDrawdown = false
var float initialCapital = capital
var float prevTrough = initialCapital
var float prevRunUp = na
var bool useLighterGray = true
var int lastYear = na

// Variable to indicate whether the strategy should end
var bool end_strategy = false

// Table to display data
var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1)

// Function to convert float to percentage string
f_to_percent(value) =>
    str.tostring(value, "#.##") + "%"

// Function to get month/year string without commas
get_month_year_string() =>
    str.tostring(year) + "/" + str.tostring(month)

// Update the table headers
if (bar_index == 0 and showTable)
    table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal)

// Track peaks and troughs in equity
if (na(equityPeak) or strategy.equity > equityPeak)
    if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle
        drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
        if drawdownPercentage > min_trough
            cycleCount += 1
            prevRunUp := (equityPeak - prevTrough) / prevTrough * 100
            if cycleCount <= 20 and showTable
                currentYear = year
                if na(lastYear) or currentYear != lastYear
                    useLighterGray := not useLighterGray
                    lastYear := currentYear
                rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50)
                table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal)
            prevTrough := equityTrough
    equityPeak := strategy.equity
    equityTrough := na
    inDrawdown := false
else if (strategy.equity < equityPeak)
    equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity)
    inDrawdown := true

// Calculate if the strategy should end
if not na(equityPeak) and not na(equityTrough)
    drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
    if drawdownPercentage >= maxdraw
        end_strategy := true


// This code below is from Tradingview, but with additions where commented (see below)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Short Entry Id", strategy.short)