Estrategia de seguimiento de tendencias basada en la puntuación Z

EMA
Fecha de creación: 2024-04-29 17:03:15 Última modificación: 2024-04-29 17:03:15
Copiar: 0 Número de Visitas: 1206
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en la puntuación Z

Descripción general

La estrategia de seguimiento de tendencias basado en valores z utiliza el valor z, un indicador estadístico, para capturar oportunidades de tendencia mediante la medición de la diferencia entre los precios y sus medias móviles, y la diferencia estándar como una escala de unificación. La estrategia es conocida por su sencillez y eficacia, especialmente en mercados donde la movilidad de los precios suele regresar a la par. A diferencia de los sistemas complejos que dependen de varios indicadores, la estrategia de tendencias de valores z se centra en cambios de precios claros y estadísticamente significativos, lo que es ideal para los comerciantes que prefieren un método de datos precisos.

Principio de estrategia

El núcleo de esta estrategia es el cálculo del valor Z. El valor Z se obtiene calculando la diferencia entre el precio actual y el índice de precios de la longitud definida por el usuario, el promedio móvil (EMA), y luego se divide la diferencia por el estándar de precios de la misma longitud:

z = (x - μ) / σ

Donde, x es el precio actual, μ es el promedio de la EMA, y σ es la diferencia estándar.

Las señales de negociación se generan basándose en el cruce de los valores Z de los umbrales predefinidos:

  • Entrada múltiple: cuando el valor de Z cruza el umbral positivo hacia arriba.
  • Aparición múltiple: cuando el valor de Z cruza el umbral negativo hacia abajo.
  • Ingreso sin cabeza: cuando el valor de Z cruza el umbral negativo hacia abajo.
  • Salida en blanco: cuando el valor de Z cruza el umbral positivo hacia arriba.

Ventajas estratégicas

  1. Simple y eficaz: la estrategia depende de pocos parámetros, es fácil de entender e implementar, y es muy eficaz para capturar oportunidades de tendencia.
  2. Bases estadísticas: Los valores Z son una herramienta estadística bien desarrollada que proporciona una sólida base teórica para la estrategia.
  3. Adaptabilidad: la estrategia se adapta con flexibilidad a diferentes estilos de negociación y entornos de mercado, ajustando parámetros como el umbral, el EMA y el ciclo de cálculo de la diferencia estándar.
  4. Señales claras: Las señales de negociación basadas en Z-valores que atraviesan los umbrales son simples y claras, lo que facilita la toma de decisiones y la ejecución rápidas.

Riesgo estratégico

  1. Parámetros sensibles: la configuración inadecuada de los parámetros (por ejemplo, un umbral demasiado alto o demasiado bajo) puede causar fallas en la señal de negociación, oportunidades perdidas o pérdidas.
  2. Identificación de tendencias: En una oscilación o reajuste del mercado, la estrategia puede enfrentarse a frecuentes falsas señales y funcionar mal.
  3. Efecto de retraso: Como estrategia de seguimiento de tendencias, sus señales de entrada y salida tienen un cierto retraso y pueden perder el mejor momento.

Estos riesgos pueden ser controlados y mitigados mediante análisis de mercado continuos, optimización de parámetros y ejecución prudente sobre la base de retroalimentación.

Dirección de optimización de la estrategia

  1. Términos dinámicos: Introducción de valores dinámicos relacionados con la volatilidad, que se pueden adaptar de manera efectiva a diferentes condiciones del mercado, mejorando la calidad de la señal.
  2. Indicadores combinados: combinación de otros indicadores técnicos como RSI, MACD, etc., para una segunda confirmación de la señal de negociación, para mejorar la fiabilidad.
  3. Gestión de posiciones: Incorpora mecanismos de control de posiciones como ATR, para reducir las posiciones a tiempo en mercados convulsos y aumentar las posiciones a tiempo en mercados en tendencia, para optimizar la relación riesgo-ganancias.
  4. Escala de tiempo múltiple: calcula los valores Z a través de varias escalas de tiempo, captura tendencias a diferentes niveles y enriquece las dimensiones de la estrategia.

