
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.
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.
Cette stratégie de détection de rupture à basse altitude présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Afin de maîtriser ces risques, il est possible d’optimiser les choses de la manière suivante:
Cette stratégie de détection de rupture peut être optimisée dans les domaines suivants:
L’optimisation des paramètres permet de trouver les paramètres optimaux en testant plus systématiquement différentes combinaisons de paramètres.
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.
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.
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.
Augmentation des mécanismes de gestion des positions. Par exemple, arrêter d’ouvrir des positions lorsque les pertes atteignent un certain pourcentage.
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.
/*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)