Cette stratégie génère des signaux d'achat et de vente basés sur le croisement de deux moyennes mobiles avec des paramètres différents. Lorsque la moyenne mobile à plus courte période traverse au-dessus de la moyenne mobile à plus longue période d'en bas, un signal d'achat est généré. Lorsque la moyenne mobile à plus courte période traverse au-dessous de la moyenne mobile à plus longue période d'en haut, un signal de vente est généré.
La stratégie est écrite en script Pine. Elle définit d'abord deux moyennes mobiles, appelées p1 et p2, avec un type, une longueur et une source de prix personnalisables par entrée.
Les fonctions crossover et crossunder sont utilisées pour détecter le crossover entre les deux MA. Lorsque p1 traverse p2 depuis le bas, un signal d'achat est généré. Lorsque p1 traverse sous p2 depuis le haut, un signal de vente est généré.
Pour exécuter des transactions, la stratégie entre dans des positions longues ou courtes en utilisant strategy.entry lorsque les signaux sont déclenchés.
Les avantages de cette stratégie sont les suivants:
Cette stratégie comporte également certains risques:
Les risques peuvent être réduits en ajustant les longueurs de MA, en ajoutant des conditions de filtrage, etc. Des indicateurs de tendance peuvent également être ajoutés pour déterminer le biais du marché.
La stratégie peut être améliorée par les aspects suivants:
Utiliser le VWAP ou le prix typique comme source de prix pour rendre les signaux croisés plus fiables.
Ajouter une période de validation pour éviter les erreurs de croisement à court terme.
L'exposition à la volatilité du marché est calculée en tenant compte de l'exposition à la volatilité du marché.
Optimisation des paramètres par ajustement de courbe pour trouver des combinaisons optimales.
Considérez uniquement les signaux dans la direction des tendances à plus long terme.
La stratégie double MA crossover est facile à comprendre et à mettre en œuvre, générant des signaux commerciaux à partir de deux MA crossovers avec une grande personnalisabilité.
/*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"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © RafaelPiccolo //@version=4 strategy("Double MA Cross", overlay=true) type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len1 = input(10, minval=1, title="Length 1") src1 = input(close, "Source 1", type=input.source) type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len2 = input(50, minval=2, title="Length 2") src2 = input(close, "Source 2", type=input.source) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) p1 = getPoint(type1, len1, src1) p2 = getPoint(type2, len2, src2) shortCondition = crossunder(p1, p2) longCondition = crossover(p1, p2) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(p1, "MA 1", p1 < p2 ? color.red : color.green) plot(p2, "MA 2", color.blue)