Stratégie de trading quantitative de suivi des tendances conditionnelles multiples basée sur les niveaux de retracement de Fibonacci

SL MA TP ATR
Date de création: 2024-12-20 15:55:57 Dernière modification: 2024-12-20 15:55:57
Copier: 1 Nombre de clics: 420
1
Suivre
1617
Abonnés

Stratégie de trading quantitative de suivi des tendances conditionnelles multiples basée sur les niveaux de retracement de Fibonacci

Aperçu

Cette stratégie est une stratégie de suivi de tendance basée sur les niveaux de rétractation de Fibonacci. La stratégie utilise principalement les niveaux de rétractation de Fibonacci cruciaux pour calculer les prix les plus élevés et les plus bas de la journée de négociation précédente, en combinant la position du prix d’ouverture et la fenêtre de temps pour définir plusieurs conditions d’entrée, et en définissant les positions de stop loss correspondantes pour les différentes conditions, afin de maîtriser la tendance et le contrôle du risque.

Principe de stratégie

La stratégie commence par calculer six niveaux de retrait de Fibonacci clés: (0,23,6%, 38,2%, 50%, 61,8% et 100%). Selon la position du prix d’ouverture par rapport à ces niveaux, les conditions d’entrée sont divisées en trois situations: 1) le prix d’ouverture est compris entre 23,6% et 50%; 2) le prix d’ouverture est de 61,8% et dans la fenêtre de temps spécifiée; 3) le prix d’ouverture est inférieur à 23,6% et inférieur au point le plus bas de la veille.

Avantages stratégiques

  1. Utilisez les niveaux de retraite de Fibonacci comme points de résistance de soutien clés, qui ont une grande influence sur le marché.
  2. La combinaison de plusieurs critères de la fenêtre de temps et de la position des prix améliore la précision de la stratégie.
  3. La flexibilité de la gestion des risques est illustrée par la mise en place d’une position d’arrêt adaptée aux différentes situations.
  4. La logique de la stratégie est claire, les paramètres sont adaptables et peuvent être optimisés en fonction des différentes conditions du marché.

Risque stratégique

  1. L’efficacité du niveau de rétractation de Fibonacci peut être réduite en fonction de l’environnement du marché.
  2. Le réglage de la fenêtre d’heure fixe peut laisser passer de bonnes opportunités pour d’autres périodes.
  3. Le réglage de la position d’arrêt de perte peut être facilement touché lors de fortes fluctuations.
  4. La stratégie ne prend pas en compte la tendance générale du marché et peut être fréquemment négociée dans des marchés à la baisse ou en volatilité.

Orientation de l’optimisation de la stratégie

  1. L’introduction d’indicateurs de jugement de tendance (comme le système de ligne moyenne) et l’exécution des transactions lorsque la tendance est claire.
  2. Augmentation de l’indicateur de volatilité ((comme ATR), ajustement dynamique de la position de stop loss。
  3. L’ajout d’une analyse de volumes de transactions améliore la crédibilité de la rupture de prix.
  4. Optimiser les paramètres de la fenêtre de temps, en considérant les meilleures périodes de négociation en fonction de l’analyse des données historiques.
  5. L’objectif est d’augmenter les bénéfices et d’améliorer les mécanismes de rentabilité.

Résumer

La stratégie a pour avantage d’être logiquement claire et de contrôler le risque, mais elle doit encore être optimisée et améliorée en fonction des conditions du marché. L’optimisation de la stratégie peut être encore améliorée en ajoutant des aspects tels que le jugement des tendances, le stop loss dynamique et l’analyse du volume des transactions.

Code source de la stratégie
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)