
La estrategia de identificación de puntos de inflexión multi-ciclo y la estrategia de negociación automática es un sistema de negociación cuantitativa basado en el modelo Magic-9⁄13 y la identificación de puntos de inflexión direccionales (DRP). La estrategia capta las señales de inflexión del mercado mediante la identificación de patrones continuos de precios y puntos de cambio dinámico, y ejecuta las operaciones automáticamente. El núcleo de la estrategia consiste en combinar las tradicionales ideas de análisis técnico con métodos modernos de cuantificación, identificando los posibles puntos de inflexión del mercado mediante el análisis del comportamiento continuo de los precios, para entrar en el mercado en los primeros momentos de la inflexión de los precios.
El principio central de la estrategia se basa en dos indicadores técnicos principales: el modelo Magic-9⁄13 y el punto de inflexión de dirección (DRP).
Reconocimiento del modo Magic-9⁄13:
Calculación del punto de inflexión de dirección (DRP):
Generación de señales de comercio:
Mecanismo de gestión de riesgos:
Funciones auxiliares:
Identificación temprana de una reversión del mercado: La combinación de la modalidad Magic-9⁄13 con el punto de reversión de dirección permite capturar señales en las primeras etapas de la reversión del mercado, ofreciendo una mejor oportunidad de entrada.
Mecanismo de confirmación múltiple: La estrategia requiere que se cumplan dos condiciones independientes al mismo tiempo ((Modo mágico y el cruce del punto de inflexión de dirección), reduce la probabilidad de señales falsas y mejora la calidad de las transacciones
Automatización del control de riesgosLa función de detener y detener los pérdidas está integrada, lo que permite controlar el riesgo de una sola transacción sin necesidad de intervención manual, evitando la toma de decisiones comerciales emocionales.
Señales de negociación visualesLa visualización de las señales de negociación a través de las etiquetas y los cambios de color de los gráficos permite a los operadores identificar rápidamente las oportunidades de negociación potenciales.
Ajustabilidad de parámetrosLas estrategias ofrecen opciones de ajuste de los dos parámetros clave de longitud y longitud de retroceso, lo que permite a los operadores optimizar en función de diferentes entornos de mercado y variedades de operaciones.
Robustez de los datos procesados: Contiene un mecanismo para procesar el valor de NA, lo que aumenta la estabilidad de la estrategia en una variedad de condiciones de datos.
Adaptabilidad al ciclo: La estrategia se puede aplicar a gráficos de diferentes períodos de tiempo, desde gráficos de minutos hasta gráficos de líneas diarias, ofreciendo opciones de marcos de tiempo de negociación flexibles.
Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración de los parámetros de longitud y longitud retrospectiva, y diferentes entornos de mercado pueden requerir diferentes combinaciones de parámetros. La configuración incorrecta de los parámetros puede conducir a una sobreventa o a la pérdida de oportunidades de negociación. Solución: Realizar un análisis exhaustivo de la historia para crear una matriz de optimización de parámetros para diferentes condiciones de mercado.
Riesgo de fluctuaciones en el mercado: En mercados de alta volatilidad, el establecimiento de un punto de parada como fijo de 10 puntos puede ser demasiado pequeño, lo que lleva a que se active con frecuencia; mientras que en mercados de baja volatilidad, este establecimiento puede ser demasiado grande. Solución: el establecimiento de un punto de parada se basa en un valor dinámico de la volatilidad del mercado (como el ATR), en lugar de un número fijo de puntos.
Desempeño del mercado de tendenciasLa estrategia se enfoca principalmente en el diseño de puntos de inflexión, que pueden generar señales erróneas frecuentes en mercados de fuerte tendencia. Solución: Añadir un filtro de tendencia, que dispara una señal de negociación solo cuando se confirma que el mercado no está en un estado de fuerte tendencia.
Punto de deslizamiento y riesgo de liquidez: En mercados con poca liquidez, el precio de ejecución puede tener diferencias significativas con el precio de la señal. Solución: aumentar las condiciones de filtración de liquidez o considerar el factor de deslizamiento al ejecutar la orden.
El riesgo de exceso de adaptaciónLa estrategia utiliza múltiples condiciones y parámetros, lo que puede suponer un riesgo de sobreajuste de los datos históricos. Solución: Verificar la solidez de la estrategia mediante pruebas fuera de la muestra y pruebas hacia adelante.
La acumulación de señales continuas: En ciertas condiciones de mercado, es posible que se produzcan varias señales consecutivas en la misma dirección, lo que lleva a una posición excesiva. Solución: Implementar un mecanismo de filtración de señales para limitar la cantidad de ejecuciones de señales en la misma dirección en un corto período de tiempo.
Limitación de pérdidas fijasLa solución: Implementar un mecanismo de stop loss dinámico basado en las fluctuaciones del mercado, o adoptar una estrategia de seguimiento de las pérdidas.
Ajuste de parámetros dinámicos:
Añadir filtro de tendencias:
Optimizar el mecanismo de stop loss y take profit:
Aumentar el filtro de volumen de transacciones:
Filtrado de tiempo de implementación:
Añadir funciones de administración de posiciones:
Hacer una puntuación de la intensidad de la señal:
Aumentar el reconocimiento de los mercados relevantes:
La estrategia de identificación de puntos de inflexión multi-ciclo y automática de negociación es un sistema de negociación cuantitativo basado en una combinación de indicadores técnicos, que se combina con el análisis de puntos de inflexión de dirección a través de la identificación del modelo Magic-9⁄13. La ventaja central de la estrategia reside en su mecanismo de confirmación múltiple y su función de gestión de riesgos integrada, que permite proporcionar señales de negociación relativamente confiables en los primeros momentos de la reversión del mercado, al tiempo que controla el riesgo mediante el control automático de stop loss.
Sin embargo, la estrategia también se enfrenta a limitaciones como la sensibilidad de los parámetros, la adaptabilidad al entorno del mercado y los parámetros de parada fijos. Mediante la implementación de medidas de optimización como el ajuste de parámetros dinámicos, el aumento de filtros de tendencia, la optimización del mecanismo de parada de pérdidas y el aumento de la confirmación de volumen de operaciones, se puede mejorar significativamente la adaptabilidad y la estabilidad de rendimiento de la estrategia.
Para los comerciantes, la estrategia ofrece un marco para la captura sistemática de los puntos de inflexión del mercado, pero aún requiere un ajuste y optimización razonable de los parámetros en combinación con las preferencias personales de riesgo y la comprensión del mercado. En el proceso de aplicación real, se recomienda realizar pruebas exhaustivas en entornos simulados para comprender las características de rendimiento de la estrategia en diferentes entornos de mercado, y luego aplicarlas gradualmente a las operaciones de mercado real.
/*backtest
start: 2025-06-05 00:00:00
end: 2025-06-05 15:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('L3 Magic-9/13 Strategy', overlay=true, max_bars_back=4000, max_labels_count=500)
// 输入参数
length_input = input.int(title='Length', defval=9, minval=1)
lookback_length = input.int(title='Lookback Length', defval=4, minval=1)
// 获取第一个非 NA 值的函数
get_first_non_na_value(values, length) =>
result = float(na)
if length >= 1
for i = 0 to length - 1
if na(result) or not na(values[i])
result := values[i]
result
// 计算连续条件出现次数的函数
count_consecutive_occurrences(condition, length) =>
count = 0
for i = 1 to length
if condition[i - 1]
count += 1
count
// 检查条件是否在给定周期内出现的函数
check_condition_occurrence(condition, length) =>
occurrence = count_consecutive_occurrences(condition, length) != 0 ? 1 : 0
occurrence
// 基于回溯周期过滤出现次数的函数
filter_occurrences(condition, lookback_period) =>
output = 0.0
temp = 0
for i = lookback_period to 0
if temp > 0
output := 0.0
temp := temp[1] - 1
else
if not condition[i]
output := 0.0
else
output := 1.0
temp := lookback_period + 1
output_bool = output == 1 ? true : false
output_bool
// Magic-9/13 逻辑
high_9 = count_consecutive_occurrences(close > get_first_non_na_value(close, 4), 9) == 9 and count_consecutive_occurrences(close > get_first_non_na_value(close, 4), 10) == 9
low_9 = count_consecutive_occurrences(close < get_first_non_na_value(close, 4), 9) == 9 and count_consecutive_occurrences(close < get_first_non_na_value(close, 4), 10) == 9
// 计算方向反转点
up_count = 0
down_count = 0
for i = 0 to length_input - 1
up_count += (nz(close[i]) > nz(close[i + lookback_length]) ? 1 : 0)
down_count += (nz(close[i]) < nz(close[i + lookback_length]) ? 1 : 0)
directional_reversal_point = down_count == length_input ? 1 : up_count == length_input ? -1 : 0
// 定义交易信号
buy_signal = check_condition_occurrence(low_9, 2) and ta.crossover(directional_reversal_point, 0)
sell_signal = check_condition_occurrence(high_9, 2) and ta.crossunder(directional_reversal_point, 0)
// 执行交易
if (buy_signal)
strategy.entry("Buy", strategy.long)
strategy.exit("Take Profit", "Buy", limit=close + 10 * syminfo.pointvalue, stop=close - 10 * syminfo.pointvalue)
if (sell_signal)
strategy.entry("Sell", strategy.short)
strategy.exit("Take Profit", "Sell", limit=close - 10 * syminfo.pointvalue, stop=close + 10 * syminfo.pointvalue)
// 绘制标签
labels = buy_signal ? label.new(bar_index, low, 'B', color=color.new(color.red, 40), textcolor=color.white, style=label.style_label_up, yloc=yloc.price, size=size.small) : sell_signal ? label.new(bar_index, high, 'S', color=color.new(color.lime, 40), textcolor=color.white, style=label.style_label_down, yloc=yloc.price, size=size.small) : na
// 绘制蜡烛图颜色
signal = directional_reversal_point > 0 or up_count > down_count ? 1 : directional_reversal_point < 0 or down_count > up_count ? -1 : 0
drp_color = signal > 0 ? color.green : signal < 0 ? color.red : color.black
barcolor(drp_color)