Stratégie Super Trend V

Auteur:ChaoZhang est là., Date: le 18 octobre 2023 à 12h35:53
Les étiquettes:

img

Résumé

La stratégie Super Trend V est une stratégie de trading à court terme basée sur les moyennes mobiles et les écarts standards. Elle utilise l'indicateur Super Trend pour déterminer la direction de la tendance des prix et combine le support et la résistance formés par les moyennes mobiles pour entrer sur le marché.

La logique de la stratégie

Premièrement, cette stratégie calcule l'indicateur Super Trend. L'indicateur Super Trend utilise la relation entre l'ATR et le prix pour déterminer la direction de la tendance. Lorsque le prix est au-dessus de la tendance à la hausse, il est haussier. Lorsque le prix est en dessous de la tendance à la baisse, il est baissier.

Ensuite, il calcule l'EMA du prix et l'EMA du prix d'ouverture. Lorsque le prix dépasse l'EMA et est supérieur à l'EMA du prix d'ouverture, c'est un signal d'achat. Lorsque le prix dépasse l'EMA et est inférieur à l'EMA du prix d'ouverture, c'est un signal de vente.

Ensuite, il utilise l'écart type pour calculer les bandes supérieures et inférieures du canal de prix et effectue un traitement de lissage.

Enfin, il combine des moyennes mobiles de différentes périodes pour déterminer la direction de la tendance, ainsi que l'indicateur Super Trend, pour former un jugement de tendance stable.

Les avantages de la stratégie

  • Utiliser l'indicateur Super Trend pour déterminer la direction de la tendance des prix, en évitant les pertes causées par un renversement de tendance
  • Les moyennes mobiles combinées au prix ouvert aident à déterminer le moment de l'entrée, évitant de fausses ventilations
  • Le canal d'écart type prédit les zones de support et de résistance potentielles du prix pour le stop loss et le take profit
  • La combinaison de plusieurs délais améliore la stabilité du jugement des tendances

Risques liés à la stratégie

  • L'indicateur Super Trend a un effet de retard, peut manquer les points de changement de tendance
  • Les croisements des moyennes mobiles ont un effet de retard, le calendrier d'entrée peut ne pas être précis
  • La fourchette du canal d'écart type est trop fixe pour refléter les fluctuations du marché en temps réel
  • Les jugements fondés sur plusieurs délais peuvent entrer en conflit les uns avec les autres

Gestion des risques:

  • Réduire correctement les paramètres de Super Trend pour améliorer la sensibilité
  • Optimiser les périodes de moyenne mobile ou ajouter d'autres indicateurs pour déterminer l'entrée
  • Ajustez dynamiquement le canal d'écart type pour qu'il corresponde au marché
  • Définir une logique claire pour les jugements multi-temps pour gérer les conflits

Directions d'optimisation

  • Optimisez les paramètres de Super Trend pour trouver la meilleure combinaison
  • Essayez d'autres indicateurs combinés avec des moyennes mobiles pour déterminer l'entrée
  • Essayez le réglage dynamique du canal d'écart type
  • Testez différentes combinaisons de plusieurs délais pour trouver la meilleure correspondance
  • Optimiser les stratégies de stop loss et de prise de profit pour améliorer l'espace de profit

Conclusion

La stratégie Super Trend V intègre les avantages de la tendance, de la moyenne mobile, du canal d'écart type et d'autres indicateurs pour obtenir un jugement de tendance stable, un calendrier d'entrée approprié et un stop loss et un profit basé sur les zones de prix.


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

// © theCrypster 2020

//@version=4
strategy(title = "Super trend V Strategy version", overlay = true, pyramiding=1,initial_capital = 1000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol = (volume / hilow)
spreadvol = (openclose * vol)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

v =  spreadvol + cum(spreadvol)
smooth = sma(v, v_len)
v_spread = stdev(v - smooth, window_len)
shadow = (v - smooth) / v_spread * price_spread

out = shadow > 0 ? high + shadow : low + shadow
//
src = out
src1=open
src2=low
src3=high
tf =input(720)
len = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   tf / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

c = ema(src, len)
plot(c,color=color.red)
o = ema(src1,len)
plot(o,color=color.blue)
//h = ema(src3,len)
//l=ema(src2,len)
//
col=c > o? color.lime : color.orange
vis = true
vl = c
ll = o
m1 = plot(vl, color=col, linewidth=1, transp=60)
m2 = plot(vis ? ll : na,  color=col, linewidth=2, transp=80)

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

vpt=ema(out,len)

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

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < 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=crossover( close, st_line) and close>o
sell=crossunder(close, st_line) and close<o
//plotshape(crossover( close, st_line), location = location.belowbar, color = color.green,size=size.tiny)
//plotshape(crossunder(close, st_line), location = location.abovebar, color = color.red,size=size.tiny)
plotshape(buy, title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon


//
multiplier = input(title="TP VWAP Deviation", type=input.float, defval=2, minval=1)
src5 = vwap
len5 = input(title="TP length", defval=150, minval=1)
offset = 0

calcSlope(src5, len5) =>
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 1 to len5
        val = src5[len5-i]
        per = i + 1.0
        sumX := sumX + per
        sumY := sumY + val
        sumXSqr := sumXSqr + per * per
        sumXY := sumXY + val * per
        
        
    slope = (len5 * sumXY - sumX * sumY) / (len5 * sumXSqr - sumX * sumX)
    average = sumY / len5
    intercept = average - slope * sumX / len5 + slope
    [slope, average, intercept]

var float tmp = na
[s, a, i] = calcSlope(src5, len5)

vwap1=(i + s * (len5 - offset))
sdev = stdev(vwap, len5)
dev = multiplier * sdev
top=vwap1+dev
bott=vwap1-dev

//
z1 = vwap1 + dev
x1 = vwap1 - dev

low1 = crossover(close, x1)  
high1 = crossunder(close, z1) 

plotshape(low1, title="low", text="TP", color=color.red, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(high1, title="high", text="TP", color=color.green, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon



//
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

l = buy
s1 = sell
        
if l and testPeriod()
    strategy.entry("buy", strategy.long)
if s1 and testPeriod()
    strategy.entry("sell", strategy.short)



Plus de