Stratégie de suivi des tendances basée sur des bandes pivot dynamiques

Auteur:ChaoZhang est là., Date: le 26-12-2023 à 11h57
Les étiquettes:

img

Résumé

Cette stratégie calcule les prix les plus élevés et les plus bas récents sur une certaine période, combinés avec le prix actuel, pour former une ligne moyenne dynamique. Le canal à la baisse rouge et le canal à la hausse vert sont ensuite générés en fonction de la volatilité récente. Les trois lignes de canal forment une plage négociable. Lorsque le prix approche les limites du canal, des opérations inversées sont effectuées pour cibler les profits vers la ligne moyenne. Pendant ce temps, il y a un calcul de tendance à l'intérieur de la stratégie pour filtrer les transactions contre la tendance et éviter d'être détruites par la tendance majeure.

La logique de la stratégie

  1. Calculer la ligne moyenne dynamique avec le prix le plus élevé, le prix le plus bas et le prix de clôture actuel
  2. Générer des bandes dynamiques basées sur l'ATR et le multiplicateur, les changements de largeur avec la volatilité du marché
  3. Allez long quand le prix rebondit de la bande inférieure, allez court quand rebondit de la bande supérieure
  4. Avoir logique de prise de profit et de stop-loss ciblant la ligne médiane
  5. Pendant ce temps, calculer l'indice de tendance pour filtrer les transactions contre la tendance

Analyse des avantages

  1. Les bandes dynamiques s'adaptent à la volatilité du marché en temps réel
  2. Probabilité élevée de négociation selon la tendance
  3. Contrôle des pertes par arrêt de perte unique

Analyse des risques

  1. Une mauvaise optimisation des paramètres peut entraîner une survente
  2. Incapacité d'éliminer complètement les transactions contraires à la tendance dans le cadre des principales tendances
  3. Une fuite unilatérale peut continuer à fonctionner.

Direction de l'optimisation

  1. Ajustez les paramètres des bandes pour qu'ils s'adaptent aux différents produits
  2. Paramètres de l'indice de tendance afin d'améliorer la probabilité de négociation de tendance
  3. Introduire des éléments d'apprentissage automatique pour l'optimisation de paramètres dynamiques

Résumé

Cette stratégie repose principalement sur l'oscillation du marché pour réaliser des bénéfices. En capturant dynamiquement les points d'inversion des prix avec les bandes, combiné au filtrage de tendance, il peut effectivement tirer profit de l'inversion moyenne tout en contrôlant les risques. La clé réside dans l'ajustement des paramètres pour rendre les bandes réactives mais pas trop sensibles. L'indice de tendance a également besoin de périodes appropriées pour jouer son rôle.


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

//@version=4
strategy(title="Strategy - Bobo PAPATR", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000)

// === STRATEGY RELATED INPUTS AND LOGIC ===
len = input(24, minval=1, title="Pivot Length, defines lookback for highs and lows to make pivots")
length = input(title="ATR lookback (Lower = bands more responsive to recent price action)", type=input.integer, defval=22)
myatr = atr(length)
dailyatr = myatr[1]
atrmult = input(title="ATR multiplier (Lower = wider bands)", type=input.float, defval=3)
pivot0 = (high[1] + low[1]  + close[1]) / 3

// PIVOT CALC
h = highest(len)
h1 = dev(h, len) ? na : h
hpivot = fixnan(h1)
l = lowest(len)
l1 = dev(l, len) ? na : l
lpivot = fixnan(l1)
pivot = (lpivot + hpivot + pivot0) / 3
upperband1 = (dailyatr * atrmult) + pivot
lowerband1 = pivot - (dailyatr * atrmult)
middleband = pivot

// == TREND CALC ===
i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually
i2=input(20, "Slow Period", minval=1)
i3=input(5, "Fast Period", minval=1)
i4=input(3, "Smoothing Period", minval=1)
i5=input(4, "Signal Period", minval=1)
i6=input(50, "Extreme Value", minval=1)
hiDif = high - high[1]
loDif = low[1] - low
uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0
dDM =  loDif > hiDif and loDif > 0 ? loDif : 0
ATR = rma(tr(true), i1)
DIu = 100 * rma(uDM, i1) / ATR
DId = 100 * rma(dDM, i1) / ATR
HLM2 =  DIu - DId
DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) /  ema(ema(ema(abs(HLM2), i2), i3), i4)
signal = ema(DTI, i5)


// === RISK MANAGEMENT INPUTS ===
inpTakeProfit   = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3])
exitLong = (high > middleband)
strategy.entry(id = "Long", long = true, when = enterLong) 
strategy.close(id = "Long", when = exitLong)

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3])
exitShort = (low < middleband)
strategy.entry(id = "Short", long = false, when = enterShort)
strategy.close(id = "Short", when = exitShort)

// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss)

// === CHART OVERLAY ===
plot(upperband1, color=#C10C00, linewidth=3)
plot(lowerband1, color=#23E019, linewidth=3)
plot(middleband, color=#00E2E2, linewidth=3)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Plus de