Cette stratégie est basée sur l'indicateur de moyenne mobile dynamique pour suivre l'évolution des prix en temps réel et générer des signaux de trading lorsque la moyenne mobile est franchie.
Cette stratégie utilise des indicateurs de moyenne mobile dynamique, y compris ALMA, EMA, SMA et plus encore. Le principe est d'aller long lorsque le prix dépasse la moyenne mobile et d'aller court lorsqu'il dépasse la moyenne mobile. C'est-à-dire que la moyenne mobile sert de baromètre pour la tendance des prix et que des signaux peuvent être générés lorsqu'un renversement de tendance se produit.
Plus précisément, la stratégie utilise des moyennes mobiles formées par des prix élevés et bas. Le prix bas MA sert de ligne de signal pour les signaux longs, tandis que le prix élevé MA sert de ligne pour les courts. Lorsque le prix de clôture dépasse le prix bas MA, allez long. Lorsque la fermeture tombe en dessous du prix élevé MA, allez court.
En jugeant l'évolution des prix avec MA et en combinant avec le principe de rupture pour générer des signaux, une stratégie de suivi de tendance simple et pratique est formée.
Cette stratégie évalue la direction de la tendance avec MA et génère des signaux basés sur les principes de rupture. Elle est simple à utiliser et adaptée à la détention à moyen et long terme. Les paramètres peuvent également être ajustés pour s'adapter aux changements du marché. Les risques liés aux fluctuations à court terme et à la détention à long terme doivent être gérés avec stop loss / profit taking. Il y a de la place pour l'amélioration en incorporant plus d'indicateurs et en trouvant des paramètres optimaux grâce à l'apprentissage automatique.
/*backtest start: 2023-12-02 00:00:00 end: 2024-01-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true) //INPUTS mat = input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"]) baseline = input(55, title="MA Length") src = input(ohlc4, title="Closing Source") offset = input(0.85, step=0.05, title="Offset (alma only)") sigma = input(10, title="Sigma (alma only)") useCurrentRes = input(true, title="Use Current Resolution") resCustom = input("1440", title="Timeframe") showsignals = input(false, title="Show Signals ?") //BASELINE baselinehigh = mat=="SMA" ? sma(high,baseline) : mat=="EMA" ? ema(high,baseline) : mat=="WMA" ? wma(high,baseline) : mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(high,baseline) : mat=="RMA" ? rma(high,baseline) : mat=="ALMA" ? alma(high, baseline, offset, sigma) : na baselinelow = mat=="SMA" ? sma(low,baseline) : mat=="EMA" ? ema(low,baseline) : mat=="WMA" ? wma(low,baseline) : mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : mat=="VWMA" ? vwma(low,baseline) : mat=="RMA" ? rma(low,baseline) : mat=="ALMA" ? alma(low, baseline, offset, sigma) : na //RESOLUTION res = useCurrentRes ? timeframe.period : resCustom mtfhigh = security(syminfo.tickerid, res, baselinehigh) mtflow = security(syminfo.tickerid, res, baselinelow) //PLOTS plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High") plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low") long = src > mtfhigh short = src < mtflow barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor") signal = 0 signal := long ? 1 : short ? 2 : nz(signal[1]) plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00) plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000) alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !") if (long) strategy.entry("Long", strategy.long) if (short) strategy.entry("Short", strategy.short)