La stratégie de négociation croisée des moyennes mobiles est une stratégie d'indicateur technique classique. L'idée de base de cette stratégie est de générer des signaux d'achat et de vente en combinant des moyennes mobiles de différentes périodes et d'optimiser davantage les sorties commerciales en utilisant des points de tournant des moyennes mobiles. Cette stratégie convient à divers délais et produits et peut obtenir des rendements stables.
La stratégie utilise principalement deux moyennes mobiles, l'une avec une période plus courte comme ligne rapide et l'autre avec une période plus longue comme ligne lente. Lorsque la ligne rapide traverse la ligne lente vers le haut, un signal d'achat est généré. Lorsque la ligne rapide traverse la ligne lente vers le bas, un signal de vente est généré.
En outre, la stratégie sort des transactions en utilisant les points de basculement des moyennes mobiles. Lorsque la ligne rapide passe de la hausse à la baisse, les positions longues sortiront. Lorsque la ligne rapide passe de la baisse à la hausse, les positions courtes sortiront. Les points de basculement de la moyenne mobile peuvent capturer les points d'inversion du marché à court terme, ce qui aide la stratégie à réduire les pertes ou à réaliser des profits à temps, améliorant ainsi le rendement global.
La stratégie de négociation croisée des moyennes mobiles à virage présente les avantages suivants:
La stratégie utilise seulement deux indicateurs: la moyenne mobile et l'indicateur ROC.
Les caractéristiques inhérentes du retard et de l'assouplissement des prix des moyennes mobiles peuvent filtrer un certain bruit et éviter de générer trop de transactions invalides dans des tendances variables.
Il peut contrôler efficacement les pertes unilatérales.
L'application est large. Le principe de la stratégie est simple et peut être appliqué à différents produits et délais de négociation tels que les barres quotidiennes et horaires.
Comparée aux stratégies visant les points chauds du marché, cette stratégie se concentre davantage sur la maîtrise des risques au lieu de rechercher des rendements très élevés, mais elle peut obtenir des rendements positifs stables.
La stratégie de négociation croisée sur les moyennes mobiles à virage comporte également certains risques, principalement en ce qui concerne les aspects suivants:
Lorsque le marché est rapide, les signaux croisés des moyennes mobiles seront retardés, manquant peut-être le meilleur point d'entrée.
Cette stratégie a des sorties opportunes mais des signaux d'entrée plus lents. Cela peut conduire à des périodes de détention trop vides. Les opportunités de profit sont manquées pendant les périodes de détention vides.
L'optimisation des paramètres est difficile. Le choix de paramètres tels que la longueur moyenne mobile et le cycle ROC aura un grand impact sur la performance de la stratégie. Mais l'optimisation des paramètres nécessite beaucoup de données historiques pour le backtesting, ce qui pose des difficultés dans l'optimisation.
Dans les tendances à volatilité élevée, les moyennes mobiles génèrent plusieurs croisements invalides, ce qui nuit aux performances de la stratégie.
La stratégie commerciale peut être encore optimisée dans les aspects suivants:
Incorporer des indicateurs de filtrage de tendance. Ajouter des indicateurs comme ADX et ATR pour juger de l'état de la tendance. Désactiver la stratégie lorsqu'il n'y a pas de tendance claire pour éviter les transactions inutiles.
Identifier la direction de la tendance principale sur des délais plus longs pour éviter de négocier contre la tendance principale.
Optimisation des paramètres adaptatifs: permettre aux paramètres tels que la longueur moyenne mobile de s'adapter en fonction de la volatilité du marché en temps réel pour améliorer la robustesse des paramètres.
Identifier les modèles de chandeliers aux points de croisement MA pour filtrer les faux signaux.
Dans l'ensemble, la stratégie de négociation croisée à moyenne mobile équilibre les risques et les rendements. Elle présente des avantages tels que la facilité de mise en œuvre, la résistance aux pertes consécutives et les rendements stables. Elle présente également des inconvénients tels que l'émission retardée de MAs et des périodes de détention vides excessives. En optimisant les paramètres, en incorporant le jugement des tendances, la reconnaissance de modèles, etc., la performance de la stratégie peut être encore améliorée.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("SMA", "1st MA Type", options=["SMA", "EMA"]) ma2 = input(50, title="2nd MA Length") type2 = input("SMA", "2nd MA Type", options=["SMA", "EMA"]) price1 = if (type1 == "SMA") sma(price, ma1) else ema(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else ema(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short) lookback1 = input(1, "Lookback 1") roc1 = roc(price1, lookback1) ma1up = false ma1down = false ma2up = false ma2down = false ma1up := nz(ma1up[1]) ma1down := nz(ma1down[1]) ma2up := nz(ma2up[1]) ma2down := nz(ma2down[1]) trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01 if crossover(roc1, trendStrength1) ma1up := true ma1down := false if crossunder(roc1, -trendStrength1) ma1up := false ma1down := true shortexitCondition = ma1up and ma1down[1] if (shortexitCondition) strategy.close("Short") longexitCondition = ma1down and ma1up[1] if (longexitCondition) strategy.close("Long")