Stratégie de super tendance bidirectionnelle


Date de création: 2023-10-08 15:02:45 Dernière modification: 2023-10-08 15:02:45
Copier: 0 Nombre de clics: 676
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie détermine la direction de la tendance actuelle en fonction des hauts et des bas calculés par l’indicateur ATR et donne des signaux d’achat et de vente.

Principe de stratégie

  1. Calculer l’indicateur ATR, qui représente la fourchette moyenne des fluctuations des prix
  2. Ligne de montée et de descente calculée par un multiple de la valeur ATR
  3. Déterminer la relation entre les prix et les tendances et déterminer la direction de la tendance
    • La tendance à la hausse lorsque les prix sont en hausse
    • Quand le prix est en dessous de la trajectoire de basculement, la tendance est à la baisse
  4. Donner des signaux d’achat et de vente lorsque la tendance change
    • Lorsque la tendance baissière se transforme en tendance haussière, un signal d’achat est donné près de la ligne supérieure
    • Lorsque la tendance haussière se transforme en tendance baissière, un signal de vente est donné à proximité de la trajectoire descendante
  5. Affichage visuel des hauts et des bas, des tendances et des signaux d’achat et de vente

Analyse des avantages

  • L’utilisation de l’indicateur ATR pour déterminer les tendances permet de définir les paramètres appropriés en fonction de l’amplitude des fluctuations du marché, ce qui rend les lignes ascendantes et descendantes plus adaptées aux tendances du marché
  • Le changement de tendance peut être détecté en cas de revers de tendance.
  • Filtrez les signaux en fonction de la tendance et évitez les fausses avancées sur le marché
  • Les signaux d’achat et de vente sont affichés de manière visuelle, à première vue.

Analyse des risques

  • Les paramètres ATR sont trop grands ou trop petits, ce qui déconnecte la ligne supérieure et la ligne inférieure du prix et empêche de suivre efficacement la tendance.
  • Si le multiplicateur est trop grand, il y a plus de faux signaux; si le multiplicateur est trop petit, il y a plus de retard.
  • Le timing de l’inversion est imprécis et peut entraîner des pertes.
  • Les signaux de stratégie de filtrage doivent être combinés avec d’autres indicateurs pour réduire le risque d’arbitrage

Direction d’optimisation

  • On peut envisager d’optimiser dynamiquement les paramètres ATR cycliques pour que les hauts et les bas soient plus adaptés aux fluctuations du marché
  • Des stratégies d’ajustement des paramètres pour différentes variétés et différentes périodes peuvent être étudiées
  • Les tendances peuvent être déterminées en combinaison avec d’autres indicateurs, tels que l’augmentation de la confirmation des prix
  • Les paramètres peuvent être optimisés par l’apprentissage automatique

Résumer

Cette stratégie implique une approche globale de la détection d’une tendance bidirectionnelle basée sur l’indicateur ATR. Elle permet de détecter des signaux d’achat et de vente en cas de rupture de la trajectoire ascendante et descendante, puis de filtrer la direction de la tendance pour éviter d’être perturbée par de faux signaux. La stratégie peut être adaptée à différents environnements de marché grâce à des ajustements paramétriques.

Code source de la stratégie
/*backtest
start: 2022-10-01 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

TradeId = "RVG"

InitCapital = 1000
InitPosition = 1000
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true

//@version=4
// strategy("Supertrend RG", overlay = true,process_orders_on_close=true,commission_type=strategy.commission.percent,commission_value=InitCommission,
//  currency=currency.USD,initial_capital=InitCapital,default_qty_type=strategy.cash, default_qty_value=InitPosition, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick,pyramiding=InitPyramidMax)

//
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2018, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2100, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


strategy.entry(TradeId + " Long", true, when=buySignal[1] and time_cond)
strategy.entry(TradeId + " Short", false, when=sellSignal[1] and time_cond)