Les ressources ont été chargées... Je charge...

Stratégie courte et longue croisée SMA avec contrôle du tirage à pic et fin automatique

Auteur:ChaoZhang est là., Date: 2024-07-29 14:16:58 Le gouvernement a décidé d'arrêter le projet de loi.
Les étiquettes:SMA

img

Résumé

Cette stratégie est un système de trading long-short qui combine les signaux de croisement de la moyenne mobile simple (SMA) avec le contrôle du pic de retrait. Elle utilise le croisement des SMA de 14 périodes et de 28 périodes pour générer des signaux de trading longs et courts tout en surveillant simultanément le pic de retrait de la stratégie. Lorsque le retrait dépasse un seuil prédéfini, la stratégie arrête automatiquement la négociation. En outre, la stratégie comprend une fonction d'analyse détaillée du cycle de pic à creux pour aider les traders à mieux comprendre les caractéristiques de risque de la stratégie.

Principe de stratégie

  1. Génération de signaux commerciaux

    • Un signal long est généré lorsque la SMA à 14 périodes franchit le seuil de la SMA à 28 périodes.
    • Un signal court est généré lorsque la SMA à 14 périodes dépasse la SMA à 28 périodes.
  2. Contrôle du pic de tirage:

    • Suivi en temps réel de la courbe des actions de la stratégie, en enregistrant les pics historiques.
    • Lorsque les fonds propres courants tombent en dessous du sommet, ils entrent dans un état d'épuisement, enregistrant le point le plus bas (trough).
    • Le pourcentage de tirage est calculé comme suit: (Pie - Trough) /Pie * 100%.
    • Si le pourcentage de prélèvement dépasse le seuil de prélèvement maximum prédéfini, la stratégie cesse d'ouvrir de nouvelles positions.
  3. Analyse du cycle de pic à travers:

    • Définir un pourcentage de prélèvement minimum pour définir les cycles de pic à creux valides.
    • Pour chaque cycle valide terminé, noter le numéro du cycle, le pourcentage de mise en service précédent, le pourcentage de retrait et l'heure de fin.
    • L'analyse de l'affichage se traduit par un tableau permettant de faire un examen facile des performances historiques de la stratégie.

Les avantages de la stratégie

  1. Combine le suivi des tendances et le contrôle des risques: La stratégie de croisement SMA est une méthode classique de suivi des tendances, tandis que le contrôle du pic de retrait fournit une couche supplémentaire de gestion des risques.

  2. Une grande adaptabilité: En paramétrant les seuils maximaux et minimaux de tirage, la stratégie peut être adaptée de manière flexible aux différents environnements du marché et aux préférences personnelles en matière de risque.

  3. Indicateurs de risque transparents: L'analyse du cycle de pic à creux fournit des informations détaillées sur le retrait historique, permettant aux traders de comprendre intuitivement les caractéristiques de risque de la stratégie, ce qui les aide à prendre des décisions commerciales plus éclairées.

  4. Contrôle automatisé des risques: Lorsque le recours dépasse le seuil prédéfini, la stratégie cesse automatiquement de négocier.

  5. Analyse complète des performances: Outre les mesures de backtesting conventionnelles, la stratégie fournit des données détaillées sur le cycle de pointe à basse, y compris les pourcentages de mise en route, les pourcentages de retrait et les informations sur le temps, ce qui facilite une analyse approfondie du rendement de la stratégie.

Risques stratégiques

  1. Une trop grande confiance dans les données historiques: La stratégie de croisement SMA est basée sur des données historiques sur les prix et peut réagir lentement dans des marchés en évolution rapide, ce qui conduit à de faux signaux.

  2. Commerce fréquent: Dans les marchés oscillants, les SMA peuvent se croiser fréquemment, ce qui entraîne une négociation excessive et des coûts de transaction élevés.

  3. Le potentiel de grands tirages: Malgré un contrôle maximal de la baisse, une seule forte baisse lors d'une forte volatilité du marché peut toujours entraîner des pertes importantes.

  4. Sensitivité du paramètre: Les performances de la stratégie dépendent fortement du choix des périodes SMA et des seuils de tirage.

  5. Des occasions manquées de revenir en arrière: Lorsque la négociation s'arrête après avoir atteint le seuil maximal de retrait, la stratégie peut manquer les opportunités offertes par les revers du marché.

Directions d'optimisation de la stratégie

  1. Introduire le réglage dynamique des paramètres: Il convient d'envisager d'ajuster dynamiquement les périodes SMA et les seuils de prélèvement en fonction de la volatilité du marché afin de s'adapter aux différents environnements du marché.

  2. Filtres de marché supplémentaires: Incorporer d'autres indicateurs techniques ou facteurs fondamentaux, tels que le RSI ou le volume, pour filtrer les faux signaux potentiels.

  3. Mettre en œuvre l'entrée et la sortie par étapes: Au lieu d'opérations tout ou rien, mettre en œuvre la création et la clôture de positions par étapes pour réduire le risque de décisions uniques.

  4. Ajouter un mécanisme de prise de profit: En plus du contrôle des retraits, ajoutez une fonction de prise de profit dynamique pour verrouiller les bénéfices et améliorer les rendements globaux.

  5. Optimiser la gestion de l'argent: Mettre en œuvre une dimensionnement dynamique des positions en fonction de la taille du compte et de la volatilité du marché pour un meilleur contrôle des risques.

  6. Introduire des algorithmes d'apprentissage automatique: Utiliser des techniques d'apprentissage automatique pour optimiser les processus de sélection de paramètres et de génération de signaux, améliorant ainsi l'adaptabilité et la précision de la stratégie.

Conclusion

La stratégie SMA crossover long-short combinée avec le contrôle du pic de tirage et l'arrêt automatique est un système de trading quantitatif qui équilibre le suivi de tendance et la gestion des risques. Elle capture les tendances du marché grâce à des croisements simples de moyennes mobiles tout en gérant le risque à la baisse en utilisant le contrôle du pic de tirage.

Bien que la stratégie présente certains risques inhérents, tels que la dépendance excessive aux données historiques et à la sensibilité des paramètres, elle peut améliorer considérablement sa robustesse et sa rentabilité grâce à une optimisation et des améliorations appropriées.

Dans l'ensemble, cette stratégie offre aux traders un bon point de départ qui peut être personnalisé et optimisé pour répondre aux objectifs de trading individuels et aux préférences en matière de risque.


/*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)



Relationnée

Plus de