Stratégie de moyenne mobile double


Date de création: 2023-10-07 15:18:44 Dernière modification: 2023-10-07 15:18:44
Copier: 0 Nombre de clics: 438
1
Suivre
1237
Abonnés

Aperçu

Il s’agit d’une stratégie de négociation basée sur deux courbes moyennes en mouvement. Elle juge les tendances du marché et génère un signal de négociation en fonction de la relation croisée entre les courbes moyennes en mouvement rapide et les courbes moyennes en mouvement lent.

Le principe

La stratégie utilise principalement la fonction de suivi des tendances de la moyenne mobile. La moyenne mobile est une moyenne calculée en fonction des prix de clôture historiques sur un certain cycle. Elle peut fluctuer légèrement au cours d’une journée et refléter la tendance des prix sur une période de temps plus longue.

La stratégie utilise des lignes croisées pour former des signaux de transaction. Lorsque la courte moyenne périodique traverse la longue moyenne périodique, elle indique une tendance positive à court terme, générant un signal d’achat. Lorsque la courte moyenne périodique traverse la longue moyenne périodique, elle indique une tendance faible à court terme, générant un signal de vente.

Les avantages

  • L’utilisation d’un croisement biuniversale est un indicateur technique simple et efficace pour évaluer les variations de tendances
  • Une ligne uniforme peut filtrer efficacement le bruit du marché et éviter d’être bloquée
  • Adaptation des paramètres de périodes de moyenne lente pour s’adapter à différentes situations
  • Indiquer visuellement les signaux de tendance et les points de changement
  • Facile à comprendre et flexible avec les paramètres

Les risques

  • La stratégie de croisement bi-homogène est en retard et risque de manquer un point de basculement
  • Il n’est pas adapté aux tremblements de terre, ce qui génère plus de faux signaux.
  • Des paramètres de périodicité moyenne incorrects peuvent entraîner une sursensibilité ou une lenteur
  • Les indicateurs doivent être combinés avec d’autres indicateurs pour déterminer les tendances de fond et le moment de l’opération.

Direction d’optimisation

  • Évaluation des gains des différents paramètres de la période moyenne et sélection des paramètres optimaux
  • Ajout d’autres indicateurs de filtrage des signaux, tels que les indicateurs de canal, la forme de la ligne K, etc.
  • Optimisation de la stratégie de stop loss combinée à l’indicateur de volatilité
  • Optimisation automatique des paramètres et des règles de négociation basée sur des algorithmes d’apprentissage automatique
  • Ajout d’un module de négociation algorithmique pour une commande automatique

Résumer

La stratégie de croisement bi-équilibré utilise la fonction de suivi de tendance de la moyenne mobile pour juger de la direction du marché et générer des signaux de négociation en croisant la moyenne rapide et lente. La stratégie est simple et facile à utiliser, mais elle présente quelques problèmes.

Code source de la stratégie
/*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)