Stratégie de négociation de rupture avec évolutivité

Auteur:ChaoZhang est là., Date: 2023-10-30 17h25 et 17h
Les étiquettes:

img

Résumé

La stratégie de trading de rupture évolutive génère des signaux de trading lorsque le prix franchit les niveaux de support et de résistance clés identifiés par les fluctuations de prix.

Comment fonctionne- t- il?

La stratégie utilise tout d'abordswings()La fonction pour calculer les hauts et les bas bas bas bas basés sur la période de rétrospective.swingLookbackLes signaux longs sont déclenchés lorsque le prix dépasse le sommet de l'oscillation, et les signaux courts sont déclenchés lorsque le prix dépasse le bas de l'oscillation.

Plus précisément, un signal long est déclenché lorsque le prix de clôture est supérieur ou égal au prix élevé de l'oscillation.

La stratégie fixe également un objectif d'arrêt basé sur lesstopTargetPercentPar exemple, le stop loss long peut être réglé à 5% sous le swing high, et le stop loss short à 5% au-dessus du swing low.

L'avantage de cette stratégie est la flexibilité d'ajuster la période de réflexion pour contrôler la fréquence des transactions. Une période de réflexion plus courte la rend plus sensible aux ruptures et augmente la fréquence des transactions. Une période de réflexion plus longue diminue la sensibilité et la fréquence des transactions, mais peut manquer des opportunités.

Les avantages

  • Logique de rupture simple, facile à comprendre et à mettre en œuvre
  • La période de révision permet d'optimiser les paramètres et de contrôler la fréquence des transactions
  • Intégre facilement le stop loss, le trailing stop et d'autres systèmes de gestion des risques
  • Très extensible pour ajouter des filtres et améliorer la rentabilité
  • Applicable à tout délai pour la négociation intradienne ou swing

Risques et atténuations

  • Une période de révision trop courte peut entraîner une survente
  • Une période de réflexion trop longue risque de manquer des opportunités commerciales
  • Un stop-loss trop large réduit le potentiel de profit
  • L'arrêt de perte trop serré peut être arrêté fréquemment

Les mesures d'atténuation

  • Testez différentes périodes de rétrospective pour trouver les paramètres optimaux
  • Optimiser le niveau de stop-loss pour équilibrer les bénéfices par rapport au contrôle des risques
  • Ajoutez un arrêt de trail ou une sortie de lustre pour verrouiller les bénéfices
  • Ajouter des filtres pour améliorer la qualité des signaux de trading
  • Optimiser les paramètres par le backtesting

Des possibilités d'amélioration

La stratégie peut être améliorée de plusieurs façons:

  1. Testez différentes valeurs de période de rétrospective pour trouver les paramètres optimaux.

  2. Testez différents délais tels que 5m, 15m, 1h pour déterminer le meilleur délai.

  3. Optimiser le pourcentage de stop loss pour équilibrer le potentiel de profit par rapport à la gestion des risques.

  4. Ajoutez des filtres comme le volume, la volatilité pour réduire les configurations inférieures.

  5. Intégrer plus de mécanismes de gestion des risques comme le trailing stop, la prise de profit.

  6. Optimisation des paramètres par l'analyse de marche avant et l'apprentissage automatique.

  7. Introduire l'IA/apprentissage automatique pour l'optimisation automatique des paramètres.

Conclusion

La stratégie de trading de rupture évolutive est un système de rupture robuste et personnalisable. Il est simple à utiliser et très adaptable en ajustant le lookback et en ajoutant des filtres. Il peut facilement intégrer la gestion des risques pour le contrôle des risques.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")

Plus de