Stratégie de trading quantitative de renversement de tendance par simulation Renko sans repeinture en plusieurs étapes

RENKO RSI SMA EMA VOL BRICK BACKTESTING REPAINTING
Date de création: 2025-03-04 10:26:05 Dernière modification: 2025-03-04 10:26:05
Copier: 0 Nombre de clics: 547
2
Suivre
319
Abonnés

Stratégie de trading quantitative de renversement de tendance par simulation Renko sans repeinture en plusieurs étapes Stratégie de trading quantitative de renversement de tendance par simulation Renko sans repeinture en plusieurs étapes

Aperçu de la stratégie

Cette stratégie est un système de trading quantitatif sans refonte basé sur l’imitation des graphiques Renko, qui résout le problème de la refonte dans la stratégie traditionnelle Renko en simulant le comportement des blocs Renko sur un graphique de temps standard. La stratégie utilise des blocs de prix de taille fixe pour filtrer le bruit du marché, en se concentrant uniquement sur les changements de prix significatifs, tout en veillant à ce que les signaux historiques restent inchangés.

Principales caractéristiques:

  • Réalisation de l’effet Renko sur le graphique temporel
  • Inversion de tendance à l’aide d’un bloc de changement de direction
  • Un mécanisme de vérification en plusieurs étapes pour améliorer la qualité du signal
  • Graphique de la formation du bloc
  • Résultats des retours stables et cohérence avec les transactions en temps réel

Principe de stratégie

Le principe central de cette stratégie est d’implémenter les fonctionnalités des blocs Renko sur un graphique de temps standard, tout en résolvant les problèmes de redessinage dans le graphique traditionnel de Renko. Le principe de fonctionnement est le suivant:

  1. Configuration et initialisation des paramètres:

    • brickSize: Définition de la taille d’un bloc qui détermine la quantité de prix qui doit bouger pour qu’un nouveau bloc se forme
    • renkoPriceLe prix de clôture du dernier bloc Renko est stocké.
    • prevRenkoPriceLe prix de la première brique de Renko est resté au même niveau.
    • brickDir: Suivre la direction des blocs: 1 = hausse, -1 = baisse
    • newBrickLe symbole de Boole indique si de nouveaux blocs se sont formés
    • brickStart: Indice de colonne qui stocke le début du bloc actuel
  2. Identification des blocs de Renko qui n’ont pas été redessinés:

    • Le système effectue des calculs uniquement sur la colonne de confirmation, assurant que les données historiques ne sont pas recalculées
    • Calculer la différence entre le prix actuel et le niveau du bloc Renko précédent
    • Une nouvelle pile Renko est formée lorsque la différence de prix atteint ou dépasse la taille de la pile
    • Mise à jour des niveaux de prix des blocs en fonction du nombre de blocs pouvant supporter une variation de prix
    • Modifier la direction de la brique et définir le logo pour indiquer la formation d’une nouvelle brique
  3. Renko visualisé sur le graphique temporel:

    • Tracer des blocs de style Renko sur un graphique standard à l’aide d’éléments graphiques
    • Les cases vertes représentent les blocs.
    • Le carré rouge représente le bloc baissier.
    • La formation d’une tumeur ne change jamais et ne disparaît jamais.
  4. Un retour en arrière en plusieurs étapes:

    • La stratégie consiste à vérifier non seulement la direction du bloc actuel, mais aussi à comparer plusieurs blocs historiques.
    • Vérification d’un véritable renversement de tendance en vérifiant le changement de direction de plusieurs blocs consécutifs

Avantages stratégiques

Après une analyse approfondie du code, la stratégie présente les avantages suivants:

  1. Résoudre le problème de la refonte:

    • Les stratégies traditionnelles de Renko fonctionnent bien dans le backtest, mais échouent souvent dans le live, principalement en raison de problèmes de redessinage
    • Cette stratégie permet de simuler le comportement de Renko sur un graphique de temps standard, en veillant à ce que les blocs ne changent pas une fois qu’ils se forment.
    • Cela rend les résultats plus fiables et plus proches de ceux obtenus sur disque.
  2. Filtrage du bruit et détection des tendances:

    • Les graphiques Renko ont en eux-mêmes la caractéristique de filtrer les petites fluctuations et de ne former de nouveaux blocs que lorsque le prix déplace le montant prédéfini.
    • Cela aide à identifier les tendances claires des prix et à réduire les faux signaux.
    • Convient pour rechercher des fluctuations significatives des prix dans un marché très volatil
  3. Vérification de signaux en plusieurs étapes:

    • Les stratégies vérifient non seulement les changements d’une seule direction, mais aussi la direction de plusieurs blocs consécutifs
    • En comparantbrickDir[brickSize]Par rapport à l’actuelbrickDiret le niveau historique des prix
    • Le mécanisme de vérification en plusieurs étapes réduit considérablement les signaux d’erreur
  4. Base de négociation visualisée:

    • Dessiner des blocs colorés sur un graphique pour visualiser la structure des prix
    • Les boîtes vertes et rouges indiquent clairement la direction du marché
    • Des outils visuels pour aider les traders à mieux comprendre le comportement des marchés
  5. Flexibilité et personnalisation:

    • La taille du bloc peut être ajustée par l’utilisateur, permettant une stratégie d’optimisation en fonction des différents marchés et des délais
    • Les blocs de plus petite taille génèrent des signaux de trading plus fréquents, adaptés aux transactions à court terme.
    • Une taille de bloc plus grande filtre plus de bruit, pour un suivi des tendances à moyen et long terme