Resumir

La estrategia de seguimiento de tendencias basada en valores Z, con sus características de sencillez, robustez y flexibilidad, ofrece una perspectiva única para capturar oportunidades de tendencia. A través de la configuración de parámetros razonables, la gestión de riesgos prudente y la optimización continua, la estrategia tiene el potencial de ser una gran ayuda para los comerciantes cuantitativos para avanzar con firmeza en mercados cambiantes.

Código Fuente de la Estrategia
/*backtest
start: 2023-04-23 00:00:00
end: 2024-04-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

// This strategy employs a statistical approach by using a Z-score, which measures the deviation of the price from its moving average normalized by the standard deviation.
// Very simple and effective approach

//@version=5
strategy('Price Based Z-Trend - strategy [presentTrading]',shorttitle = 'Price Based Z-Trend - strategy [presentTrading]', overlay=false, precision=3, 
         commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, 
         currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000)

// User-definable parameters for the Z-score calculation and bar coloring
tradeDirection = input.string("Both", "Trading Direction", options=["Long", "Short", "Both"]) // User selects trading direction

priceDeviationLength = input.int(100, "Standard Deviation Length", step=1) // Length for standard deviation calculation
priceAverageLength = input.int(100, "Average Length", step=1) // Length for moving average calculation
Threshold = input.float(1, "Threshold", step=0.1) // Number of standard deviations for Z-score threshold
priceBar = input(title='Bar Color', defval=true) // Toggle for coloring price bars based on Z-score


// Z-score calculation based on user input for the price source (typically the closing price)
priceSource = input(close, title="Source")
priceZScore = (priceSource - ta.ema(priceSource, priceAverageLength)) / ta.stdev(priceSource, priceDeviationLength) // Z-score calculation

// Conditions for entering and exiting trades based on Z-score crossovers
priceLongCondition = ta.crossover(priceZScore, Threshold) // Condition to enter long positions
priceExitLongCondition = ta.crossunder(priceZScore, -Threshold) // Condition to exit long positions

longEntryCondition = ta.crossover(priceZScore, Threshold)
longExitCondition = ta.crossunder(priceZScore, -Threshold)
shortEntryCondition = ta.crossunder(priceZScore, -Threshold)
shortExitCondition = ta.crossover(priceZScore, Threshold)


// Strategy conditions and execution based on Z-score crossovers and trading direction
if (tradeDirection == "Long" or tradeDirection == "Both") and longEntryCondition
    strategy.entry("Long", strategy.long) // Enter a long position

if (tradeDirection == "Long" or tradeDirection == "Both") and longExitCondition
    strategy.close("Long") // Close the long position

if (tradeDirection == "Short" or tradeDirection == "Both") and shortEntryCondition
    strategy.entry("Short", strategy.short) // Enter a short position

if (tradeDirection == "Short" or tradeDirection == "Both") and shortExitCondition
    strategy.close("Short") // Close the short position


// Dynamic Thresholds Visualization using 'plot'
plot(Threshold, "Dynamic Entry Threshold", color=color.new(color.green, 50))
plot(-Threshold, "Dynamic Short Entry Threshold", color=color.new(color.red, 50))


// Color-coding Z-Score
priceZScoreColor = priceZScore > Threshold ? color.green : 
              priceZScore < -Threshold ? color.red : color.blue
plot(priceZScore, "Z-Score", color=priceZScoreColor)

// Lines
hline(0, color=color.rgb(255, 255, 255, 50), linestyle=hline.style_dotted)

// Bar Color
priceBarColor = priceZScore > Threshold ? color.green :
           priceZScore > 0 ? color.lime :
           priceZScore < Threshold ? color.maroon :
           priceZScore < 0 ? color.red : color.black
barcolor(priceBar ? priceBarColor : na)