Stratégie de trading évolutive Breakout


Date de création: 2023-10-30 17:25:17 Dernière modification: 2023-10-30 17:25:17
Copier: 0 Nombre de clics: 630
1
Suivre
1617
Abonnés

Stratégie de trading évolutive Breakout

Aperçu

La stratégie de rupture extensible est une stratégie de rupture très flexible et extensible, qui permet d’adapter les paramètres à différentes périodes de temps, d’intégrer facilement une variété de conditions de filtrage supplémentaires et de mécanismes de gestion des risques, afin d’optimiser pour des actifs spécifiques.

Principe de stratégie

La stratégie a commencé par utiliserswings()La fonction calcule les hauts et les bas des fluctuations des prix actuels en fonction de la période de révision.swingLookbackParamétrage, 20 lignes K par défaut. Ensuite, lorsque le prix atteint un sommet de fluctuation, faites plus; lorsque le prix atteint un bas de fluctuation, faites moins.

La logique spécifique d’un signal plus est de faire plus lorsque le prix de clôture est supérieur ou égal à la hausse de la fluctuation. La logique spécifique d’un signal plus est de faire plus lorsque le prix de clôture est inférieur ou égal à la baisse de la fluctuation.

La stratégie prévoit également un stop-loss pour les actions de la banque.stopTargetPercentParamètres pour définir l’amplitude de stop-loss. Par exemple, le stop-loss plus est défini comme étant inférieur à 5% du prix le plus élevé et le stop-loss plus est défini comme étant supérieur à 5% du prix le plus bas.

L’avantage de cette stratégie est qu’elle permet de contrôler la fréquence des transactions en ajustant la période de reprise. Plus la période de reprise est courte, plus la fréquence des transactions est élevée.

Avantages stratégiques

  • Des idées simples, des réalisations faciles à comprendre
  • La fréquence des transactions peut être contrôlée en réglant les paramètres d’optimisation de la période de rétroaction
  • Des mécanismes de gestion des risques tels que l’arrêt des pertes et l’arrêt mobile peuvent être facilement intégrés
  • Évolutivité, ajout de conditions de filtrage pour augmenter le taux de rendement
  • Applicable à n’importe quel cycle de temps, adapté aux transactions intra-journées et longues lignes

Risques et contre-mesures

  • Une période de révision trop courte peut entraîner une survente des transactions
  • Une période de rétrospective trop longue peut vous faire rater des opportunités commerciales
  • Le stop loss trop large peut réduire l’espace de profit
  • Un arrêt trop serré peut entraîner un arrêt fréquent

La réponse:

  • Tester différentes périodes de revue pour trouver la meilleure combinaison de paramètres
  • Optimiser le stop loss et équilibrer la marge bénéficiaire et le contrôle des risques
  • Un stop mobile ou un stop circulaire peut être ajouté pour verrouiller les bénéfices
  • Augmentation des conditions de filtrage pour améliorer la probabilité de transactions rentables

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Test de différents paramètres de périodes de révision pour trouver la combinaison optimale de paramètres;

  2. tester différents cycles de négociation, tels que 5 minutes, 15 minutes, 1 heure, etc., pour choisir le meilleur cycle;

  3. Optimiser le stop loss et équilibrer la marge bénéficiaire et le contrôle des risques;

  4. l’ajout de conditions de filtrage, telles que le filtrage du volume des transactions, le filtrage des baisses et des hausses, afin de réduire les signaux de mauvaise qualité;

  5. L’intégration de mécanismes de gestion des risques tels que le stop-loss mobile et le blocage des bénéfices;

  6. L’optimisation par paramètres, l’optimisation par étapes, la recherche aléatoire, etc. pour trouver les paramètres optimaux;

  7. Intégrer l’apprentissage automatique pour optimiser automatiquement les paramètres à l’aide de l’IA.

Résumer

La stratégie de rupture extensible est un système de rupture très pratique. Elle est simple, facile à utiliser, personnalisable et peut être optimisée pour différents actifs en ajustant la période de rétroaction et en intégrant diverses conditions de filtrage. En même temps, elle peut être facilement intégrée dans divers mécanismes de gestion des risques pour contrôler le risque de négociation.

Code source de la stratégie
/*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")