Risque stratégique

Bien que la stratégie ait résolu le problème de la refonte, les facteurs de risque suivants demeurent:

  1. Risque de retard de signal:

    • L’exécution de la transaction peut être un peu plus tardive que le graphique traditionnel de Renko car la stratégie effectue des calculs uniquement sur la colonne de confirmation
    • Les points d’entrée peuvent avoir manqué le meilleur prix dans un marché en évolution rapide
    • Solution: envisagez de combiner avec d’autres indicateurs de confirmation ou d’ajuster la taille des blocs pour équilibrer la rapidité et l’exactitude
  2. La taille du bloc choisit le risque:

    • Les blocs trop petits génèrent trop de signaux de transaction, augmentent les coûts de transaction et peuvent conduire à des transactions excessives.
    • Les blocs trop gros risquent de manquer des points de basculement importants
    • Solution: optimiser la taille du bloc en fonction de la volatilité de l’actif cible et de la période de négociation
  3. Risque de retour de tendance et de faux signaux:

    • Malgré l’utilisation de la vérification en plusieurs étapes, les fausses percées peuvent survenir dans des marchés très volatils
    • Les prix peuvent traverser plusieurs fois la frontière du bloc avant qu’une véritable tendance ne se forme
    • Solution: envisagez d’ajouter des filtres supplémentaires, tels que la confirmation de la quantité de livraison ou l’indicateur de puissance
  4. Les risques de retrait:

    • La stratégie de renversement de tendance peut entraîner des pertes continues dans des marchés en forte tendance
    • Un signal inversé peut être déclenché trop tôt et entraîner des transactions négatives
    • La solution: mettre en place des mécanismes de coupe et des stratégies de gestion de position appropriés
  5. Calculer le risque des ressources:

    • Le traçage d’une grande quantité de blocs peut être très coûteux, en particulier sur de longues périodes et de grands ensembles de données.
    • Le code limite le nombre maximal de boîtes à 500, ce qui peut être insuffisant dans certains cas.
    • Solution: Optimiser l’efficacité du code ou considérer d’afficher seulement les N blocs les plus récents

Orientation de l’optimisation de la stratégie

Sur la base de l’analyse du code, voici quelques points clés d’optimisation de la stratégie:

  1. Optimisation de la taille des blocs dynamiques:

    • La stratégie actuelle utilise des tailles de blocs fixes, qui peuvent être améliorées pour des tailles de blocs dynamiques basées sur la volatilité du marché
    • Utilisez des blocs plus petits pendant les basses vibrations et des blocs plus gros pendant les hautes vibrations
    • Cela améliorera l’adaptabilité de la stratégie aux différentes conditions du marché.
    • Méthode de mise en œuvre: la taille des blocs peut être ajustée dynamiquement à l’aide de l’ATR (amplitude de fluctuation réelle)
  2. Ajout de filtres de transaction:

    • Combinaison d’un débit ou d’autres indicateurs de dynamique pour confirmer un signal de renversement de tendance
    • Évitez de négocier dans des conditions de faible liquidité ou de forte volatilité
    • Méthode de mise en œuvre: ajout de conditions de confirmation supplémentaires basées sur le RSI, la rupture de transaction ou le MACD
  3. Amélioration des mécanismes de prévention et de compensation:

    • Les stratégies actuelles ne peuvent augmenter les niveaux de stop loss et de profit cible que si elles sont inversées.
    • Définition de stop-loss dynamique basée sur le nombre de fois la taille du bloc
    • Météo: ajoutstrategy.exit()Commande qui définit un point d’arrêt basé sur l’ATR ou la taille du bloc
  4. Optimiser les mécanismes de vérification en plusieurs étapes:

    • La stratégie actuelle utilise des fixesbrickSizeLes multiples pour comparer les blocs historiques
    • Le nombre d’étapes de comparaison de l’histoire optimale à étudier
    • Retour sur différents marchés et périodes afin de trouver la meilleure combinaison de paramètres
    • Méthode d’implémentation: paramétrer le nombre d’étapes et permettre à l’utilisateur de personnaliser la profondeur de validation
  5. Amélioration des systèmes de visualisation et d’alerte:

    • Ajout de lignes de tendance et de marqueurs de niveau clé
    • Ajout de fonctionnalités d’alerte de formation de bloc et de signaux de transaction
    • Indique l’intensité et la durée de la tendance actuelle
    • Méthode de réalisation: utilisationlabel.new()etalert()Fonctions améliorant l’expérience utilisateur

