Stratégie de croisement de moyenne mobile double Momentum


Date de création: 2023-11-16 17:25:13 Dernière modification: 2023-11-16 17:25:13
Copier: 0 Nombre de clics: 651
1
Suivre
1617
Abonnés

Stratégie de croisement de moyenne mobile double Momentum

Aperçu

La stratégie utilise le principe de la double ligne de croix, combinant le jugement de la tendance de l’indicateur MACD et les points de croix de pointe de fond, en plus des points de forme, dans le but de capturer la tendance du marché à mi-parcours. La logique principale est d’entrer dans le marché lors d’une transition dans la direction de la ligne de croix, en passant par la couleur de fond MACD.

Principe de stratégie

La stratégie utilise les EMA rapides et les EMA lentes pour construire des lignes doubles, les lignes rapides et lentes se croisant pour déterminer la direction de la tendance. En même temps, calculer le MACD et le signal, dont la différence est représentée par un diagramme orthogonal.

Selon le code, la longueur de la ligne rapide est de 12, la longueur de la ligne lente est de 26, indiquant les tendances à court et à long terme. La longueur du signal est de 9, pour un traitement de lissage supplémentaire.

La logique croisée:

  • signal: une ligne lente sur une ligne rapide, représentant une tendance à la hausse à court terme
  • trend_dn = macd < signal: la ligne rapide traverse la ligne lente, représentant une tendance à la baisse à court terme

Le point de rencontre:

  • cross_UP = signal[1] >= macd[1] and signal < macd: la ligne rapide traverse la ligne lente par le bas
  • cross_DN = signal[1] <= macd[1] and signal > macd: les lignes rapides traversent les lignes lentes de haut en bas

La variation de couleur du rectangle pour déterminer la force de la tendance:

  • histA_IsUp = colonne de l’échelle verticale augmentée et supérieure à 0, représentant une augmentation de la force de montée
  • histA_IsDown = colonne de l’échantillon est plus petite et plus grande que 0, ce qui représente une diminution de la force ascendante
  • Ci-dessous le même

Avantages stratégiques

  1. Utilisez une ligne biuniversale pour déterminer la direction de la tendance à moyen terme et éviter d’être dérangé par le bruit du marché à court terme.

  2. L’indicateur MACD aide à déterminer les tendances et la force à court terme, améliorant la probabilité de profit

  3. La variation de couleur de la diagonale détermine la taille de l’intensité et permet de mieux saisir le moment d’entrée

  4. Les marqueurs de couleurs de fond des points de croix, à première vue

  5. Cycle de ligne moyenne personnalisable pour s’adapter à différents environnements de marché

  6. Modifier les paramètres MACD pour optimiser l’effet des indicateurs

  7. Plusieurs types de confirmation d’entrée sont proposés: orientation de la ligne médiane, croisement de l’indicateur, percée de la forme

Risque stratégique

  1. La courbe moyenne est insensible aux fluctuations à court terme et risque de manquer une occasion de courte ligne.

  2. Les paramètres du MACD sont mal réglés, l’indicateur ne fonctionne pas correctement et émet un mauvais signal

  3. Il y a une certaine aveuglement avec seulement la moyenne et le signal MACD

  4. Le risque d’expansion des pertes n’a pas été pris en compte

  5. Manque de gestion rigoureuse des fonds et de contrôle des positions

Les solutions possibles:

  1. Le risque est maîtrisé par d’autres indicateurs qui limitent les variations à court terme.

  2. Optimiser les paramètres MACD et tester leur efficacité sur différents marchés

  3. Ajout de forme, facteurs de confirmation tels que Momentum

  4. La mise en place d’un mécanisme de prévention des pertes afin d’éviter des pertes individuelles excessives

  5. Ajout d’un module de gestion des fonds pour contrôler les positions individuelles en fonction de la taille des fonds

