Estrategia cuantitativa de seguimiento de tendencias MACD dinámicas de múltiples niveles combinada con un sistema de análisis de extensión de posiciones máximas y mínimas de 52 semanas

MACD MA EMA SMA RSI
Fecha de creación: 2024-12-27 14:27:51 Última modificación: 2024-12-27 14:27:51
Copiar: 0 Número de Visitas: 94
1
Seguir
1166
Seguidores

Estrategia cuantitativa de seguimiento de tendencias MACD dinámicas de múltiples niveles combinada con un sistema de análisis de extensión de posiciones máximas y mínimas de 52 semanas

Descripción general

Esta estrategia es un sistema de comercio cuantitativo que combina la señal de cruce de MACD de varios niveles de tiempo con el nivel de presión de soporte dinámico de 52 semanas de alto y bajo. La estrategia confirma las señales de negociación mediante el cruce de los indicadores MACD de dos períodos de tiempo, el horizonte y el horizonte solar, y utiliza la línea de presión de soporte dinámico de 52 semanas de alto y bajo para ayudar a determinar el movimiento del mercado, lo que permite una decisión de negociación más sólida.

Principio de estrategia

La estrategia se basa principalmente en la siguiente lógica central:

  1. Las señales de entrada son confirmadas por el horno de oro MACD de la línea de circunferencia y el horno de oro MACD de la línea de sol, lo que requiere que los indicadores MACD de ambos períodos de tiempo aparezcan en la señal.
  2. La señal de salida es activada por el diagrama MACD de la horquilla muerta. Una vez que el diagrama MACD de la horquilla muerta aparece, la salida de la posición se elimina.
  3. El stop loss dinámico se establece en la posición de precio mínimo del día en que se activa la señal de salida.
  4. La línea de 52 semanas de alto y bajo se genera dinámicamente en base a la base de cálculo elegida por el usuario (precio más bajo o precio de cierre más alto) y se extiende hacia la derecha para formar un punto de referencia importante.
  5. La estrategia utiliza un 5% de gestión de posiciones, con un costo de transacción de una unidad monetaria.

Ventajas estratégicas

  1. Confirmación de múltiples marcos de tiempo: filtra brechas falsas a través de resonancias de señales MACD en dos niveles de la línea de circunferencia y la línea de sol, mejorando la precisión de las transacciones.
  2. La presión de soporte dinámico: la línea de 52 semanas de alza y baja proporciona una referencia importante al precio psicológico del mercado que ayuda a juzgar la fuerza de la tendencia.
  3. Control de riesgos: Se utiliza un mecanismo de stop loss dinámico para ajustar las posiciones de stop loss a la fluctuación del mercado a tiempo para proteger los beneficios.
  4. Alta visibilidad: Muestra precios y señales clave a través de una interfaz gráfica clara, para que los operadores puedan entender y operar fácilmente.
  5. Sistematización de las transacciones: Las estrictas reglas de entrada y salida evitan la interferencia emocional y mejoran la objetividad de las transacciones.

Riesgo estratégico

  1. No se aplica en mercados de oscilación: en mercados de oscilación horizontal, los cruces MACD frecuentes pueden causar demasiadas señales falsas.
  2. Riesgo de retraso: El indicador MACD tiene un cierto retraso en sí mismo y puede perder el mejor momento de entrada.
  3. Riesgo de gestión de fondos: las posiciones de proporción fija pueden no ser lo suficientemente flexibles en ciertos entornos de mercado.
  4. Riesgo de brecha en el mercado: en caso de un gran salto, el precio de parada real puede ser mucho más bajo de lo esperado.
  5. Riesgo de optimización de parámetros: la optimización excesiva de los parámetros puede causar problemas de sobreajuste.

Dirección de optimización de la estrategia

  1. Introducción de análisis de relación precio-cantidad: Considere la confirmación de la cantidad de transacción adicional sobre la base de las señales MACD existentes.
  2. Optimización de la gestión de posiciones: diseño de un mecanismo de gestión de posiciones más flexible, adaptado a la dinámica de la volatilidad del mercado.
  3. Mecanismos de detención de pérdidas mejorados: se puede considerar la posibilidad de agregar detención móvil o detención dinámica basada en ATR.
  4. Aumentar el filtro de entornos de mercado: Introducir indicadores de intensidad de tendencia para abrir posiciones en mercados de fuerte tendencia.
  5. Desarrollo de mecanismos de filtración de señales: diseño de condiciones de confirmación de señales más estrictas para reducir las falsas señales.

Resumir

La estrategia construye un sistema de comercio de seguimiento de tendencias completo mediante la combinación de señales de cruce de múltiples marcos temporales MACD con líneas de presión de soporte dinámico de 52 semanas de altos y bajos. La ventaja de la estrategia reside en la fiabilidad de la confirmación de señales y la integridad del control de riesgos, pero aún se debe tener en cuenta el riesgo de mercados convulsivos y de rezago.

Código Fuente de la Estrategia
/*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)