Résumer

La stratégie de trading de renversement de la tendance de Renko en simulation de renversement de la tendance en plusieurs étapes résout avec succès le problème de renversement dans la stratégie traditionnelle de Renko, permettant aux traders d’appliquer la logique de Renko sur un graphique de temps standard tout en conservant la stabilité du signal historique. La stratégie reconnaît le renversement de la tendance grâce à un mécanisme de vérification en plusieurs étapes, améliore la qualité du signal et montre visuellement la structure du marché par des graphiques.

Les principaux avantages de la stratégie résident dans la résolution des problèmes de redimensionnement, le filtrage du bruit du marché, la validation de signaux à plusieurs niveaux et l’affichage graphique intuitif. Cependant, il existe toujours des risques tels que le retard du signal, le choix de la taille du bloc et les faux signaux.

Cette approche, qui combine les avantages des graphiques Renko et évite leurs inconvénients, est particulièrement adaptée aux stratégies de suivi de tendance et de revers de tendance, offrant aux traders un outil d’analyse technique fiable capable de fournir une performance stable en temps réel tout en conservant l’exactitude des relevés.

Code source de la stratégie
//@version=5
strategy("Non-Repainting Renko Emulation Strategy [PineIndicators]", overlay=true, calc_on_every_tick=false, max_boxes_count = 500, max_labels_count = 500, max_lines_count = 500, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.01, slippage = 2)

// Parameter: Brick-Größe (z.B. 10 Punkte)
brickSize = input.float(3.0, "Brick Size", step=0.1)

// Persistente Variablen
var float renkoPrice     = na    // Aktueller Renko-Level (Schlusswert des letzten Bricks)
var float prevRenkoPrice = na    // Vorheriger Renko-Level (für Box-Berechnung)
var int   brickDir       = 0     // 1 = Aufwärts, -1 = Abwärts
var bool  newBrick       = false // Signalisiert, dass ein neuer Brick abgeschlossen wurde
var int   brickStart     = bar_index  // Beginn des aktuellen Bricks (x-Achse)

// Berechnungen nur auf abgeschlossenen Candles
if barstate.isconfirmed
    newBrick := false
    // Initialisierung: Beim ersten Candle setzen wir den Renko-Level
    if na(renkoPrice)
        renkoPrice := close
        brickStart := bar_index
    // Berechne die Differenz zum letzten Renko-Level
    diff = close - renkoPrice
    // Prüfen, ob der Unterschied mindestens der Brick-Größe entspricht
    if math.abs(diff) >= brickSize
        // Anzahl kompletter Bricks (kann > 1 sein)
        numBricks = math.floor(math.abs(diff) / brickSize)
        prevRenkoPrice := renkoPrice
        // Aktualisieren des Renko-Levels
        renkoPrice := renkoPrice + numBricks * brickSize * math.sign(diff)
        // Brick-Richtung (konvertiere math.sign-Ergebnis in int)
        brickDir := int(math.sign(diff))
        newBrick := true

        // Bestimme die obere und untere Grenze des abgeschlossenen Bricks:
        lowLevel  = brickDir == 1 ? prevRenkoPrice : renkoPrice
        highLevel = brickDir == 1 ? renkoPrice     : prevRenkoPrice

        // Setze den Start für den nächsten Brick
        brickStart := bar_index


// Handelslogik: Einstieg/Ausstieg nur, wenn ein neuer Brick abgeschlossen wurde
if barstate.isconfirmed and newBrick
    // Bei Aufwärts-Brick: Long-Signal
    if brickDir[brickSize] < brickDir and renkoPrice[brickSize] < renkoPrice[brickSize*2] and renkoPrice < renkoPrice[brickSize] and renkoPrice[brickSize*2] < renkoPrice[brickSize*3] and strategy.position_size <= 0
        // Bestehende Short-Position schließen, falls vorhanden
        strategy.entry("Long", strategy.long)

    // Bei Abwärts-Brick: Short-Signal
    else if brickDir[brickSize] > brickDir and renkoPrice[brickSize] > renkoPrice[brickSize*2] and renkoPrice > renkoPrice[brickSize] and renkoPrice[brickSize*2] > renkoPrice[brickSize*3] and strategy.position_size >= 0
        // Bestehende Long-Position schließen, falls vorhanden
        strategy.entry("Short", strategy.short)

if barstate.isconfirmed and newBrick
    if brickDir[brickSize] < brickDir
        strategy.close("Short")

    else if brickDir[brickSize] > brickDir
        strategy.close("Long")