Cette stratégie est essentiellement une stratégie croisée de moyenne mobile. En calculant la moyenne mobile des prix et en fixant certaines moyennes mobiles à court et à long terme, passez à long lorsque la moyenne mobile à court terme passe au-dessus de la moyenne mobile à long terme depuis le bas; passez à court lorsque la moyenne mobile à court terme passe en dessous de la moyenne mobile à long terme depuis le haut.
L'idée de base de la stratégie croisée des moyennes mobiles des prix est la suivante: la moyenne mobile des prix peut refléter efficacement la tendance des changements de prix.
La stratégie calcule une moyenne mobile à plus long terme et une moyenne mobile à plus court terme. La ligne longue juge principalement la tendance majeure, et la ligne courte est utilisée pour capturer les fluctuations à moyen terme pendant la tendance majeure. Les signaux de trading de la stratégie proviennent principalement du croisement de la ligne courte sur la ligne longue: le signal long lorsque la ligne courte traverse au-dessus de la ligne longue, et le signal court lorsque la ligne courte traverse en dessous. En outre, la stratégie filtre les signaux pour éviter les faux signaux.
Plus précisément, la stratégie utilise 7 types différents de moyennes mobiles, y compris SMA, EMA, VWMA, etc. Les utilisateurs peuvent sélectionner le type de moyenne mobile. La longueur de la moyenne mobile peut également être réglée de manière flexible. En outre, la stratégie prévoit également des restrictions sur certaines périodes de temps de négociation et des mécanismes de gestion de position.
Les principaux avantages de la stratégie croisée des moyennes mobiles sont les suivants:
La logique stratégique est claire et simple, facile à comprendre et à mettre en œuvre, adaptée aux débutants.
Le principe de la stratégie est solide, basé sur des règles entièrement vérifiées de négociation de moyennes mobiles, et a été testé dans la pratique sur les marchés.
Les paramètres de la stratégie sont flexibles et réglables, les utilisateurs pouvant choisir les paramètres appropriés en fonction de leurs propres jugements et préférences sur le marché.
La stratégie comporte certains mécanismes de contrôle des risques pour réduire le temps de détention des ordres perdants et prévenir les positions inversées inutiles.
La stratégie contient plusieurs types de moyennes mobiles. Les utilisateurs peuvent sélectionner le type de moyenne mobile le plus approprié pour leurs variétés de trading.
La stratégie préconise d'utiliser une logique de négociation pendant des périodes de négociation spécifiques afin d'éviter des fluctuations anormales sur les principaux marchés des fêtes.
Bien que la stratégie croisée des moyennes mobiles présente de nombreux avantages, il existe encore certains risques dans le commerce réel, qui se reflètent principalement dans les deux aspects suivants:
En raison du décalage de la plupart des moyennes mobiles, des signaux croisés peuvent apparaître à un stade ultérieur après la fin de l'inversion des prix, ce qui est facile à piéger.
En cas d'imposition incorrecte des paramètres, les signaux croisés peuvent être trop fréquents, ce qui entraîne une activité de négociation trop élevée et des coûts de négociation plus élevés.
En réponse aux risques susmentionnés, les contrôles et les méthodes d'adaptation sont effectués de la manière suivante:
Contrôler le risque de perte unique en définissant une plage de stop loss appropriée.
Réduire la fréquence des transactions et prévenir le sur-échange en ajoutant des conditions de filtrage.
Optimiser les paramètres de la moyenne mobile pour sélectionner la combinaison de paramètres la plus appropriée pour vos propres variétés et cycles de trading.
Il est encore possible d'optimiser davantage cette stratégie de croisement des moyennes mobiles de prix, dans les domaines suivants:
Renforcer le mécanisme de protection dans des conditions de marché extrêmes, par exemple suspendre temporairement les échanges lors de fortes fluctuations de prix pour éviter des conditions de marché anormales.
Augmenter les conditions de filtrage et les signaux de trading combinés pour améliorer la qualité et la stabilité des signaux.
Adopter un système de paramètres dynamiques. Selon les conditions du marché et les caractéristiques des variétés, ajuster automatiquement les paramètres clés tels que la longueur moyenne mobile, l'interrupteur de négociation, etc. au lieu d'utiliser des valeurs fixes.
Appliquez ce signal de croisement de moyenne mobile dans des stratégies avancées comme l'arbitrage de variété composite. Combinez-le avec d'autres informations pour une optimisation de stratégie approfondie.
Ces suggestions peuvent élargir l'environnement applicable et l'efficacité de cette stratégie et permettre de mieux équilibrer les risques et les avantages.
Cet article fait une analyse détaillée du code et une interprétation de la stratégie de croisement de moyenne mobile simple - Noro
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1) needlong = input(true, "long") needshort = input(true, "short") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type") src = input(close, defval = close, title = "MA Source") len = input(30, defval = 30, minval = 1, title = "MA length") off = input(00, defval = 00, minval = 0, title = "MA offset") anti = input(true, defval = true, title = "Anti-saw filter") showma = input(true, defval = true, title = "Show MA") showbg = input(false, defval = false, title = "Show background") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //DEMA dema = 2 * ema(src, len) - ema(ema(close, len), len) //TEMA xPrice = close xEMA1 = ema(src, len) xEMA2 = ema(xEMA1, len) xEMA3 = ema(xEMA2, len) tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3 //KAMA xvnoise = abs(src - src[1]) nfastend = 0.20 nslowend = 0.05 nsignal = abs(src - src[len]) nnoise = sum(xvnoise, len) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) kama = 0.0 kama := nz(kama[1]) + nsmooth * (src - nz(kama[1])) //PriceChannel lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 sma_1 = sma(src, len) ema_1 = ema(src, len) vwma_1 = vwma(src, len) ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0 ma = ma2[off] macol = showma ? color.blue : na plot(ma, color = macol, linewidth = 3, transp = 0) //Background trend = 0 trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1] bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na bgcolor(bgcol, transp = 70) //Trading size = strategy.position_size truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] if trend == 1 and trend[1] == -1 strategy.entry("Long", strategy.long, lot, when = needlong and truetime) if trend == -1 and trend[1] == 1 strategy.entry("Short", strategy.short, lot, when = needshort and truetime) if size > 0 and needshort == false and trend == -1 strategy.close_all() if size < 0 and needlong == false and trend == 1 strategy.close_all() if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")