
La stratégie est basée sur la croisée de deux moyennes mobiles de paramètres différents. Elle émet des signaux d’achat et de vente lorsque les moyennes mobiles de plus courte période franchissent les moyennes mobiles de plus longue période de manière descendante; et des signaux de vente lorsque les moyennes mobiles de plus courte période franchissent les moyennes mobiles de plus longue période de manière descendante.
La stratégie est écrite en utilisant le langage de script pine. Elle définit d’abord par des entrées le type, la longueur et la source de prix de deux moyennes mobiles, nommées respectivement p1 et p2. P1 représente la moyenne des périodes plus courtes et p2 la moyenne des périodes plus longues.
Le croisement de deux lignes égales est déterminé par les fonctions crossover et crossunder. Le signal d’achat est donné lorsque p1 franchit p2 de bas en haut et le signal de vente lorsque p1 franchit p2 de haut en bas.
Pour exécuter une transaction, la stratégie crée une position de plus ou de moins à la sortie du signal via la fonction strategy.entry. Si le paramètre shortOnly est activé, seule la transaction vend le signal.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Les signaux inefficaces peuvent être réduits en ajustant la longueur de la ligne moyenne, en introduisant des conditions de filtrage, etc. Les indicateurs de tendance peuvent également être combinés pour déterminer le mouvement du grand marché.
Cette stratégie peut être optimisée dans les domaines suivants:
L’introduction d’une moyenne pondérée en volume ou d’un prix typique comme source de prix améliore la fiabilité des signaux croisés
Augmentation de la période de validation pour éviter les erreurs de croisement à court terme
Stop-loss combiné avec ATR, calculé en fonction de l’ampleur des fluctuations du marché
Optimisation des paramètres avec une correspondance de courbe pour trouver la combinaison optimale
Les signaux de négociation ne sont envisagés que lorsque les tendances macrocycliques sont cohérentes.
Cette stratégie de croisement bi-universale est globalement facile à comprendre et à mettre en œuvre. Elle est hautement personnalisable et permet de former des signaux de transaction par la croisement de deux lignes universales.
/*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)