Stratégie de croisement à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-10-07 15:18:44 Je suis désolé.
Les étiquettes:

Résumé

Il s'agit d'une stratégie de trading basée sur le double croisement des moyennes mobiles. Il utilise les interactions entre les moyennes mobiles rapides et lentes pour déterminer les tendances du marché et générer des signaux de trading.

Principe

Cette stratégie utilise principalement la capacité de suivi des tendances des moyennes mobiles. Les moyennes mobiles sont les prix moyens calculés sur une certaine période en fonction des prix de clôture historiques. Ils peuvent aplanir les fluctuations mineures intradiennes et refléter les tendances de plus grande durée. Le MA rapide utilise une période plus courte et peut répondre plus rapidement aux changements de prix, tandis que le MA lent utilise une période plus longue et représente la tendance à long terme. Le passage rapide du MA au-dessus du MA lent indique que l'élan à court terme brise la tendance à long terme à la hausse, signalant le début d'une tendance haussière. Inversement, le passage rapide du MA au-dessous du MA lent signifie que la tendance à long terme est sous pression et que le prix peut baisser.

Cette stratégie génère des signaux de trading en définissant des moyennes mobiles de différentes longueurs de cycle et en utilisant leurs croisements. Lorsque le MA de cycle court franchit le niveau du MA de cycle long, il signale une amélioration de l'élan à court terme et génère un signal d'achat. Lorsque le MA de cycle court franchit le niveau du MA de cycle long, il indique une tendance à court terme en baisse et produit un signal de vente.

Les avantages

  • L'utilisation de croisements MA pour déterminer les changements de tendance est une technique simple et efficace
  • Les MAs peuvent filtrer efficacement le bruit du marché et éviter les problèmes
  • L'ajustement des périodes d'AM rapides et lentes peut s'adapter aux différentes conditions du marché
  • Indique visuellement les signaux de tendance et les points tournants
  • Facile à comprendre, réglage flexible des paramètres

Les risques

  • Les crossovers à double MA ont des délais et peuvent manquer des virages.
  • Ne convient pas pour les marchés de gamme, peut produire plus de faux signaux
  • Des réglages incorrects de la période de MA peuvent provoquer une sursensibilité ou une lenteur.
  • Besoin d'autres indicateurs pour confirmer le contexte et le calendrier de la tendance

Directions d'optimisation

  • Évaluer la rentabilité des différents paramètres de la période d'AM et sélectionner le meilleur
  • Ajoutez d'autres filtres comme les indicateurs de chaîne, les motifs de chandeliers, etc.
  • Incorporer des indicateurs de volatilité pour optimiser le stop loss et le profit
  • Utiliser des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres et les règles
  • Ajouter des modules de trading algorithmique pour l'exécution automatique des ordres

Résumé

La stratégie double MA utilise la capacité de suivi de tendance des moyennes mobiles et génère des signaux basés sur leurs croisements. Bien qu'elle soit simple et intuitive, elle présente également quelques défauts. Ceux-ci peuvent être surmontés par l'ajustement des paramètres, l'ajout de confirmations, l'optimisation des algorithmes, etc. pour en faire un système robuste.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-04-14 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/
// © KivancOzbilgic


//@version=4
strategy("pomila", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Plus de