Estratégia quantitativa de rastreamento de tendência MACD dinâmica multinível combinada com sistema de análise de extensão de posição máxima e mínima de 52 semanas

MACD MA EMA SMA RSI
Data de criação: 2024-12-27 14:27:51 última modificação: 2024-12-27 14:27:51
cópia: 0 Cliques: 427
1
focar em
1617
Seguidores

Estratégia quantitativa de rastreamento de tendência MACD dinâmica multinível combinada com sistema de análise de extensão de posição máxima e mínima de 52 semanas

Visão geral

Esta estratégia é um sistema de negociação quantitativa que combina o sinal de cruzamento do MACD de vários níveis de tempo com o nível de pressão de suporte dinâmico de 52 semanas de alta e baixa. A estratégia confirma os sinais de negociação através do cruzamento dos indicadores MACD de dois períodos de tempo, o dia e o dia, e usa a linha de pressão de suporte dinâmico de 52 semanas de alta e baixa para auxiliar na tomada de decisões de negociação mais robustas.

Princípio da estratégia

A estratégia baseia-se principalmente na seguinte lógica central:

  1. Os sinais de entrada são confirmados por um forquilho MACD circular e um forquilho MACD solar, exigindo que os indicadores MACD de ambos os períodos de tempo apareçam.
  2. O sinal de saída é acionado pelo MACD de linha diurna, e a saída de equilíbrio ocorre quando o MACD de linha diurna aparece.
  3. O stop loss dinâmico é definido como a posição do preço mais baixo no dia em que o sinal de saída é acionado.
  4. A linha de 52 semanas de alta e baixa é gerada dinamicamente com base em uma base de cálculo escolhida pelo usuário (preço máximo mínimo ou preço de fechamento) e se estende para a direita formando um ponto de referência importante.
  5. A estratégia utiliza uma gestão de posições de 5% e um custo de transação de 1 unidade monetária.

Vantagens estratégicas

  1. Confirmação de múltiplos quadros horários: filtração de brechas falsas através da ressonância de sinais MACD em dois níveis de linha de circunferência e linha de sol, aumentando a precisão da negociação.
  2. A pressão do suporte dinâmico: a linha de 52 semanas de alta e baixa fornece uma referência importante para a psicologia dos preços do mercado, ajudando a julgar a força da tendência.
  3. Controle de risco perfeito: o mecanismo de parada de perda dinâmica é adotado, ajustando a posição de parada de perda em tempo hábil com as flutuações do mercado, com o objetivo de proteger os lucros.
  4. Alta visibilidade: apresenta preços e sinais críticos através de uma interface gráfica clara, facilitando a compreensão e a operação dos comerciantes.
  5. Sistema de negociação: regras rígidas de entrada e saída evitam interferência emocional e aumentam a objetividade das negociações.

Risco estratégico

  1. Mercado de oscilação não é válido: em mercados de oscilação horizontal, os frequentes cruzamentos do MACD podem levar a um excesso de falsos sinais.
  2. Risco de atraso: o MACD tem um atraso em si e pode perder o melhor momento de entrada.
  3. Risco de gestão de fundos: posições de proporção fixa podem não ser suficientemente flexíveis em certos cenários de mercado.
  4. Risco de brecha de mercado: em caso de um grande salto, o preço de parada real pode ser muito menor do que o esperado.
  5. Risco de otimização de parâmetros: o excesso de otimização de parâmetros pode levar a problemas de sobre-conformidade.

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

  1. Introdução de análise de relação preço-quantidade: Considere a confirmação de volume de transação adicional com base nos sinais MACD existentes.
  2. Optimizar o gerenciamento de posições: projetar um mecanismo de gerenciamento de posições mais flexível, ajustado à dinâmica da volatilidade do mercado.
  3. Melhorar o mecanismo de stop loss: pode ser considerado o aumento do stop loss móvel ou stop loss dinâmico baseado no ATR.
  4. Aumentar o filtro do cenário de mercado: introdução de indicadores de intensidade de tendência para abrir posições em mercados de forte tendência.
  5. Desenvolvimento de mecanismos de filtragem de sinais: conceber condições mais rigorosas de confirmação de sinais, reduzindo os falsos.

Resumir

A estratégia constrói um sistema de negociação de acompanhamento de tendências completo, combinando sinais de cruzamento de MACD de vários quadros temporais com uma linha de pressão de suporte dinâmico de 52 semanas de alta e baixa. A vantagem da estratégia reside na confiabilidade da confirmação de sinais e na integridade do controle de risco, mas ainda é necessário prestar atenção ao risco de mercados turbulentos e de atraso.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true)

// === MACD SETTINGS ===
fastLength = 12
slowLength = 26
signalSmoothing = 9

// Funzione per ottenere i valori MACD
getMACD(source, timeframe) =>
    [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)
    [macdLine, signalLine]

// Valori MACD Settimanali
[macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on)

// Valori MACD Giornalieri
[macdDaily, signalDaily] = getMACD(close, "D")

// Variabile per lo stop loss
var float lowOfSignalCandle = na

// Condizione per l'ingresso
longConditionWeekly = ta.crossover(macdWeekly, signalWeekly)
exitConditionDaily = ta.crossunder(macdDaily, signalDaily)

// Imposta Stop Loss sulla candela giornaliera
if (exitConditionDaily)
    lowOfSignalCandle := low

// Condizione di ingresso nel trade
enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily)

if (enterTradeCondition)
    strategy.entry("MACD Long", strategy.long)

if (not na(lowOfSignalCandle))
    strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle)

if (strategy.position_size == 0)
    lowOfSignalCandle := na

// // === 52 WEEK HIGH/LOW SETTINGS ===
// // Input per selezionare tra Highs/Lows o Close
// high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"])

// // Calcolo dei valori delle 52 settimane
// weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on)
// weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on)
// weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on)
// weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on)

// // Selezione dei valori in base all'input
// high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc
// low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc

// // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE ===
// var line highLine = na
// var line lowLine = na

// // Linea Orizzontale per il 52W High
// if (na(highLine))
//     highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(highLine, high_plot)
//     line.set_y2(highLine, high_plot)

// // Linea Orizzontale per il 52W Low
// if (na(lowLine))
//     lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(lowLine, low_plot)
//     line.set_y2(lowLine, low_plot)

// // Etichette per le linee orizzontali
// var label highLabel = na
// var label lowLabel = na

// if (na(highLabel))
//     highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small)
// else
//     label.set_y(highLabel, high_plot)
//     label.set_x(highLabel, bar_index)

// if (na(lowLabel))
//     lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small)
// else
//     label.set_y(lowLabel, low_plot)
//     label.set_x(lowLabel, bar_index)

// // Tracciamento delle Linee Estese
// plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr)
// plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)