Estratégia de Momentum de Crossover de Média Móvel Dupla


Data de criação: 2023-11-16 17:25:13 última modificação: 2023-11-16 17:25:13
cópia: 0 Cliques: 651
1
focar em
1617
Seguidores

Estratégia de Momentum de Crossover de Média Móvel Dupla

Visão geral

A estratégia usa o princípio de duplo equilíbrio de linha cruzada, combinando o julgamento de tendência do indicador MACD e o cruzamento de destaque de fundo, auxiliado pelo ponto de forma, com o objetivo de capturar a tendência intermédia do mercado. A lógica principal é entrar no mercado quando a mudança ocorre na direção da linha equilánea, com o cruzamento de destaque da linha cruzada através da cor de fundo do MACD, combinando o julgamento de mudança de cor do diagrama do MACD.

Princípio da estratégia

A estratégia usa o EMA rápido e o EMA lento para construir duas linhas de equilíbrio, as linhas rápidas e lentas se cruzam para determinar a direção da tendência. Ao mesmo tempo, calcula-se o MACD e o sinal, cuja diferença é traçada como um gráfico retrógrado.

De acordo com o código, o comprimento da linha rápida é 12, o comprimento da linha lenta é 26, indicando tendências de curto e longo prazo. O comprimento do sinal é 9, para o processamento de suavização adicional.

A lógica cruzada:

  • trend_up = macd > signal: linha rápida atravessa a linha lenta, representando a tendência de alta de curto prazo
  • trend_dn = macd < signal: a linha rápida atravessa a linha lenta, representando uma tendência de queda a curto prazo

O ponto de interseção:

  • cross_UP = signal[1] >= macd[1] and signal < macd: linha rápida atravessa a linha lenta de baixo
  • cross_DN = signal[1] <= macd[1] and signal > macd: linha rápida atravessa a linha lenta de cima para baixo

A mudança de cor do diagrama vertical determina a intensidade da tendência:

  • histA_IsUp = coluna de crescimento do diagrama vertical maior que 0, representando aumento de força de ascensão
  • histA_IsDown = coluna do diagrama vertical menor e maior que 0, representando diminuição da força ascendente
  • Compartilhe abaixo

Vantagens estratégicas

  1. Usar duas linhas de equilíbrio para determinar a direção da tendência a médio prazo, evitando ser perturbado pelo ruído do mercado a curto prazo

  2. Os indicadores MACD auxiliam na determinação de tendências e intensidade de curto prazo, aumentando a probabilidade de lucro

  3. A variação de cor do diagrama vertical determina o tamanho da intensidade, permitindo um melhor tempo de entrada

  4. Marcações de cores de fundo em pontos de cruzamento, à primeira vista

  5. Ciclo linear personalizável, adaptado a diferentes cenários de mercado

  6. Parâmetros MACD ajustáveis para otimizar o efeito do indicador

  7. Fornece vários tipos de confirmação de entrada: direção equidistante, cruzamento de indicadores, ruptura de forma

Risco estratégico

  1. A avaliação de dupla linha de equilíbrio mostra que a tendência média é insensível a flutuações de curto prazo e pode perder oportunidades de curto prazo

  2. Parâmetros MACD mal definidos, indicador de mau desempenho, sinalização errada

  3. Há uma certa cegueira apenas com a entrada da linha média e do sinal MACD

  4. Não contemplado mecanismo de retirada de perdas, risco de expansão de perdas

  5. Falta de gestão rigorosa de fundos e controlo de posições

Soluções possíveis:

  1. Combinação com outros indicadores para limitar a variação a curto prazo e controlar o risco

  2. Optimizar os parâmetros MACD para testar a eficácia em diferentes mercados

  3. Aumentar a forma, o Momento e outros fatores confirmam o sinal

  4. Estabelecer mecanismos de prevenção de perdas para evitar perdas excessivas

  5. Adicionar o módulo de gestão de fundos para controlar as posições individuais de acordo com o tamanho dos fundos

Direção de otimização da estratégia

  1. Testar combinações de parâmetros de linha média optimizadas para mais situações de mercado

  2. Tente diferentes tipos de linha média, como VWAP, linha média de faixa de rolamento, etc.

  3. Aumentar o volume de tráfego e evitar falsas brechas

  4. Indicadores como o RSI confirmam o excesso de compra e venda

  5. Estabelecer mecanismos de suspensão adequados, como suspensão por movimento e suspensão por vibração

  6. Adesão ao mecanismo de gestão de posições, que controla as posições individuais de acordo com o tamanho do capital

  7. Optimização de parâmetros em combinação com algoritmos de aprendizado de máquina

  8. Expansão da estratégia Universe, aprofundamento do portfólio de investimentos

Resumir

A estratégia integra o julgamento de tendências de dupla equilíbrio e o indicador de dinâmica MACD, adicionando características de forma, para construir uma estratégia de negociação de médio prazo relativamente estável. A principal vantagem está em capturar a direção da tendência principal e evitar a interferência do ruído do mercado de curto prazo.

Código-fonte da estratégia
/*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")