
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.
Le signal de transaction est généré:
Le contrôle des retraits de pointe:
L’analyse des cycles sommet-fond:
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é.
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.
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.
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.
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.
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.
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.
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é.
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.
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.
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é.
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.
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.
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.
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.
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.
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.
/*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)