Stratégie de contre-test du disjoncteur haut bas

Auteur:ChaoZhang est là., Date: 2023-11-27 15:37:13 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie High Low Breaker Backtest est une stratégie de suivi des tendances qui utilise les hauts et les bas historiques d'un stock pour déterminer si le prix dépasse ces plages de hauts-bas. Elle calcule le prix le plus élevé et le prix le plus bas sur une certaine période, et génère des signaux d'achat lorsque le prix de la période en cours dépasse le prix le plus élevé sur une période récente, et des signaux de vente lorsque le prix dépasse le prix le plus bas sur une période récente.

La logique de la stratégie

La logique de base de cette stratégie est de calculer le prix le plus élevé et le prix le plus bas sur un certain nombre de barres (défaut 50 barres). Lors du calcul des prix les plus élevés / les plus bas, il permet d'utiliser les prix de clôture ou les prix élevés / bas réels (défaut d'utiliser les prix élevés / bas). Ensuite, il vérifie si le prix de clôture ou le prix élevé de la barre actuelle dépasse le prix le plus élevé au cours de la dernière période. Si oui et qu'il y a eu plus d'un nombre minimum de barres (défaut 30 barres) depuis la dernière barre de prix la plus élevée, il génère un signal d'achat. De même, si le prix de clôture ou le prix bas de la barre actuelle dépasse le prix le plus bas au cours de la dernière période et qu'un nombre minimum de barres depuis la dernière barre de prix le plus bas est passé, il génère un signal de vente.

Après avoir généré des signaux d'achat, la stratégie entre dans des positions longues à ce prix, avec un prix de stop loss et un prix de profit.

Analyse des avantages

Cette stratégie de backtest à haut et à bas disjoncteur présente les avantages suivants:

  1. La logique est simple et facile à comprendre/implémenter.
  2. Il peut capturer certaines caractéristiques de tendance des cours des actions.
  3. Les paramètres peuvent être optimisés pour trouver les meilleures combinaisons de paramètres.
  4. L'arrêt des pertes et la prise de bénéfices intégrés contrôlent le risque.
  5. Les visualisations facilitent grandement le réglage des paramètres et l'analyse des résultats.

Analyse des risques

Cette stratégie comporte également des risques:

  1. Prédisposé à des transactions multiples et à des transactions excessives.
  2. Ouverture fréquente de positions lorsque le prix oscille.
  3. Perte d'opportunités de tendance majeures si les paramètres ne sont pas correctement définis.
  4. Sans tenir compte de la fréquence et de l'ampleur des fluctuations de prix.
  5. Aucune validation du signal avec d'autres indicateurs.

Les aspects suivants peuvent contribuer à atténuer ces risques:

  1. Réduire la distance d'arrêt de perte pour augmenter le temps d'attente.
  2. Ajouter plus de critères d'entrée pour éviter les entrées fréquentes.
  3. Optimisez les paramètres pour trouver les combinaisons optimales.
  4. Ajoutez les conditions du filtre avec d'autres indicateurs.

Directions d'optimisation

Cette stratégie peut être améliorée de la manière suivante:

  1. Optimisation des paramètres par des tests plus systématiques.
  2. Ajoutez des filtres de signaux avec d'autres indicateurs, par exemple des moyennes mobiles.
  3. L'établissement ne doit pas être tenu pour responsable d'une éventuelle éventuelle éventuelle volatilité des prix.
  4. Différencier les tendances des marchés oscillants pour adapter les paramètres.
  5. Améliorer les règles de dimensionnement des positions, par exemple arrêter d'ouvrir de nouvelles positions après une perte importante.

Résumé

En résumé, la stratégie High Low Breaker Backtest est une stratégie simple et pratique de suivi des tendances. Elle génère des signaux de trading basés sur la rupture des prix périodiques des prix les plus élevés / les plus bas. La stratégie présente des avantages tels que la simplicité, le suivi des tendances et l'optimisation des paramètres, mais aussi des risques tels que le sur-trading et l'incapacité de gérer les marchés oscillants. Des optimisations supplémentaires peuvent être effectuées autour des paramètres, des filtres de signaux, de la taille des positions, etc. pour améliorer sa performance.


/*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)


Plus de