Cette stratégie est basée sur l'indicateur Super Trend et l'indicateur de canal de prix, combiné avec des signaux de moyenne mobile pour le trading.
Calculez l'indicateur de Super Trend. Les rails supérieur et inférieur sont le prix actuel plus/moins N fois l'indicateur ATR respectivement. Lorsque le prix est supérieur au rails supérieur, il est haussier. Lorsque le prix est inférieur au rails inférieur, il est baissier.
Calculer l'indicateur de canal de prix. La ligne de canal de prix est M fois l'écart type de N jours du prix. Les prix supérieurs/inférieurs à la ligne de canal sont considérés comme des états anormaux.
Prenez les lignes moyennes de prix d'ouverture, de prix de clôture et de Super Trend respectivement.
Générer des signaux de trading:
Signal d'achat: le prix de clôture dépasse la ligne Super Trend et est supérieur à la moyenne mobile du prix d'ouverture.
Signal de vente: le prix de clôture traverse la ligne Super Trend et est inférieur à la moyenne mobile du prix ouvert.
Mettez un stop-loss et prenez le profit du canal de prix.
La combinaison de plusieurs indicateurs permet d'éviter les faux signaux.
L'utilisation du canal de prix pour juger des états de prix anormaux peut filtrer certains points d'entrée indésirables.
Les moyennes mobiles combinées à l'évaluation de la direction de la tendance évitent de négocier contre la tendance.
La mise en place d'un stop-loss et d'une fourchette de bénéfices contrôle le risque.
Les paramètres sont trop subjectifs et doivent être optimisés.
L'intervalle de stop loss et de profit peut être trop large ou trop étroit.
Les paramètres des canaux de prix peuvent ne pas convenir à tous les produits, des essais distincts sont nécessaires.
Des pertes importantes peuvent survenir lors de changements de tendance drastiques.
Tester et optimiser les paramètres pour trouver des combinaisons optimales.
Testez les moyennes mobiles avec des périodes différentes pour sélectionner les paramètres optimaux.
Tests antérieurs sur plusieurs produits et sélection de paramètres en fonction des performances respectives.
Optimiser la stratégie de stop loss pour éviter une perte unique excessivement importante.
Cette stratégie combine plusieurs indicateurs pour juger des anomalies de prix et des directions de tendance, ce qui peut théoriquement filtrer certains faux signaux. Cependant, les paramètres sont encore relativement subjectifs avec une marge d'optimisation. En outre, les coûts de trading tels que les commissions et le glissement doivent être considérés dans le trading réel.
/*backtest start: 2023-12-10 00:00:00 end: 2023-12-11 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Vol ST VM", overlay=true) source = close 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", color=color.green, style=shape.arrowup, location=location.belowbar, size=size.normal, textcolor=color.white, transp=0) //plot for buy icon plotshape(sell, title="sell", color=color.red, style=shape.arrowdown, location=location.abovebar, size=size.normal, textcolor=color.white, transp=0) //plot for sell icon // multiplier = input(title="TP", type=input.float, defval=2, minval=1) src5 = close 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(close, 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 strategy.entry(id="Enter Long MA", long=true, comment="Buy", when=high1) strategy.entry(id="Short Entry MA", long=false, comment="Sell", when=low1) /////// Alerts ///// alertcondition(buy,title="buy") alertcondition(sell,title="sell") alertcondition(low1,title="sell tp") alertcondition(high1,title="buy tp")