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 de base de cette stratégie est d'utiliser le croisement entre les moyennes mobiles de différentes périodes comme signaux de trading. Lorsque la moyenne mobile à court terme franchit au-dessus de la moyenne mobile à long terme depuis le bas, un signal d'achat est généré. Lorsque la moyenne mobile à court terme franchit au-dessous de la moyenne mobile à long terme depuis le haut, un signal de vente est généré.
Cette stratégie utilise des données d'entrée pour définir le type (SMA, EMA, WMA, RMA) et la période de la moyenne mobile, ainsi que la plage de temps de backtesting.
Différents types de moyennes mobiles sont calculés dans la fonction variante.
Lorsque le prix de clôture dépasse ma, un signal d'achat est généré.
Pour définir un stop loss, on calcule la moyenne réelle de la fourchette atr sur 14 périodes.
La logique spécifique d'entrée et de sortie est la suivante:
Entrée longue: croisements rapprochés au-dessus de ma et dans la plage de temps de backtest, point de stop loss est le point d'entrée proche
Sortie longue: fermeture des croisements inférieurs à ma moins 2 fois atr pour la sortie stop loss ou prix le plus élevé dépasse le point d'entrée close plus 2 fois atr pour la sortie take profit
Entrée courte: croix de fermeture inférieure à ma et dans la plage de temps de backtest, point stop loss est le point d'entrée de fermeture
Sortie courte: fermeture des croisements au-dessus de ma plus 2 fois atr pour la sortie stop loss ou fermeture du prix le plus bas inférieur au point d'entrée moins 2 fois atr pour la sortie take profit
Pour faire face aux risques, des optimisations peuvent être apportées dans les aspects suivants:
Cette stratégie peut être optimisée dans les aspects 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 de base de la stratégie est simple et facile à mettre en œuvre, adaptée à divers marchés, et est l'une des stratégies de trading quantitatif d'entrée de gamme. Cependant, la stratégie présente également des problèmes tels que la génération de signaux fréquents et la propension à arrêter les pertes. Avec des optimisations appropriées, la performance peut être grandement améliorée. Dans l'ensemble, la stratégie de croisement des moyennes mobiles fournit un très bon cadre pour le développement de la stratégie et est la pierre angulaire de l'apprentissage quantitatif de la stratégie de trading.
/*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] )