Stratégie de négociation à long terme basée sur la SuperTrend

Auteur:ChaoZhang est là., Date: 2023-09-20 17:14:33 Je suis désolé
Les étiquettes:

Résumé

Cette stratégie identifie les opportunités longues à l'aide de l'indicateur SuperTrend. Elle utilise l'ATR et un multiplicateur pour déterminer les niveaux de support dynamique pour l'entrée longue.

La logique de la stratégie

  1. Les bandes supérieures et inférieures sont calculées sur la base de la période ATR, multiplicateur.

  2. La tendance actuelle est suivie, avec 1 pour la tendance haussière et -1 pour la tendance baissière.

  3. Une moyenne mobile est ajoutée comme filtre de tendance. Achetez uniquement si le prix est supérieur à MA lorsqu'il dépasse la bande supérieure. Vendez uniquement si le prix est inférieur à MA lorsqu'il dépasse la bande inférieure. Cela évite les fausses ruptures.

  4. Les assistants visuels mettent en évidence les tendances, les signaux, etc. pour aider à la prise de décision.

Analyse des avantages

Les avantages de cette stratégie:

  1. SuperTrend suit dynamiquement les changements de prix et reflète les changements de tendance en temps opportun.

  2. L'ATR arrête les pertes en ajustant les arrêts en fonction de la volatilité du marché, aidant à verrouiller les bénéfices.

  3. Le filtre MA élimine les faux signaux du bruit sur les marchés variés.

  4. La conception visuelle présente intuitivement la mécanique de la stratégie et la situation du marché.

  5. Seules les inversions de tendance de négociation le rendent adapté à la détention à long terme.

Analyse des risques

Les principaux risques sont les suivants:

  1. SuperTrend est sensible aux paramètres.

  2. Dans les marchés instables, les arrêts peuvent être déclenchés fréquemment.

  3. Aucune prise en compte des coûts de négociation.

  4. Aucun stop loss signifie un risque élevé de retrait.

  5. Le filtre de tendance peut manquer certaines opportunités.

Les risques peuvent être réduits par:

  1. Optimisation des paramètres ATR pour une fréquence de réglage de bande inférieure.

  2. Ajout d'un filtre à barres équivalent pour éviter les arrêts par des oscillations mineures à haute fréquence.

  3. Mettre en œuvre un stop loss et un profit pour protéger les bénéfices.

  4. La période de réglage de la moyenne mobile à l'effet de filtrage de l'équilibre.

  5. Optimiser la gestion de l'argent pour réduire les effets des coûts commerciaux.

Directions d'optimisation

La stratégie peut être améliorée dans les aspects suivants:

  1. Testez différentes sources de prix comme près, haut, etc.

  2. Essayez d'autres indicateurs de stop-loss dynamiques comme Chandelier Exit.

  3. Ajoutez la taille des positions pour optimiser l'utilisation du capital.

  4. Incorporer des indicateurs de volatilité pour affiner les données.

  5. Mettez en œuvre un stop loss et des bénéfices pour contrôler les risques.

  6. Ajustez les paramètres pour différents marchés.

  7. Explorez l'apprentissage automatique pour optimiser les paramètres.

  8. Combiner d'autres indicateurs pour améliorer la précision du filtre.

Conclusion

Cette stratégie utilise SuperTrend avec des arrêts dynamiques pour déterminer les tendances et ajoute un filtre MA pour identifier les entrées longues.


/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

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=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring 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

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

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 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 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 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())

shortCondition = sellSignal
if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short, when = window())

buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)


Plus de