
La stratégie de croisement des moyennes mobiles est une stratégie d’analyse technique très classique et couramment utilisée. L’idée centrale de cette stratégie est d’utiliser les croisements entre les moyennes mobiles de différentes périodes comme signal d’achat. Un signal d’achat est généré lorsque la moyenne mobile à court terme traverse la moyenne mobile à long terme par le bas et un signal de vente lorsque la moyenne mobile à court terme traverse la moyenne mobile à long terme par le haut.
La stratégie consiste à saisir les types de moyennes mobiles (SMA, EMA, WMA, RMA) et la longueur des cycles, ainsi que la plage de temps de retracement.
Calculer différents types de moyennes mobiles dans une fonction variable. Les moyennes mobiles calculées sont conservées par ma.
Lorsque le prix de clôture est au-dessus de ma, un signal d’achat est généré; lorsque le prix de clôture est en dessous de ma, un signal de vente est généré.
Pour mettre en place un stop loss, on calcule l’amplitude moyenne des fluctuations réelles sur 14 cycles par atr. On prend le point de traversée comme référence, et on ajoute ou diminue 2 fois atr comme limite de stop loss.
La logique d’entrée et de sortie est la suivante:
Entrée multiple: close sur ma et le point d’arrêt est le point d’entrée close pendant le temps de rétroaction Sortie à plusieurs têtes: fermeture à la perte de ma moins 2 fois le point d’entrée, ou au prix le plus élevé au-dessus du point d’entrée et fermeture à la fermeture au moment de la fermeture Entrée à vide: close sous ma et dans le temps de rétroaction, le point d’arrêt est le point d’entrée close Sortie à vide: close sur ma plus 2 fois atr pour une sortie à perte, ou prix minimum inférieur au point d’entrée close moins 2 fois atr pour une sortie à perte
L’optimisation des risques peut être réalisée à partir des éléments suivants:
Cette stratégie peut être optimisée dans les domaines suivants:
La stratégie de croisement des moyennes mobiles est une stratégie d’analyse technique très typique et couramment utilisée. L’idée centrale de la stratégie est simple, facile à mettre en œuvre, applicable à tous les marchés, et est l’une des stratégies d’entrée dans le trading quantitatif.
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)
type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])
length = input(28)
source = close
// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2000, title = "From Year", minval = 2000)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
variant(type, src, len) =>
v1 = sma(src, len) // Simple
v2 = ema(src, len) // Exponential
v5 = wma(src, len) // Weighted
v7 = rma(src, len) // Smoothed
type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)
atr = security(syminfo.tickerid, "D", atr(14))
range = valuewhen(cross(close,ma), (atr*2), na)
ep = valuewhen(cross(close,ma), close, na)
plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep )
strategy.exit("Long Exit", "Long Entry", stop = ep-range)
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] )
strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep )
strategy.exit("Short Exit", "Short Entry", stop = ep+range)
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )