Cette stratégie utilise le croisement des moyennes mobiles doubles comme signaux de trading, combiné avec les arrêts ATR pour la tendance après le trading.
La stratégie utilise principalement deux ensembles de moyennes mobiles pour déterminer la direction de la tendance. La moyenne mobile rapide a une durée de 25 jours, et la moyenne mobile lente a une durée de 100 jours. Un signal d'achat est généré lorsque le MA rapide traverse au-dessus du MA lent, et un signal de vente est généré lorsqu'il traverse en dessous.
Pour filtrer certains faux signaux, la stratégie ajoute un compteur de croisement appelé crossCount. Les signaux ne sont déclenchés que lorsque le nombre de croisements pour le MA rapide dans la période de lookback (défaut 25 jours) est inférieur à maxNoCross (défaut 10).
En outre, la stratégie dispose d'un mécanisme de confirmation, où le signal est également confirmé si le prix rentre entre les deux moyennes mobiles après le signal initial.
Après avoir entré des positions, la stratégie utilise l'ATR pour définir des niveaux d'arrêt de perte.
La stratégie présente les avantages suivants:
En utilisant des doubles croisements MA avec filtrage, il peut capturer efficacement les mouvements de tendance forts tout en évitant les faux signaux.
Le mécanisme de confirmation empêche d'être falsifié par de fausses fuites.
L'arrêt-perte ATR flottant permet de maximiser les bénéfices tout en limitant les retraits.
Il a peu de paramètres optimisables et est facile à mettre en œuvre.
Applicable sur tous les marchés, y compris les crypto-monnaies et les actifs traditionnels.
Combine plusieurs indicateurs techniques de robustesse.
Les principaux risques de la stratégie sont les suivants:
Les passages fréquents de l'AM au cours des périodes d'intervalle peuvent entraîner plusieurs pertes.
Un réglage incorrect des paramètres ATR peut entraîner des arrêts trop larges ou trop serrés.
Les grands écarts peuvent directement déclencher des arrêts.
Les événements d'actualité majeurs causant une forte volatilité peuvent également arrêter les positions.
Des paramètres d'AM inadéquats pourraient conduire à des tendances manquantes ou à un trop grand nombre de faux signaux.
L'action récente des prix peut rendre les arrêts ATR obsolètes.
La stratégie peut être encore optimisée dans les aspects suivants:
Optimiser les paramètres de l'AM pour trouver de meilleures combinaisons, en testant différentes périodes et moyennes pondérées.
Testez différentes périodes ATR pour trouver de meilleures distances d'arrêt.
Ajoutez des filtres supplémentaires comme des pics de volume, des indicateurs de volatilité pour améliorer la qualité du signal.
Incorporer des indicateurs de tendance pour éviter les crises sur les marchés instables.
Ajoutez des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres par backtesting.
Cherchez plus de confirmation sur des délais plus longs pour éviter le bruit à court terme.
Mettre en œuvre des règles de prise de profit par étapes pour éliminer les positions rentables.
Cette stratégie combine les doubles croisements MA, le filtrage des tendances, la confirmation et les arrêts ATR dynamiques pour un suivi robuste des tendances.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Intraday Strategy (15M)", overlay=true) //MA's for basic signals, can experiment with these values fastEMA = sma(close, 25) slowEMA = sma(close, 100) //Parameters for validation of position lookback_value = 25 maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets //Amount of crosses on MA to filter out noise ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results crossCount = (ema25_crossover_sum <= maxNoCross) //Entries long agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false //Entries short agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false //ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("15", title='ATR Resolution') atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb)) //Strategy longCondition = ((agrLong or consLong) == true) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ((agrShort or consShort) == true) if (shortCondition) strategy.entry("Short", strategy.short) //Stop multiplier stopMult = 4 //horizontal stoplosses longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Strategy exit functions strategy.exit("Long ATR Stop", "Long", stop=longStop) strategy.exit("Short ATR Stop", "Short", stop=shortStop) //Plots redgreen = (fastEMA > slowEMA) ? green : red p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) fill(p1, p2, color=redgreen) s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') fill(p2, s1, color=red, transp=95) fill(p2, s2, color=red, transp=95)