Stratégie de trading quantitative basée sur les modèles d'inversion de support et de résistance


Date de création: 2024-06-07 16:45:09 Dernière modification: 2024-06-07 16:45:09
Copier: 3 Nombre de clics: 611
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur les modèles d’inversion de support et de résistance

Aperçu

La stratégie est basée sur les formes de retournement dans l’analyse technique (lignes de tête, formes d’absorption et étoiles de croix) ainsi que sur les positions de support et de résistance, et se négocie sur un graphique de 1 heure. La stratégie exécute les transactions en identifiant les points de retournement potentiels du marché et en les exécutant à des niveaux d’arrêt et de perte prévus.

L’idée principale de cette stratégie est d’ouvrir des positions en plus lorsque des retours de tendance baissière se produisent près des positions de soutien (comme des lignes de tête, des formes de coupe de tendance baissière ou des croix) et des positions vides lorsque des formes de retours de tendance baissière se produisent près des positions de résistance (comme des lignes de tête, des formes de coupe de tendance baissière ou des croix). Tout en définissant des niveaux d’arrêt et de perte pour contrôler le risque et bloquer les bénéfices.

Principe de stratégie

  1. Les valeurs de support et de résistance sont déterminées en calculant les valeurs minimales et maximales de la période de rétroaction spécifiée à l’aide des fonctions ta.lowest() et ta.highest().
  2. Déterminez si la carte actuelle est en forme de ligne de tête, de forme d’absorption ou d’étoile croisée.
  3. Si une tendance à la baisse se présente près des points de support, ouvrez une position plus forte; si une tendance à la baisse se présente près des points de résistance, ouvrez une position vide.
  4. Le prix stop est fixé à 3% du prix d’ouverture et le prix stop à 1% du prix d’ouverture.
  5. Le prix atteint un niveau d’arrêt ou d’arrêt de perte, et la position est levée.

Avantages stratégiques

  1. La combinaison de la forme inverse et de la résistance aux supports clés améliore la fiabilité des signaux de négociation.
  2. Définir clairement les niveaux d’arrêt et d’arrêt de perte pour contrôler efficacement les risques.
  3. Il s’applique à la fois aux marchés tendanciels et aux marchés instables, et capte les occasions potentielles de retournement.
  4. Le code est simple, facile à comprendre et à mettre en œuvre.

Risque stratégique

  1. Les signaux de retournement sont fréquents dans les marchés instables, ce qui peut entraîner des pertes de commissions et de survente des transactions.
  2. Le jugement du support et de la résistance dépend de la sélection de la période de rétroaction. Des périodes de rétroaction différentes peuvent entraîner des résultats différents.
  3. La fiabilité de la forme inverse n’est pas absolue, les faux signaux peuvent entraîner des pertes.

La solution est simple:

  1. Réduire les faux signaux en ajustant les paramètres et les conditions de confirmation de la forme inversée.
  2. En combinaison avec d’autres indicateurs techniques ou d’émotions du marché, améliorer la fiabilité des signaux.
  3. Adapter les niveaux de stop-loss et de stop-loss de manière appropriée pour répondre aux différentes conditions du marché.

Orientation de l’optimisation de la stratégie

  1. L’introduction d’indicateurs de volume des transactions confirme l’efficacité des formes inversées. Les formes inversées à volume élevé peuvent être plus fiables.
  2. Prendre en compte les points de résistance de soutien sur plusieurs périodes de temps pour améliorer la précision des points de résistance de soutien.
  3. Il est préférable de négocier dans le sens de la tendance en combinant des indicateurs de tendance comme les moyennes mobiles, afin d’éviter de négocier à contre-courant.
  4. Optimiser les niveaux d’arrêt et de perte, en fonction de la dynamique de la volatilité du marché, pour obtenir un meilleur rapport risque/rendement.

Résumer

La stratégie est simple à utiliser et s’applique à différents environnements de marché. Cependant, le succès de la stratégie dépend d’un jugement précis des formes de retournement et des résistances de soutien. La performance de la stratégie peut être encore améliorée en optimisant les conditions de confirmation des signaux de négociation, en combinaison avec d’autres indicateurs techniques, et en ajustant dynamiquement les niveaux de stop-loss.

Code source de la stratégie
/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
basePeriod: 15m
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/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")