Stratégie de suivi de tendance basée sur la moyenne mobile et la super tendance

Auteur:ChaoZhang est là., Date: 2023-11-14 16:23:42
Les étiquettes:

img

Résumé

Cette stratégie combine des indicateurs de moyenne mobile et de super tendance pour suivre la tendance.

La logique de la stratégie

  1. Calculer la moyenne mobile pondérée MA. Utiliser le volume comme poids pour calculer le prix moyen pondéré sur une période.

  2. Calculer la moyenne mobile Hull sur la base de l'AM. La moyenne mobile Hull est plus sensible aux variations de prix.

  3. Calculer l'indicateur de super tendance. Super tendance combine ATR pour identifier les changements de tendance. Il calcule les bandes supérieure et inférieure.

  4. Quand les pauses sont au-dessus de la bande supérieure, allez longues.

  5. Tracer des indicateurs auxiliaires comme l'ouverture, la fermeture, le haut et le bas pour observer visuellement les mouvements de prix.

  6. Prendre des décisions commerciales basées sur des croisements d'indicateurs.

Analyse des avantages

  1. La stratégie combine à la fois la moyenne mobile et la super tendance, permettant une détection de tendance plus précise.

  2. Les moyennes mobiles de la coque sont plus sensibles aux variations de prix, ce qui facilite l'inversion rapide de la tendance.

  3. La super tendance ajuste dynamiquement les bandes supérieure et inférieure pour s'adapter à la volatilité du marché.

  4. Les indicateurs auxiliaires affichent visuellement les mouvements de prix pour faciliter la prise de décision avec des signaux d'indicateur.

  5. La stratégie permet l'optimisation des paramètres sur la période moyenne mobile, le multiplicateur de super tendance, etc.

Analyse des risques

  1. Les Whipsaws peuvent générer de faux signaux sur les marchés à plage, provoquant des transactions inutiles.

  2. Le suivi de plusieurs indicateurs peut rendre la mise en œuvre de la stratégie relativement complexe.

  3. Les paramètres doivent être correctement ajustés en fonction des caractéristiques des différents produits.

  4. Un stop loss strict est requis pour limiter les pertes sur les positions simples.

  5. La fréquence élevée des échanges nécessite un contrôle de l'impact des commissions.

Directions d'optimisation

  1. Testez différentes moyennes mobiles pour en trouver une plus sensible au marché.

  2. Testez différents multiplicateurs de tendance pour détecter les changements de tendance dans le temps.

  3. Incorporer un indice de volatilité pour réduire la taille de la position lorsque la volatilité augmente.

  4. Ajouter des conditions de rupture pour éviter de faux signaux pendant les périodes de portée.

  5. Optimiser la stratégie de stop loss pour la rendre plus adaptée aux conditions du marché.

Résumé

Cette stratégie juge la direction de la tendance en utilisant à la fois la moyenne mobile et la super tendance pour suivre la tendance. L'avantage est la vérification mutuelle entre les indicateurs pour une détection de tendance plus précise. Mais les faux signaux doivent être surveillés. La stratégie peut être améliorée grâce à l'optimisation des paramètres et au contrôle des risques.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Plus de