Estrategia comercial de conversión de tendencia de impacto de valor neto de volumen de promedios móviles múltiples

EMA WMA SMA HMA ROC NVO MA TP SL
Fecha de creación: 2025-02-24 10:05:03 Última modificación: 2025-02-27 16:46:30
Copiar: 2 Número de Visitas: 352
2
Seguir
319
Seguidores

Estrategia comercial de conversión de tendencia de impacto de valor neto de volumen de promedios móviles múltiples Estrategia comercial de conversión de tendencia de impacto de valor neto de volumen de promedios móviles múltiples

Descripción general

La estrategia es un sistema de seguimiento de tendencias basado en volúmenes de transacciones y cambios de precios, que predice la dirección del mercado mediante el cálculo de un indicador de volatilidad de volumen de transacciones neto (NVO). La estrategia combina varios tipos de medias móviles (EMA, WMA, SMA, HMA) para determinar la tendencia del mercado mediante la comparación de la relación de la posición del indicador de volatilidad con su línea de superposición EMA, y para realizar operaciones en el momento adecuado.

Principio de estrategia

El núcleo de la estrategia es determinar el sentimiento del mercado mediante el cálculo de los valores de oscilación del volumen de transacciones netas diarias. Los pasos de cálculo específicos son los siguientes:

  1. Cálculo de la multiplicidad del intervalo de precios: un múltiplo entre 0 y 1 basado en el precio más alto, más bajo y el precio de cierre del día
  2. Calcula el volumen de transacciones que ha subido y bajado de manera efectiva: peso en función de la dirección de los cambios en los precios y multiplicado por el volumen de transacciones
  3. Cálculo del volumen neto de transacciones: aumento efectivo de las transacciones menos la disminución efectiva de las transacciones
  4. Promedio móvil seleccionado por la aplicación: tratamiento suave de los datos de volumen de negocio neto
  5. Cálculo de la línea de superposición de EMA: una línea de referencia para juzgar tendencias
  6. Cálculo de la tasa de cambio (ROC): se utiliza para determinar la variación de la intensidad de la tendencia

La generación de señales de negociación se basa en las siguientes reglas:

  • Hacer múltiples condiciones: colocar una línea de superposición de EMA en el indicador de temblor
  • Condiciones de vacío: atravesar la línea de superposición EMA bajo el indicador de temblor
  • Detención de pérdidas: Detención de precios basada en porcentajes
  • Detener: Detener el precio basado en el porcentaje

Ventajas estratégicas

  1. Análisis multidimensional: información de mercado que combina las tres dimensiones de precio, volumen de negocio y cambio de tendencia
  2. Alta flexibilidad: soporte para varios tipos de medias móviles que se pueden ajustar según las características de los diferentes mercados
  3. Mejor gestión de riesgos: incluye un mecanismo de suspensión de pérdidas que permite controlar los riesgos de manera efectiva
  4. Fuerte visualización: muestra cambios en la intensidad de la tendencia a través de gráficos rectangulares para comprender el estado del mercado
  5. Adaptabilidad: diseño parametrizado para adaptarse a diferentes entornos de mercado y variedades de transacción

Riesgo estratégico

  1. Riesgo de reversión de tendencia: falsas señales frecuentes en mercados convulsionados
  2. Riesgo de retraso: las medias móviles tienen un cierto retraso en sí mismas, lo que puede causar que los tiempos de entrada y salida no sean lo suficientemente ideales
  3. Sensibilidad de los parámetros: diferentes combinaciones de parámetros pueden generar grandes diferencias en el rendimiento de la estrategia.
  4. Dependencia del entorno del mercado: puede tener un rendimiento bajo ciertos entornos del mercado
  5. Limitaciones tecnológicas: solo se basan en indicadores técnicos y no tienen en cuenta los factores fundamentales

Sugerencias para el control de riesgos:

  • Se recomienda la optimización de parámetros en diferentes entornos de mercado
  • Se puede combinar con otros indicadores técnicos para la confirmación de señales
  • Ajuste adecuado de los parámetros de stop loss para adaptarse a las diferentes volatilidades del mercado

