Estrategia de seguimiento de tendencias de doble cruce: sistema de negociación colaborativa de medias móviles de índices y MACD

EMA MACD DIF DEA TP SL RR
Fecha de creación: 2025-01-17 16:06:16 Última modificación: 2025-01-17 16:06:16
Copiar: 0 Número de Visitas: 374
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias de doble cruce: sistema de negociación colaborativa de medias móviles de índices y MACD

Descripción general

Esta estrategia es un sistema comercial de seguimiento de tendencias que combina los indicadores técnicos duales MACD y promedio móvil. Captura principalmente las tendencias del mercado a través de la intersección de la media móvil EMA9 y el precio, así como la intersección de la línea rápida (DIF) y la línea lenta (DEA) en el indicador MACD. Al mismo tiempo, la estrategia adopta un método de stop-loss adaptativo basado en las últimas 5 K líneas y utiliza una relación riesgo-rendimiento de 3,5 veces para establecer objetivos de ganancias, formando un sistema comercial completo.

Principio de estrategia

La lógica central de la estrategia se divide en dos direcciones: larga y corta:

  1. Condiciones largas: cuando el precio de cierre rompe la EMA9 de abajo hacia arriba, y la línea DIF del MACD cruza la línea DEA de abajo hacia arriba, el sistema envía una señal larga.
  2. Condiciones de venta corta: cuando el precio de cierre cae por debajo de la EMA9 de arriba a abajo, y la línea DIF del MACD cruza la línea DEA de arriba a abajo, el sistema envía una señal de venta corta.
  3. Gestión de riesgos:
    • El stop loss de las órdenes largas se establece por debajo del punto más bajo de las 5 K líneas anteriores
    • El stop loss para órdenes cortas se establece por encima del punto más alto de las 5 líneas K anteriores
    • El objetivo de beneficio es 3,5 veces la distancia del stop loss

Ventajas estratégicas

  1. Mecanismo de doble confirmación: a través de la cooperación coordinada del promedio móvil y el MACD, se pueden filtrar eficazmente las señales falsas y se puede mejorar la precisión de las transacciones.
  2. Stop loss adaptativo: el nivel de stop loss establecido en función de las fluctuaciones recientes de precios puede ajustar automáticamente la posición de protección según la volatilidad del mercado.
  3. Relación riesgo-rendimiento clara: un ajuste fijo de riesgo-rendimiento de 3,5 veces ayuda a lograr ganancias estables a largo plazo.
  4. La lógica de la estrategia es clara: las condiciones de entrada y salida son claras, fáciles de entender y ejecutar.
  5. Fuerte adaptabilidad: los parámetros se pueden ajustar según las diferentes condiciones del mercado.

Riesgo estratégico

  1. Riesgo de mercado volátil: en un mercado lateral y volátil pueden producirse con frecuencia falsas rupturas, lo que genera continuos stop loss.
  2. Riesgo de deslizamiento: en un mercado rápido, los precios reales de stop loss y de beneficio pueden desviarse de los esperados.
  3. Sensibilidad de los parámetros: Los ajustes del período de EMA y MACD tienen un gran impacto en el rendimiento de la estrategia.
  4. Dependencia de la tendencia: Las estrategias pueden tener un desempeño deficiente en entornos de mercado sin una tendencia clara.

Dirección de optimización de la estrategia

  1. Añadir filtro de tendencia: puedes introducir indicadores de tendencia con periodos más largos y abrir posiciones solo en la dirección de la tendencia principal.
  2. Múltiplo de riesgo dinámico: ajusta automáticamente la relación riesgo-rendimiento en función de la volatilidad del mercado.
  3. Filtro de tiempo: agregue un filtro de período de tiempo de negociación para evitar períodos de baja liquidez.
  4. Optimización de la gestión de la posición: la relación de posición se puede ajustar dinámicamente según la intensidad de la señal.
  5. Presentación del indicador de volatilidad: se utiliza para ajustar dinámicamente la distancia de stop loss.

Resumir

Esta estrategia construye un sistema comercial completo de seguimiento de tendencias a través de la doble confirmación de indicadores técnicos y una estricta gestión de riesgos. Aunque existe un cierto grado de dependencia del entorno del mercado, la estrategia demuestra buena adaptabilidad y estabilidad a través de una optimización razonable de parámetros y una gestión de riesgos. Las direcciones de optimización posteriores se centrarán principalmente en la precisión de la identificación de tendencias y la dinámica de la gestión de riesgos para mejorar el rendimiento general de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// =======================
// @version=6
strategy(title="MACD + EMA9 3 h",
     shorttitle="MACD+EMA9+StopTP_5candles",
     overlay=true,
     initial_capital=100000,    // Ajuste conforme desejar
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=200)      // Ajuste % de risco ou quantidade

