Stratégie de négociation de canaux de supertrend adaptative

Auteur:ChaoZhang est là., Date: 2023-09-20 15:17:51 La date est le 20 septembre 2023.
Les étiquettes:

Résumé

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.

La logique de la stratégie

  1. Calculer l'écart type et la volatilité des prix ATR, utiliser la volatilité pour ajuster la largeur du canal.

  2. Construire des canaux de super-tendance à double couche, avec une couche intérieure plus sensible et une couche extérieure plus stable.

  3. Générer des signaux d'achat/vente lorsque le prix franchit le canal interne ou externe.

  4. La double structure de canal aide à filtrer les fausses éruptions.

  5. La volatilité de l'ATR adapte la largeur du canal, plus large lorsque la volatilité augmente pour un effet adaptatif.

Les avantages

  1. Les canaux Supertrend sont simples et efficaces pour suivre les tendances.

  2. Le double canal filtre les fausses éruptions et améliore la qualité du signal.

  3. L'ajustement adapté à la volatilité permet aux canaux de s'adapter à différents environnements de marché.

  4. Facile à mettre en œuvre avec un réglage de paramètres simple.

  5. Les canaux visualisés et les ruptures forment des signaux de trading intuitifs.

Les risques

  1. Les signaux de rupture peuvent produire de faux signaux entraînant des pertes inutiles.

  2. Il ne détermine pas la direction de la tendance, les risques de contre-trend.

  3. L'ajustement adaptatif peut être trop sensible, avec des ajustements excessifs.

  4. Une mauvaise optimisation des paramètres conduit à un surajustement.

  5. En tant que tendance à suivre la stratégie, il a des difficultés sur les marchés de gamme.

Amélioration

  1. Paramètres d'essai effets sur l'effet d'adaptation.

  2. Incorporer MA pour déterminer les principales tendances.

  3. Optimisez la confirmation de l'évasion pour éviter les fausses évasions.

  4. Ajouter le stop loss à la perte limite par transaction.

  5. Évaluez la fréquence des échanges.

  6. Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.

Conclusion

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()





 


Plus de