Orientation de l’optimisation de la stratégie

  1. Tester et optimiser les combinaisons de paramètres de la ligne moyenne pour répondre à un plus grand nombre de situations de marché

  2. Essayez différents types de ligne moyenne, comme VWAP, la ligne moyenne à bande brune, etc.

  3. Pour éviter les fausses avancées, il faut augmenter le volume de trafic

  4. Le RSI et d’autres indicateurs ont confirmé l’excédent d’achat et de vente

  5. Mise en place de mécanismes de prévention des pertes, tels que la prévention des déplacements et la prévention des chocs

  6. Adhésion à un mécanisme de gestion des positions, contrôlant les positions individuelles en fonction de la taille des fonds

  7. L’optimisation des paramètres peut être envisagée avec des algorithmes d’apprentissage automatique.

  8. La stratégie d’expansion de Universe, une approche plus approfondie du portefeuille

Résumer

La stratégie intègre le jugement de la tendance à double équilibre et l’indicateur de dynamique MACD, ajoutant des caractéristiques de forme, et construit une stratégie de négociation à moyen terme relativement stable. L’avantage central est de saisir la direction de la tendance principale et d’éviter d’être perturbé par le bruit du marché à court terme.

Code source de la stratégie
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1")
//Plot Inputs
res           = input.timeframe("",  "Indicator TimeFrame")
fast_length   = input.int(title="Fast Length", defval=12)
slow_length   = input.int(title="Slow Length", defval=26)
src           = input.source(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9)
sma_source    = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal    = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Show Plots T/F
show_macd     = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10")
show_macd_LW  = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11")
show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11")
show_Hist     = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20")
show_hist_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20")
show_trend    = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30")
show_HB       = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40")
show_cross    = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50")
show_dots     = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60")
show_dots_LW  = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60")

//show_trend    = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5")
// MACD Lines colors
col_macd      = input.color(#FF6D00, "MACD Line  ",  group="Color Settings", inline="CS1")
col_signal    = input.color(#2962FF, "Signal Line  ",  group="Color Settings", inline="CS1")
col_trnd_Up   = input.color(#4BAF4F, "Trend Up      ",  group="Color Settings", inline="CS2")
col_trnd_Dn   = input.color(#B71D1C, "Trend Down    ",  group="Color Settings", inline="CS2")
// Histogram Colors
col_grow_above = input.color(#26A69A, "Above   Grow",  group="Histogram Colors", inline="Hist10")
col_fall_above = input.color(#FF5252, "Fall",  group="Histogram Colors", inline="Hist10")
col_grow_below = input.color(#FF5252, "Below Grow",  group="Histogram Colors", inline="Hist20")
col_fall_below = input.color(#f8f524, "Fall",  group="Histogram Colors", inline="Hist20")
// Alerts T/F Inputs
alert_Long    = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10")
alert_Short   = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10")
alert_Long_A  = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20")
alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20")
// Calculating
fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length))
slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length))
macd = fast_ma - slow_ma
signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length))
hist = macd - signal
// MACD Trend and Cross Up/Down conditions
trend_up   = macd > signal
trend_dn   = macd < signal
cross_UP   = signal[1] >= macd[1] and signal < macd
cross_DN   = signal[1] <= macd[1] and signal > macd
cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0
cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0
// Condition that changes Color of MACD Line if Show Trend is turned on..
trend_col = show_trend  and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend  and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na 

//Var Statements for Histogram Color Change
var bool histA_IsUp = false
var bool histA_IsDown = false
var bool histB_IsDown = false
var bool histB_IsUp = false
histA_IsUp   := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0
histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0
histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0
histB_IsUp   := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0

hist_col =  histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver 

// Plot Statements
//Background Color
bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false)
bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false)
//Highlight Price Bars
barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false)
barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false)
//Regular Plots
plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW)
plot(show_macd  and signal ? signal : na, title="Signal", color=color.new(col_signal, 0),  style=plot.style_line ,linewidth=show_signal_LW)
plot(show_macd  and macd ? macd : na, title="MACD", color=color.new(trend_col, 0),  style=plot.style_line ,linewidth=show_macd_LW)
hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false)
plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)
plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false)

//Alerts
if alert_Long and cross_UP
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short and cross_DN
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close)
//Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0
if alert_Long_A and cross_UP_A
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close)

if alert_Short_B and cross_DN_B
    alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close)


if (histA_IsUp)
	strategy.entry("buy", strategy.long, comment="buy")
if (histA_IsDown)
	strategy.entry("sell", strategy.short, comment="sell")