Trading de tendance en temps réel basé sur les points pivots et la pente

ATR ADX MA
Date de création: 2024-04-26 15:34:28 Dernière modification: 2024-04-26 15:34:28
Copier: 2 Nombre de clics: 859
1
Suivre
1617
Abonnés

Trading de tendance en temps réel basé sur les points pivots et la pente

Aperçu

La stratégie utilise des points de repère (PivotHigh et PivotLow) pour identifier les hauts et les bas de la fluctuation des prix et tracer des lignes de tendance à la hausse et à la baisse à partir de ceux-ci. La pente de la ligne de tendance est calculée par des méthodes telles que l’ATR (Average True Range), l’écart-type ou la régression linéaire et est ajustée en multipliant par un facteur de pente.

Principe de stratégie

  1. Utilisez les fonctions ta.pivothigh () et ta.pivotlow () pour détecter les hauts et les bas des fluctuations (ph) et (pl) au cours d’une période donnée.
  2. La pente de la ligne de tendance est calculée en fonction de la méthode de calcul sélectionnée (ATR, écart-type ou régression linéaire) et ajustée en multipliant le facteur de pente (mult).
  3. Utilisez la pente et le prix de référence pour calculer la valeur actuelle des lignes de tendance haussière (upper) et de tendance baissière (lower).
  4. Déterminer si le prix de clôture actuel a franchi la ligne de tendance: si le prix de clôture est supérieur à la ligne de tendance haussière, un signal de rupture haussière est généré; si le prix de clôture est inférieur à la ligne de tendance baissière, un signal de rupture baissière est généré.
  5. Vous pouvez choisir de tracer une ligne de tendance sur le graphique et de la prolonger ou non.
  6. Les transactions sont effectuées en fonction du signal de rupture: la rupture vers le haut ouvre des ordres multiples, la rupture vers le bas ouvre des ordres vides.

Avantages stratégiques

  1. Cette stratégie génère des signaux de négociation basés sur des faits objectifs du comportement des prix (points de repère et lignes de tendance) et présente une certaine fiabilité et stabilité.
  2. L’inclinaison de la ligne de tendance peut être ajustée dynamiquement en fonction de la volatilité du marché, pour s’adapter à différentes conditions de marché.
  3. L’utilisateur peut choisir de manière flexible la méthode de calcul de l’inclinaison et la configuration des paramètres pour optimiser la performance de la stratégie.
  4. La stratégie offre deux modes de signaux en temps réel et de signaux retardés, qui peuvent répondre aux besoins de différents utilisateurs.
  5. La fonctionnalité d’alerte intégrée permet aux utilisateurs d’obtenir des opportunités de négociation en temps opportun.

Risque stratégique

  1. Cette stratégie peut générer de fréquents faux signaux, entraînant une baisse de la rentabilité, en cas de turbulence du marché ou d’ambiguïté de la tendance.
  2. La performance d’une stratégie dépend de la configuration des paramètres, et des paramètres inappropriés peuvent entraîner l’échec de la stratégie ou générer trop de transactions.
  3. En mode signal retardé, les résultats des transactions réelles peuvent différer des résultats des tests historiques en raison de la rétro-évaluation.

Orientation de l’optimisation de la stratégie

  1. L’introduction de plus d’indicateurs techniques ou de caractéristiques de comportement des prix, tels que le volume des transactions, la volatilité, etc., pour aider à la reconnaissance des signaux de rupture de la ligne de tendance et améliorer la qualité du signal.
  2. Les signaux de négociation sont filtrés, en tenant compte de facteurs tels que la durée de la rupture de la ligne de tendance, l’intensité de la rupture, etc., afin de réduire les faux signaux.
  3. Optimiser la gestion des positions et le contrôle des risques, par exemple en ajustant la taille des positions en fonction de la force des tendances du marché ou de la dynamique de la volatilité, en définissant des positions raisonnables de stop loss et de stop-loss.
  4. Optimiser les paramètres, par exemple en utilisant l’apprentissage automatique ou des algorithmes d’optimisation, pour trouver la meilleure combinaison de paramètres.

Résumer

La stratégie utilise les points de repère et la pente de la ligne de tendance pour construire un système de négociation en ligne de tendance en temps réel. En capturant les événements de rupture de la ligne de tendance, la stratégie peut être négociée au stade précoce de la formation de la tendance. Bien que la stratégie présente certains avantages, il faut néanmoins être attentif à ses risques dans les marchés turbulents et améliorer encore la stabilité et la rentabilité de la stratégie en introduisant plus d’informations, en optimisant le filtrage des signaux et la gestion des positions.

Code source de la stratégie
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')

//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

//Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src,length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl  = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl  = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)

// if ph and showExt
//     uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))

// if pl and showExt
//     dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))

//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}