Cette stratégie construit des canaux de super tendance à double couche et génère des signaux de trading lorsque le prix traverse les canaux. Elle adapte également la largeur du canal en utilisant la volatilité des prix pour un effet adaptatif.
Calculer l'écart type et la volatilité des prix ATR, utiliser la volatilité pour ajuster la largeur du canal.
Construire des canaux de super-tendance à double couche, avec une couche intérieure plus sensible et une couche extérieure plus stable.
Générer des signaux d'achat/vente lorsque le prix franchit le canal interne ou externe.
La double structure de canal aide à filtrer les fausses éruptions.
La volatilité de l'ATR adapte la largeur du canal, plus large lorsque la volatilité augmente pour un effet adaptatif.
Les canaux Supertrend sont simples et efficaces pour suivre les tendances.
Le double canal filtre les fausses éruptions et améliore la qualité du signal.
L'ajustement adapté à la volatilité permet aux canaux de s'adapter à différents environnements de marché.
Facile à mettre en œuvre avec un réglage de paramètres simple.
Les canaux visualisés et les ruptures forment des signaux de trading intuitifs.
Les signaux de rupture peuvent produire de faux signaux entraînant des pertes inutiles.
Il ne détermine pas la direction de la tendance, les risques de contre-trend.
L'ajustement adaptatif peut être trop sensible, avec des ajustements excessifs.
Une mauvaise optimisation des paramètres conduit à un surajustement.
En tant que tendance à suivre la stratégie, il a des difficultés sur les marchés de gamme.
Paramètres d'essai
Incorporer MA pour déterminer les principales tendances.
Optimisez la confirmation de l'évasion pour éviter les fausses évasions.
Ajouter le stop loss à la perte limite par transaction.
Évaluez la fréquence des échanges.
Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.
Cette stratégie utilise des canaux de double supertrend adaptatifs pour capturer les tendances des prix. Elle est simple et intuitive dans le suivi des tendances. Mais les risques incluent de fausses ruptures et une direction de tendance incorrecte.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // 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 = 2019, 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 = 2020, 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 //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()