Cette stratégie génère des signaux de trading basés sur le croisement des moyennes mobiles de 21 et 55 jours, et utilise l'indicateur de supertrend pour filtrer les faux signaux.
Le code définit d'abord l'EMA de 21 jours (EMA1) et l'EMA de 55 jours (EMA2). Un signal d'achat est généré lorsque l'EMA1 traverse au-dessus de l'EMA2.
Pour filtrer les faux signaux, l'indicateur de supertrend est ajouté. Le supertrend calcule la direction de la tendance en fonction de l'ATR et des prix hauts-bas récents. Dans le code, au-dessus de la ligne de supertrend est la tendance haussière et en dessous est la tendance baissière.
Ainsi, un signal d'achat n'est généré que lorsque l'EMA1 traverse au-dessus de l'EMA2 pendant une tendance haussière. Un signal de vente n'est généré que lorsque l'EMA1 traverse au-dessous de l'EMA2 pendant une tendance baissière. Le supertrend filtre les faux signaux pendant les transitions de tendance.
En outre, les moyennes mobiles de 200 et 233 jours sont ajoutées pour déterminer la tendance à long terme.
Les moyennes mobiles doubles combinées à une super tendance peuvent identifier efficacement les tendances et filtrer les faux signaux.
Des paramètres de moyenne mobile réglables permettent d'adapter la stratégie aux différentes conditions du marché.
Les moyennes mobiles à long terme évitent les risques liés à des tendances contradictoires.
Des règles claires et faciles pour le trading algorithmique.
Les signaux d'achat/vente visuels rendent les décisions commerciales claires.
Les moyennes mobiles peuvent générer de faux signaux autour des virages.
Les paramètres doivent être ajustés pour les différents marchés.
Une fréquence de négociation élevée entraîne des coûts de transaction plus élevés.
Les paramètres de la super-tendance doivent être optimisés pour équilibrer l'efficacité du filtrage et le retard.
Les moyennes à long terme peuvent être en retard dans la génération de signaux.
Testez différentes combinaisons de moyennes mobiles pour trouver les paramètres optimaux.
Optimiser les paramètres de la tendance supérieure pour équilibrer le filtrage et le retard.
Ajoutez d'autres indicateurs comme le volume pour valider davantage les signaux.
Incorporer l'analyse des sentiments et des nouvelles pour identifier les points tournants potentiels.
Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres.
Cette stratégie combine les forces des moyennes mobiles doubles et de la super tendance pour identifier les tendances et filtrer les faux signaux. Elle peut être continuellement améliorée grâce à l'optimisation des paramètres et à la validation supplémentaire.
/*backtest start: 2022-09-21 00:00:00 end: 2023-09-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"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/ // © bhavikmota //@version=4 strategy("EMA & Supertrend", overlay = true) //length = input(9, minval=1) //ema1 = ema(close, length) //ema2 = ema(ema1, length) //ema3 = ema(ema2, length) //shortest = ema(close, 20) //short = ema(close, 50) //longer = ema(close, 100) //longest = ema(close, 200) //for Ema1 len1 = input(21, minval=1) //src1 = input(close) ema1 = ema(close,len1) plot(ema1, color=color.red, linewidth=1) //for Ema2 len2 = input(55, minval=1) //src2 = input(close) ema2 = ema(close,len2) plot(ema2, color=color.green, linewidth=1) //for Ema3 len3 = input(200, minval=1) //src3 = input(close) ema3 = ema(close,len3) plot(ema3, color=color.blue, linewidth=1) //for Ema4 len4 = input(233, minval=1) //src4 = input(close) ema4 = ema(close,len4) plot(ema4, color=color.black, linewidth=1) 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=true) highlighting = input(title="Highlighter 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 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 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=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 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!") //Trading logic Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover Exitlong = crossunder(close,ema2) // candle closes below supertrend Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover Exitshort = crossover(close,ema2) // candle closes above supertrend //Execution Logic - Placing Order start = timestamp(2008,1,1,0,0) if time>= start strategy.entry("long", strategy.long, when=Enterlong) strategy.close("long",when=Exitlong) //strategy.entry("short",strategy.short,100,when=Entershort) //strategy.close("short",when=Exitshort)