La stratégie stochastique de la moyenne mobile double tente d'identifier les opportunités de trading en utilisant une combinaison d'indicateurs de moyenne mobile et de l'oscillateur stochastique.
La stratégie repose principalement sur deux indicateurs techniques:
Moyennes mobiles: Il calcule une EMA rapide, une SMA lente et une VWMA lente à l'aide de différents paramètres et génère des signaux de trading lorsque l'EMA rapide traverse la SMA lente.
Oscillateur stochastique: il calcule la valeur %K et considère que le marché est suracheté ou survendu lorsque %K franchit les seuils supérieurs ou inférieurs prédéfinis, ce qui permet de filtrer certains signaux de moyenne mobile.
Plus précisément, la logique de la génération de signaux est la suivante:
Lorsque l'EMA rapide dépasse le niveau de la SMA lente et que %K est inférieur au niveau de survente, passez long. Lorsque l'EMA rapide dépasse le niveau de la SMA lente et que %K est supérieur au niveau de surachat, passez court.
Pour les positions longues existantes, fermer lorsque %K entre à nouveau dans la zone de surachat ou lorsque le prix dépasse le seuil de stop loss.
En combinant les moyennes mobiles et l'oscillateur stochastique, la stratégie tente d'identifier des points de signal de moyenne mobile à forte probabilité pour entrer dans les transactions, tout en utilisant le stochastique pour filtrer certains des faux signaux.
Les principaux avantages de cette stratégie sont les suivants:
Il y a aussi des risques:
Les mesures d'atténuation
Les principales possibilités d'optimisation sont les suivantes:
La stratégie stochastique des moyennes mobiles doubles utilise un mélange de moyennes mobiles et de l'oscillateur stochastique pour concevoir un système de suivi de tendance robuste, mais présente certaines opportunités d'amélioration autour des paramètres, des arrêts, etc. D'autres raffinements tels que des indicateurs supplémentaires et des optimisations peuvent potentiellement fournir un alpha plus cohérent.
/*backtest start: 2023-01-22 00:00:00 end: 2024-01-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("TVIX MEAN REV V2 TREND", overlay=true) length = input(16, minval=1) OverBought = input(80) OverSold = input(20) TradeLong = input (true) TradeShort = input (true) OverBoughtClose = input(80) OverSoldClose = input(20) smoothK = 3 smoothD = 3 trail_points = input(50) k = sma(stoch(close, high, low, length), smoothK) d = sma(k, smoothD) k2 = sma(stoch(close, high, low, length), smoothK) d2 = sma(k, smoothD) // === GENERAL INPUTS === // short Ema maFastSource = input(defval=close, title="Fast EMA Source") maFastLength = input(defval=1, title="Fast EMA Period", minval=1) // long Sma maSlowSource = input(defval=close, title="Slow SMA Source") maSlowLength = input(defval=100, title="Slow SMA Period", minval=1) // longer Sma maSlowerSource = input(defval=close, title="Slower SMA Source") maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1) //ATR Stop Loss Indicator by Keith Larson atrDays = input(7, "ATR Days Lookback") theAtr = atr(atrDays) atrModifier = input(5.0, "ATR Modifier") //plot(atr * atrModifier, title="ATR") LstopLoss = close - (theAtr * atrModifier) SstopLoss = close + (theAtr * atrModifier) // === SERIES SETUP === /// a couple of ma's.. maFast = ema(maFastSource, maFastLength) maSlow = sma(maSlowSource, maSlowLength) maSlower = vwma(maSlowerSource, maSlowerLength) rsi = rsi(maSlowerSource, maSlowerLength) // === PLOTTING === fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30) slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30) slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30) // === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross LongFilter = maFast > maSlow ShortFilter = maSlow > maFast BUY=crossover(k, d) and k < OverSold SELL=crossunder(k, d) and k > OverBought SELLCLOSE=crossover(k, d) and k < OverSoldClose BUYCLOSE=crossunder(k, d) and k > OverBoughtClose Open = open if not na(k) and not na(d) if crossover(k, d) and k < OverSold and LongFilter and TradeLong strategy.entry("$", strategy.long, limit = Open, comment="Long") strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss ) ///strategy.close("$",when = open < LstopLoss ) if not na(k) and not na(d) if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort strategy.entry("$1", strategy.short, limit = Open, comment="S") strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss ) ///strategy.close ("$1", when = open < SstopLoss)