Stratégie de backtesting High-Low Breakout


Date de création: 2023-11-27 15:37:13 Dernière modification: 2023-11-27 15:37:13
Copier: 0 Nombre de clics: 689
1
Suivre
1617
Abonnés

Stratégie de backtesting High-Low Breakout

Aperçu

La stratégie de retracement de rupture des hauts et des bas est une stratégie de suivi de la tendance qui utilise les hauts et les bas historiques des actions pour déterminer si les prix ont franchi ces hauts et ces bas. Elle génère un signal d’achat en calculant les hauts et les bas d’une période donnée, lorsque le prix de la période actuelle dépasse le prix le plus élevé de la dernière période donnée; génère un signal de vente lorsque le prix tombe sous le prix le plus bas de la dernière période donnée.

Principe de stratégie

La logique de base de cette stratégie est de calculer le plus haut et le plus bas prix d’une période donnée (la ligne K par défaut de 50 lignes). On peut choisir d’utiliser le prix de clôture ou le plus haut et le plus bas prix (le plus haut et le plus bas prix par défaut) pour calculer le plus haut et le plus bas prix. On peut ensuite déterminer si le prix de clôture ou le plus haut de la ligne K actuelle est supérieur au plus haut prix de la dernière période donnée.

Une fois qu’un signal d’achat a été généré, la stratégie achète à ce prix et définit un prix d’arrêt et d’arrêt. Lorsque le prix touche le prix d’arrêt, la stratégie s’arrête et s’arrête.

Analyse des avantages

Cette stratégie de détection de rupture à basse altitude présente les avantages suivants:

  1. La logique de la stratégie est simple, facile à comprendre et à mettre en œuvre.
  2. Il est capable de saisir les caractéristiques tendancielles du prix d’une action, en fonction de la tendance des prix.
  3. Il est possible de modifier la combinaison de paramètres de stratégie la plus appropriée en ajustant le paramètre Finding.
  4. Un système de freinage et d’arrêt intégré permet de contrôler les risques.
  5. L’affichage visuel facilite grandement l’ajustement des paramètres et l’analyse des résultats.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Il est susceptible de générer des transactions répétitives et des transactions excessives.
  2. Il est fréquent d’ouvrir des positions lorsque les prix fluctuent.
  3. L’indicateur n’est pas à la hauteur et peut manquer une grande opportunité de tendance.
  4. La fréquence et l’ampleur des fluctuations du cours des actions ne sont pas prises en compte.
  5. Il n’y a pas d’indicateurs pour vérifier le signal.

Afin de maîtriser ces risques, il est possible d’optimiser les choses de la manière suivante:

  1. Réduire la marge de stop loss et augmenter le temps de détention.
  2. Les conditions d’ouverture des positions ont été augmentées pour éviter les ouvertures fréquentes.
  3. Optimiser les paramètres pour trouver la meilleure combinaison de paramètres
  4. Combiné à d’autres indicateurs, le signal de filtrage

Direction d’optimisation

Cette stratégie de détection de rupture peut être optimisée dans les domaines suivants:

  1. L’optimisation des paramètres permet de trouver les paramètres optimaux en testant plus systématiquement différentes combinaisons de paramètres.

  2. Il est possible, par exemple, de combiner un indicateur de moyenne mobile pour générer un signal d’achat uniquement lorsque le prix dépasse le prix le plus élevé et traverse la moyenne mobile à long terme sur la moyenne mobile à court terme.

  3. Prendre en compte la fréquence des fluctuations du cours de l’action. Par exemple, l’indicateur ATR peut être combiné avec une amplitude de rupture appropriée lorsque la fluctuation du cours de l’action augmente.

  4. Distinguer les marchés tendance et les marchés oscillation. Laisser les paramètres s’assouplir de manière appropriée pour suivre la tendance dans les phases de tendance évidente; les paramètres s’apprivoiser de manière appropriée dans les marchés oscillation.

  5. Augmentation des mécanismes de gestion des positions. Par exemple, arrêter d’ouvrir des positions lorsque les pertes atteignent un certain pourcentage.

Résumer

Dans l’ensemble, la stratégie de contre-mesure de rupture est une stratégie de suivi de tendance simple et pratique. Elle détermine les signaux de négociation en déterminant si le prix a franchi le prix le plus élevé et le prix le plus bas d’une certaine période. La stratégie présente des avantages tels que la simplicité, le suivi de la tendance et l’optimisation paramétrable, mais il existe également des risques de sur-transaction et d’incapacité à gérer les marchés instables.

Code source de la stratégie
/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)