Dirección de optimización de la estrategia

  1. Mecanismo de confirmación de señales optimizado:

    • Aumento de las condiciones de confirmación de la entrega
    • Agregar filtro de fuerza de tendencia
    • Introducción de un mecanismo adaptativo a la volatilidad
  2. Optimización de la gestión de riesgos:

    • Implementación de un mecanismo dinámico de stop loss
    • Añadir un módulo de gestión de fondos
    • Introducción de un mecanismo de construcción y reducción de almacenes por lotes
  3. Optimización de parámetros:

    • Desarrollo de mecanismos de ajuste de parámetros de adaptación
    • Realizar el cambio de parámetros basado en el entorno de mercado
    • Agrega un modelo de aprendizaje automático para la optimización de parámetros

Resumir

La estrategia se basa en el análisis integral de volúmenes de transacción y datos de precios para construir un sistema de comercio de seguimiento de tendencias más completo. La principal característica de la estrategia es que combina varios indicadores técnicos y ofrece opciones de configuración de parámetros flexibles.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("EMA-Based Net Volume Oscillator with Trend Change", shorttitle="NVO Trend Change", overlay=false, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input parameters
maType = input.string("WMA", "Moving Average Type", options=["WMA", "EMA", "SMA", "HMA"])
maLength = input.int(21, "MA Length", minval=1)
emaOverlayLength = input.int(9, "EMA Overlay Length", minval=1)
oscillatorMultiplier = input.float(1.0, "Oscillator Multiplier", minval=0.1, step=0.1)
showHistogram = input.bool(true, "Show Histogram")

stopLossPerc = input.float(1.0, "Stop Loss (%)", tooltip="Set 999 to disable")
takeProfitPerc = input.float(2.0, "Take Profit (%)", tooltip="Set 999 to disable")

// Calculate Net Volume Oscillator
priceRange = high - low
multiplier = priceRange > 0 ? (close - low) / priceRange : 0.5
var float effectiveUpVol = 0.0
var float effectiveDownVol = 0.0

if close > close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else if close < close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else
    effectiveUpVol := 0.0
    effectiveDownVol := 0.0

netVolume = effectiveUpVol - effectiveDownVol
dailyNetOscillator = volume > 0 ? (netVolume / volume) * 100 : 0

// Apply selected Moving Average
var float oscillator = na
if maType == "WMA"
    oscillator := ta.wma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "EMA"
    oscillator := ta.ema(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "SMA"
    oscillator := ta.sma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "HMA"
    oscillator := ta.hma(dailyNetOscillator, maLength) * oscillatorMultiplier

// EMA Overlay
emaOverlay = ta.ema(oscillator, emaOverlayLength)

// Rate of Change (ROC) for Oscillator
roc = ta.roc(oscillator, 1)  // 1-period rate of change

// Trading logic
longCondition = oscillator > emaOverlay
shortCondition = oscillator < emaOverlay

// Exit conditions
exitLong = oscillator < emaOverlay and strategy.position_size > 0
exitShort = oscillator > emaOverlay and strategy.position_size < 0

// Execute trades
if longCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
if exitLong
    strategy.close("Long")

if shortCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)
if exitShort
    strategy.close("Short")

// Stop Loss and Take Profit
stopLossLong = stopLossPerc != 999 ? strategy.position_avg_price * (1 - stopLossPerc/100) : na
takeProfitLong = takeProfitPerc != 999 ? strategy.position_avg_price * (1 + takeProfitPerc/100) : na

stopLossShort = stopLossPerc != 999 ? strategy.position_avg_price * (1 + stopLossPerc/100) : na
takeProfitShort = takeProfitPerc != 999 ? strategy.position_avg_price * (1 - takeProfitPerc/100) : na

if (not na(stopLossLong) and not na(takeProfitLong) and strategy.position_size > 0)
    strategy.exit("Long SL/TP", "Long", stop=stopLossLong, limit=takeProfitLong)

if (not na(stopLossShort) and not na(takeProfitShort) and strategy.position_size < 0)
    strategy.exit("Short SL/TP", "Short", stop=stopLossShort, limit=takeProfitShort)

// Plotting
plot(oscillator, "Net Volume Oscillator", color.blue)
plot(emaOverlay, "EMA Overlay", color.orange)
hline(0, "Zero Line", color.gray)

// Histogram with Trend Change Visualization
var color histogramColor = na
if oscillator > 0
    histogramColor := roc >= 0 ? color.new(color.green, 70) : color.new(color.lime, 70)  // Green for bullish, light green for weakening
else if oscillator < 0
    histogramColor := roc >= 0 ? color.new(color.red, 70) : color.new(color.maroon, 70)  // Red for bearish, light red for weakening

plot(showHistogram ? oscillator : na, style=plot.style_histogram, color=histogramColor, title="Histogram")