// ----- Entradas (Inputs) -----
emaLen          = input.int(9,     "Período da EMA 9", minval=1)
macdFastLen     = input.int(12,    "Período MACD Rápido", minval=1)
macdSlowLen     = input.int(26,    "Período MACD Lento",  minval=1)
macdSignalLen   = input.int(9,     "Período MACD Signal", minval=1)
riskMultiplier  = input.float(3.5, "Fator de Multiplicação do Risco (TP)")
lookbackCandles = input.int(5,     "Quantidade de candles p/ Stop", minval=1)

// ----- Cálculo da EMA -----
ema9 = ta.ema(close, emaLen)

// ----- Cálculo do MACD -----
[macdLine, signalLine, histLine] = ta.macd(close, macdFastLen, macdSlowLen, macdSignalLen)
// DIF cruza DEA para cima ou para baixo
macdCrossover   = ta.crossover(macdLine, signalLine)   // DIF cruza DEA p/ cima
macdCrossunder  = ta.crossunder(macdLine, signalLine)  // DIF cruza DEA p/ baixo

// ----- Condições de Compra/Venda -----

// Compra quando:
// 1) Preço cruza EMA9 de baixo pra cima
// 2) MACD cruza a linha de sinal para cima
buySignal = ta.crossover(close, ema9) and macdCrossover

// Venda quando:
// 1) Preço cruza EMA9 de cima pra baixo
// 2) MACD cruza a linha de sinal para baixo
sellSignal = ta.crossunder(close, ema9) and macdCrossunder

// ----- Execução das ordens -----

// Identifica o menor e o maior preço dos últimos 'lookbackCandles' candles.
// A função ta.lowest() e ta.highest() consideram, por padrão, a barra atual também.
// Se você quiser EXCLUIR a barra atual, use low[1] / high[1] dentro do ta.lowest() / ta.highest().
lowestLow5  = ta.lowest(low, lookbackCandles)
highestHigh5= ta.highest(high, lookbackCandles)

// >>> Quando há sinal de COMPRA <<<
if (buySignal)
    // Fecha posição vendida, se existir
    strategy.close("Sell")
    // Entra comprado
    strategy.entry("Buy", strategy.long)
    
    // STOP: abaixo do menor preço dos últimos 5 candles
    stopPrice = lowestLow5
    // Risco = (preço de entrada) - (stop)
    // Note que strategy.position_avg_price só fica disponível a partir da barra seguinte.
    // Por isso, o exit costuma funcionar corretamente apenas na barra seguinte.
    // Para fins de teste, podemos usar 'close' como proxy do "entry" (ou aceitar essa limitação).
    // A forma "correta" de usar strategy.position_avg_price seria via calc_on_order_fills = true,
    // mas isso pode exigir algumas configurações adicionais.
    risk = strategy.position_avg_price - stopPrice
    
    // Take Profit = entrada + 2,5 * risco
    takeProfitPrice = strategy.position_avg_price + riskMultiplier * risk

    // Registra a saída (stop e alvo) vinculada à posição "Buy"
    strategy.exit("Exit Buy", "Buy", stop=stopPrice, limit=takeProfitPrice)

// >>> Quando há sinal de VENDA <<<
if (sellSignal)
    // Fecha posição comprada, se existir
    strategy.close("Buy")
    // Entra vendido
    strategy.entry("Sell", strategy.short)
    
    // STOP: acima do maior preço dos últimos 5 candles
    stopPrice = highestHigh5
    // Risco = (stop) - (preço de entrada)
    risk = stopPrice - strategy.position_avg_price
    
    // Take Profit = entrada - 2,5 * risco
    takeProfitPrice = strategy.position_avg_price - riskMultiplier * risk

    // Registra a saída (stop e alvo) vinculada à posição "Sell"
    strategy.exit("Exit Sell", "Sell", stop=stopPrice, limit=takeProfitPrice)

// ----- Plotagens visuais -----
plot(ema9, color=color.orange, linewidth=2, title="EMA 9")

plot(macdLine,       color=color.new(color.blue, 0),   title="MACD")
plot(signalLine,     color=color.new(color.red, 0),    title="Signal")
plot(histLine,       color=color.new(color.purple, 0), style=plot.style_histogram, title="Histogram")

// Só para auxiliar na visualização, vamos plotar a linha do lowestLow5 e highestHigh5
plot(lowestLow5,    color=color.new(color.lime, 70),  style=plot.style_line, title="Lowest 5 bars")
plot(highestHigh5,  color=color.new(color.fuchsia,70),style=plot.style_line, title="Highest 5 bars")