
La estrategia de parada dinámica de regreso al promedio de los precios pares es una estrategia de negociación cuantitativa basada en principios estadísticos, que utiliza principalmente las características de los precios que fluctúan en torno a sus promedios. La estrategia convierte los precios en forma de pares y luego calcula su Z-score (el múltiplo de la diferencia estándar) para medir el grado de desviación de los precios del promedio. Cuando el Z-score alcanza un determinado umbral, la estrategia considera que el mercado está sobrecomprado o sobrevendido y opera sobre la base de la devolución esperada de los precios.
El principio central de esta estrategia se basa en la teoría de la regresión de la media y las características estadísticas de los precios de los pares. Los pasos concretos para su implementación son:
Primero, la estrategia convierte el precio de cierre en una forma de logaritmolog_price = math.log(close)Esto ayuda a transformar los cambios de multiplicación en cambios de suma, lo que hace que los cambios de precio se ajusten más a la distribución normal.
Luego, basado en la ventana de rodaje establecida (la de 7 períodos por defecto), se calcula el promedio móvil del precio de la pareja (rolling_mean) y la diferencia estándarrolling_std)。
Utilice estas estadísticas para calcular el Z-score del precio actual del parámetro:rolling_z_score = (log_price - rolling_mean) / rolling_stdEste valor representa el número de veces la diferencia estándar entre el precio actual y el desvío del promedio.
Los requisitos de admisión son los siguientes:
El objetivo de parada se establece como una media móvil de los precios de los pares en forma de índice:take_profit_price = math.exp(rolling_mean)Esto significa que el objetivo de la estrategia es que el precio vuelva a su promedio estadístico.
El mecanismo de suspensión de pérdidas dinámicas es una innovación clave de la estrategia:
La lógica de salida incluye dos situaciones:
Estadísticas básicasLa estrategia se basa en sólidos principios estadísticos y utiliza un Z-score para medir la desviación de los precios, proporcionando una señal de entrada y salida objetiva.
Conversión al precio numérico: El uso de precios pares en lugar de precios primarios para el cálculo hace que los cambios de precios se ajusten más a la distribución normal, lo que mejora la eficacia de los indicadores estadísticos.
Gestión de riesgos dinámicosEl punto más destacado de la estrategia es su mecanismo de stop loss dinámico, capaz de ajustar automáticamente el nivel de stop loss según los cambios en la volatilidad del mercado, permitiendo suficiente espacio de negociación mientras protege el capital.
Transacciones de dos víasLas estrategias que soportan tanto el comercio de divisas como el comercio de divisas abiertas son capaces de buscar oportunidades en diversos entornos de mercado.
El promedio como objetivo: El uso de la media estadística como objetivo de detención, en consonancia con la base teórica de la regresión de la media, mejora la racionalidad de la detención.
Parámetros ajustablesLa estrategia ofrece una variedad de parámetros ajustables, incluyendo ventanas de rotación, puntuación de entrada Z y puntuación de parada Z, lo que permite a los operadores adaptarse a diferentes mercados y preferencias de riesgo personales.
Riesgo de la hipótesis de regreso a la mediaLa hipótesis central de la estrategia es que el precio regresará a su promedio estadístico, pero en un mercado de tendencia o un mercado de cambios estructurales, esta hipótesis puede fallar y causar pérdidas a largo plazo. Solución: Se puede agregar un filtro de tendencia para suspender la negociación en un mercado de tendencia fuerte.
El puntaje Z es muy sensible.En un mercado de baja volatilidad, incluso una pequeña fluctuación en el precio puede generar grandes cambios en el Z-score y desencadenar señales de negociación innecesarias. Solución: establecer un umbral de mínima volatilidad o ajustar el umbral de entrada en un entorno de baja volatilidad.
Sensibilidad a la longitud de la ventanaLa función de la estrategia es muy sensible a los parámetros de la longitud de la ventana de rodaje, y una elección incorrecta puede conducir a una sobre-tratación o a una oportunidad perdida. Solución: Se puede encontrar el parámetro óptimo mediante la retroalimentación de diferentes longitudes de ventana o mediante el uso de longitudes de ventana adaptadas.
Riesgo de pérdida de datosEn el inicio de la negociación, la falta de suficientes datos históricos para calcular las medias móviles y las diferencias estándar puede causar inestabilidad de la señal. Solución: Asegúrese de tener un período de precalentamiento suficiente antes de calcular el indicador.
Riesgo de la estrategia de ajuste de pérdidas: El mecanismo de parada dinámica, aunque es innovador, también puede causar un ajuste excesivo del punto de parada en caso de cambios bruscos en la volatilidad. Solución: Se puede establecer un límite de la amplitud máxima del ajuste de parada para evitar el ajuste excesivo.
Adapta la longitud de la ventanaLas estrategias actuales utilizan una longitud fija de la ventana de rotación (de 7 ciclos por defecto) para calcular los indicadores estadísticos. Se puede considerar la implementación de una longitud de ventana de adaptación, que ajusta automáticamente el tamaño de la ventana según los cambios periódicos en el mercado. De esta manera, se puede capturar mejor las oportunidades de retorno a la media en diferentes escalas de tiempo, lo que mejora la adaptabilidad de las estrategias.
El filtro de tendenciasLa inclusión de un mecanismo de determinación de tendencias, la suspensión o ajuste de los parámetros de la estrategia en un mercado de fuerte tendencia, la aplicación de una estrategia de retorno a la media sólo en un mercado horizontal o invertido. Esto se puede lograr mediante la inclusión de medias móviles a largo plazo o indicadores de tendencia como el ADX, para evitar pérdidas frecuentes en un mercado de tendencia unilateral.
Análisis de marcos de tiempo múltiples: Integración de señales de puntuación Z de varios marcos de tiempo para formar una decisión de entrada y salida más completa. Por ejemplo, se puede confirmar la oportunidad de retorno promedio en marcos de tiempo más grandes y luego buscar puntos de entrada precisos en marcos de tiempo más pequeños, lo que mejora la ganancia y el riesgo de retorno.
Optimización de las paradasLa estrategia actual utiliza el promedio simple como objetivo de parada. Se puede considerar la implementación de mecanismos de parada dinámicos, como establecer objetivos de parada basados en la estructura del mercado o la relación de riesgo-retorno asociada a la parada, o implementar una estrategia de parada parcial, que bloquea las ganancias gradualmente a medida que el precio se mueve en una dirección favorable.
Peso de las fluctuacionesConsidere la inclusión de un mecanismo de ponderación de la tasa de fluctuación en el cálculo de la puntuación Z, dando mayor peso a los datos de periodos más estables, lo que puede reducir la interferencia de las fluctuaciones extremas en la generación de señales y mejorar la calidad de la señal.
Integración del aprendizaje automáticoConsidere la introducción de algoritmos de aprendizaje automático para optimizar los umbrales de entrada y salida, que pueden predecir los umbrales óptimos de Z-score y los parámetros de stop loss dinámicos basados en modelos de entrenamiento de datos históricos, para mejorar la adaptabilidad y el rendimiento general de las estrategias.
La estrategia de stop loss dinámico de regreso al promedio de los precios de los pares es una estrategia de negociación cuantitativa basada en principios estadísticos que identifica los estados de sobrecompra y sobreventa en el mercado mediante el cálculo de la puntuación Z del precio de los pares, y obtiene ganancias cuando se espera que los precios regresen al promedio. La innovación central de la estrategia reside en su mecanismo de stop loss dinámico, que puede ajustar automáticamente los parámetros de riesgo según los cambios en la volatilidad del mercado, lo que proporciona una mejor gestión del riesgo.
Aunque la estrategia se basa en una sólida base estadística, se enfrenta a desafíos como la posibilidad de que la hipótesis de regreso a la media falle, la sensibilidad de los parámetros y la adaptabilidad al entorno de mercado. La estrategia tiene el potencial de lograr un rendimiento más estable en una variedad de entornos de mercado mediante la adición de filtros de tendencia, la longitud de ventanas de adaptación automática, el análisis de múltiples marcos de tiempo y la optimización del aprendizaje automático.
Cabe señalar que cualquier estrategia cuantitativa requiere una adecuada retrospectiva y verificación prospectiva, y ajuste de parámetros según las características específicas del mercado y las preferencias de riesgo personales. La estrategia ofrece un marco que combina los principios estadísticos y la gestión de riesgos dinámicos, sobre la base de los cuales los operadores pueden realizar una mayor personalización y optimización.
/*backtest
start: 2024-03-14 00:00:00
end: 2025-03-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion Z-Score Strategy with Dynamic SL", overlay=true)
// Input parameters
window = input.int(7, "Rolling Window", minval=1)
z_entry_long = input.float(-1.825, "Z-Score Long Entry", step=0.025)
z_entry_short = input.float(1.825, "Z-Score Short Entry", step=0.025)
z_stop_loss_long = input.float(-2.125, "Z-Score Stop Loss Long", step=0.025)
z_stop_loss_short = input.float(2.125, "Z-Score Stop Loss Short", step=0.025)
// Calculate log price, rolling mean, and rolling standard deviation
log_price = math.log(close)
rolling_mean = ta.sma(log_price, window)
rolling_std = ta.stdev(log_price, window)
rolling_z_score = (log_price - rolling_mean) / rolling_std
// Persistent variables to store entry conditions
var float entry_price = 0.0
var float entry_log_price = 0.0
var float entry_mean = 0.0
var float entry_std = 0.0
var float stop_loss_price = 0.0
var string position = "none"
// Calculate dynamic take-profit
take_profit_price = math.exp(rolling_mean)
// Entry logic
if (rolling_z_score <= z_entry_long and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price + z_stop_loss_long * rolling_std)
position := "long"
strategy.entry("Long", strategy.long)
if (rolling_z_score >= z_entry_short and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price - z_stop_loss_short * rolling_std)
position := "short"
strategy.entry("Short", strategy.short)
// Exit logic with dynamic adjustments
if (position != "none")
// Calculate new stop-loss based on current volatility
float new_stop_loss = na
if (position == "long")
new_stop_loss := math.exp(log_price + z_stop_loss_long * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
if (close >= take_profit_price)
strategy.close("Long", comment="TP")
position := "none"
else if (close <= stop_loss_price)
strategy.close("Long", comment="SL")
position := "none"
else if (position == "short")
new_stop_loss := math.exp(log_price - z_stop_loss_short * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
if (close <= take_profit_price)
strategy.close("Short", comment="TP")
position := "none"
else if (close >= stop_loss_price)
strategy.close("Short", comment="SL")
position := "none"
// Plots
plot(rolling_z_score, title="Z-Score", color=color.blue, linewidth=1)
plot(z_entry_short, title="Z-Score-upper", color=color.rgb(33, 243, 103), linewidth=1)
plot(z_entry_long, title="Z-Score-lower", color=color.rgb(243, 33, 61), linewidth=1)