Stratégie de rupture de l'élan

Auteur:ChaoZhang est là., Date: le 17 janvier 2024
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de suivi de tendance qui utilise l'indicateur de dynamique des prix. Elle juge la tendance du marché en calculant la variation du prix de clôture sur une certaine période et fait des entrées longues ou courtes correspondantes lorsqu'il y a une tendance persistante à la hausse ou à la baisse des prix.

La logique de la stratégie

L'indicateur de base de cette stratégie est la dynamique des prix.

momentum = close - close[n] 

où n représente la durée de la période d'élan. Lorsque l'élan > 0, cela signifie que le prix a augmenté au cours de la période en cours. Lorsque l'élan < 0, cela signifie que le prix a diminué au cours de la période en cours.

La stratégie définit d'abord un paramètre confirmBars, qui représente le nombre de bougies nécessaires au jugement de tendance avant l'exécution des transactions. Dans la plage de backtest, si le momentum > 0 persiste pour les bougies confirmBars, une entrée longue est faite. Si le momentum < 0 persiste pour les bougies confirmBars, une entrée courte est faite.

La clé du jugement de tendance de la stratégie réside dans le comptage du nombre de bougies consécutives où le momentum est supérieur ou inférieur à 0, ce qui est réalisé par le biais des variables bcount et discount. Elles sont augmentées de 1 lorsque la condition correspondante est remplie et réinitialisées à 0 lorsque la condition n'est pas remplie. Lorsque le comptage atteint confirmBars, le commerce long ou court correspondant est exécuté.

Les avantages de la stratégie

Il s'agit d'une tendance relativement simple qui suit une stratégie présentant les avantages suivants:

  1. Une logique simple, facile à comprendre et à mettre en œuvre
  2. L'indicateur de dynamique est sensible aux variations de prix et peut rapidement détecter les tendances
  3. Paramètres personnalisables pour ajuster la sensibilité du jugement
  4. Peut être utilisé dans divers environnements de marché

Risques stratégiques

La stratégie comporte également certains risques:

  1. Prédisposé à de multiples transactions oscillantes et à des surtrades
  2. Une configuration raisonnable des paramètres est nécessaire, en particulier confirmBars pour filtrer les oscillations
  3. Ne peut pas faire face efficacement à l'impact d'événements soudains sur le marché
  4. Différences entre le backtest et la négociation en direct, optimisation des données et des paramètres nécessaires

Optimisation de la stratégie

La stratégie peut être optimisée sous plusieurs aspects:

  1. Ajouter une logique de stop loss au contrôle par risque de transaction
  2. Ajouter des filtres de rupture pour éviter les faux signaux des fluctuations de prix
  3. Ajustez les paramètres confirmBars, etc. en fonction des différents produits et des environnements du marché
  4. Inclure d'autres indicateurs pour confirmer les entrées
  5. Utiliser des méthodes d'apprentissage automatique pour adapter les paramètres et les filtres

Résumé

En résumé, cette stratégie de rupture de dynamique est une stratégie de suivi de tendance simple et pratique adaptée comme stratégie de trading quantitatif d'introduction.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)

confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")

price = close
momentum = close - close[momentumLength]

// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)

startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)

inBacktestRange = true

// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
    strategy.entry("Buy", strategy.long, comment="Long")

scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
    strategy.entry("Sell", strategy.short, comment="Short")

// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)


Plus de