Estrategia de trading con momentum y sistema de control de riesgos de tangente hiperbólica inversa adaptativa CCI

IFTCCI CCI WMA 动量交易 阈值突破 再入场机制 止损策略
Fecha de creación: 2025-05-27 11:11:47 Última modificación: 2025-05-27 11:11:47
Copiar: 0 Número de Visitas: 310
2
Seguir
319
Seguidores

Estrategia de trading con momentum y sistema de control de riesgos de tangente hiperbólica inversa adaptativa CCI Estrategia de trading con momentum y sistema de control de riesgos de tangente hiperbólica inversa adaptativa CCI

Descripción general

La estrategia de comercio de la dinámica del CCI de la contracurva recta es un sistema de comercio cuantitativo basado en indicadores técnicos, cuyo núcleo se basa en el indicador IFTCCI desarrollado por Kıvanc Özbilgiç. La estrategia genera señales de compra y venta al establecer un nivel de descenso preciso cuando el indicador oscila entre -1 y +1. La estrategia genera señales de compra cuando el indicador rompe un umbral específico al subir desde un nivel bajo (<-0.95) y una señal de venta cuando el indicador rompe un umbral específico al bajar desde un nivel alto (<-0.95) Además, la estrategia incluye un mecanismo de stop loss dinámico y una condición de entrada: si el precio se mueve en sentido contrario a la dirección en la que se generó la señal, el sistema detendrá la pérdida o ejecutará la operación de reingreso.

Principio de estrategia

El núcleo de la estrategia es el indicador IFTCCI, que se calcula a través de los siguientes pasos:

  1. Primero se calcula el índice CCI estándar y se divide por 4 para una estandarización inicial
  2. El valor CCI después de la normalización se multiplica por 0,1 para ajustar la sensibilidad
  3. Aplicación de la media móvil ponderada (WMA) para el tratamiento suave
  4. Por último, el valor es mapeado en el rango de -1 a +1 por la función de corte reverso de doble curva ((tanh))

La fórmula de cálculo es la siguiente:

v1 = 0.1 * (CCI(close, period) / 4)
v2 = WMA(v1, wma_period)
IFTCCI = (e^(2*v2) - 1) / (e^(2*v2) + 1)

La lógica de ejecución de la estrategia se divide en las siguientes partes clave:

  1. Condiciones de compra:

    • Se activa cuando el indicador IFTCCI sube desde menos de -0.95 a más de -0.94
    • Se activa cuando el indicador sube al menos 0,1 unidades desde el punto más bajo
  2. Condiciones de venta:

    • Venta objetivo: se activa cuando el indicador IFTCCI cae de más de 0.95 a menos de 0.94
    • Se activa cuando el indicador cae al menos 0,1 unidades desde su punto más alto durante la posición
  3. Seguimiento de estado:

    • El valor máximo del indicador registrado durante la tenencia de la posición se utilizará para el cálculo de la pérdida
    • Los valores mínimos de los indicadores de seguimiento después de la liquidación se utilizan para el juicio de reentrada

Toda la estrategia utiliza un porcentaje de gestión de fondos, con un 100% de fondos disponibles en cada transacción, y prohíbe la hipoteca. La estrategia calcula las señales en tiempo real cuando se forma cada línea K, asegurando la captura oportuna de la dinámica del mercado.

Ventajas estratégicas

  1. Reglas claras de entrada y salidaLas estrategias basadas en un deterioro numérico preciso proporcionan señales de negociación claras, evitan juicios subjetivos y hacen que las decisiones comerciales sean más objetivas y disciplinadas.

  2. Mecanismo de gestión de riesgos dinámicosEl mecanismo de detención de pérdidas incorporado puede limitar eficazmente las pérdidas de una sola transacción, y se retira automáticamente cuando la inversión del mercado supera la amplitud predeterminada, protegiendo la seguridad de los fondos.

  3. La adaptabilidad del mercadoEl indicador IFTCCI oscila entre -1 y +1 por medio de la conmutación inversa de doble curva recta, con características de estandarización natural y se aplica a diferentes entornos de mercado de volatilidad.

  4. Para suavizar las señales y reducir las falsas brechas: El uso de una media móvil ponderada para un procesamiento suave del CCI original, reduce efectivamente el ruido y las falsas señales, y aumenta la fiabilidad de las señales de negociación.

  5. Mecanismo de reingreso inteligenteCuando el mercado retoma la tendencia original después de la salida, el mecanismo de reentrada permite al sistema volver a aprovechar las oportunidades y mejorar la rentabilidad de la estrategia.

  6. La visualización es buena.La estrategia consiste en mostrar un claro cambio de color de fondo en el gráfico, lo que ayuda a los operadores a entender de forma intuitiva el estado del mercado y las señales de negociación.

  7. Ajustabilidad de parámetros: Todos los parámetros clave pueden ser ajustados a través de la interfaz de entrada, lo que permite que la estrategia se adapte a diferentes condiciones de mercado y preferencias de riesgo personales.

Riesgo estratégico

  1. El comercio frecuente en los mercados convulsionadosEn un mercado convulso por rangos, los indicadores pueden oscilar frecuentemente cerca de los mínimos, generando múltiples señales de compra y venta, lo que lleva a una sobrecomercialización y a la erosión de las comisiones. *Cómo solucionarlo*Se pueden agregar condiciones de filtro adicionales, como filtro de tiempo o filtro de tendencia, para reducir la frecuencia de las operaciones en mercados convulsionados.

  2. El problema de los límites fijos de pérdida: La estrategia actual utiliza un valor fijo ((0.1 unidades) como amplitud de parada, que puede ser demasiado grande o demasiado pequeño en diferentes entornos de mercado de volatilidad. *Cómo solucionarlo*Se puede diseñar un margen de pérdidas adaptado, ajustando la distancia de pérdidas según la dinámica de la volatilidad reciente del mercado.

  3. Falta de confirmación de tendencias a largo plazoLa estrategia se basa principalmente en la dinámica a corto plazo, sin la combinación de análisis de tendencias a largo plazo, que puede generar transacciones innecesarias en el caso de una reversión de las tendencias principales. *Cómo solucionarlo*Introducción de indicadores de tendencia de largo ciclo como filtro para operar solo en la dirección de la tendencia.

  4. Riesgo de tiempo para el mecanismo de reingresoEl mecanismo de reingreso actual se basa en una amplitud de rebote fija, que puede reingresar prematuramente en el caso de una falsa ruptura del mercado. *Cómo solucionarlo*Aumentar las condiciones de confirmación adicionales, como la confirmación de la entrega o la señal de compatibilidad de otros indicadores técnicos.

  5. Dependencia de un solo indicadorLa estrategia se basa en un solo indicador de IFTCCI para tomar decisiones y carece de análisis de mercado multidimensional. *Cómo solucionarlo*Introducción de una combinación de indicadores complementarios, como el RSI, el MACD o el índice de volatilidad, para proporcionar una confirmación de mercado desde múltiples perspectivas.

Dirección de optimización

  1. Integración de análisis de múltiples marcos de tiempo: Las estrategias actuales solo funcionan en un único marco de tiempo y pueden integrar el análisis de múltiples marcos de tiempo, por ejemplo, usar el indicador IFTCCI de marcos de tiempo más altos como filtro de dirección de negociación y comerciar solo en la dirección de la tendencia más grande. Esto puede reducir el comercio de reversión y aumentar las probabilidades de ganar.

  2. Ajuste de las tendencias: Cambiar el umbral fijo (−0.950.95) por un umbral ajustado en función de la dinámica de la volatilidad del mercado. Utilizar un umbral más estrecho en entornos de baja volatilidad y un umbral más amplio en entornos de alta volatilidad para adaptarse a las necesidades de generación de señales en diferentes condiciones del mercado.

  3. Mecanismo de confirmación de la entrega: La adición de un componente de análisis de volumen de transacción, que requiere que la generación de señales se acompañe de un apoyo de volumen de transacción significativo, puede filtrar las señales de ruptura de baja calidad y reducir las pérdidas causadas por las falsas rupturas.

  4. Optimización de la gestión de fondos: La estrategia actual utiliza un porcentaje fijo para la gestión de posiciones, que se puede mejorar para un sistema de gestión de fondos adaptativo basado en la volatilidad del mercado y la probabilidad de ganar, aumentando las posiciones en señales de alto grado de confianza y reduciendo las posiciones en señales de bajo grado de confianza.

  5. Aprendizaje automático: Utiliza algoritmos de aprendizaje automático para la optimización de la adaptación de los parámetros del indicador IFTCCI (ciclo CCI y ciclo WMA) para ajustar automáticamente la combinación de parámetros óptima en función de diferentes entornos de mercado y mejorar la adaptabilidad de la estrategia.

  6. Filtrado por tiempo de transacción: Se puede incluir un filtro de tiempo de negociación para evitar los momentos de alta volatilidad antes de la apertura y el cierre del mercado, o para evitar los momentos de publicación de datos económicos importantes, lo que reduce la volatilidad impredecible causada por eventos inesperados.

  7. Análisis de correlación: La introducción de análisis de correlación con otros mercados o activos aumenta la credibilidad de las señales de negociación y la estabilidad de la estrategia cuando se producen señales similares en varios mercados relacionados al mismo tiempo.

Resumir

La estrategia de comercio de impulso CCI de doble curva recta es un sistema de comercio cuantitativo bien estructurado y con lógica clara, que genera señales de comercio a través de la ruptura del umbral del indicador IFTCCI, y está equipado con mecanismos de parada y reingreso para administrar el riesgo y aprovechar las oportunidades. Las principales ventajas de la estrategia son la claridad de la señal, la dinámica de control de riesgo y la adaptabilidad de los parámetros.

Sin embargo, la estrategia también se enfrenta a riesgos como el comercio frecuente en mercados convulsos, la falta de flexibilidad de los límites de parada fijos y la falta de confirmación de tendencias a largo plazo. La solidez y la rentabilidad de la estrategia se pueden mejorar significativamente mediante la integración de análisis de múltiples marcos de tiempo, el ajuste dinámico de los umbrales, la incorporación de confirmación de volumen de negocios, la optimización de la administración de fondos, la introducción de mejoras de aprendizaje automático y la adición de filtros de tiempo de negociación.

Para los comerciantes que deseen aplicar esta estrategia, se recomienda probar primero diferentes combinaciones de parámetros en un entorno simulado para encontrar la configuración óptima para su variedad de comercio y sus preferencias de riesgo, y gradualmente integrar las direcciones de optimización propuestas en este artículo para construir un sistema de comercio más completo y sólido.

Código Fuente de la Estrategia
/*backtest
start: 2024-05-27 00:00:00
end: 2025-01-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

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

//@version=5
strategy("IFTCCI Buy Sell Signal Strategy",
         overlay=false,
         pyramiding=0,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=100,
         calc_on_every_tick=true) // NEW LINE: Enables real-time signal generation.

// --- Indicator Settings and Calculations (IFTCCIv2) ---
group_indicator_params = "Indicator Parameters (IFTCCIv2)"
ccilength_param = input.int(5, "CCI Period", group=group_indicator_params)
wmalength_param = input.int(9, title="Smoothing Period (WMA)", group=group_indicator_params)

// IFTCCIv2 Calculation
v1_calc = 0.1 * (ta.cci(close, ccilength_param) / 4)
v2_calc = ta.wma(v1_calc, wmalength_param)
indicator_value_ift = (math.exp(2 * v2_calc) - 1) / (math.exp(2 * v2_calc) + 1)

// --- Strategy Rule Inputs ---
group_entry_rules = "Buy Signal Conditions"
entry_low_prev_max = input.float(-0.95, title="Primary Buy: Previous Bar Max Value", group=group_entry_rules)
entry_low_curr_min = input.float(-0.94, title="Primary Buy: Current Bar Min Value", group=group_entry_rules)
reentry_trigger_units = input.float(0.10, title="Re-entry: Rise from Lowest Value", group=group_entry_rules)

group_exit_rules = "Sell Signal Conditions (Exit Position)"
exit_high_prev_min = input.float(0.95, title="Target Sell: Previous Bar Min Value", group=group_exit_rules)
exit_high_curr_max = input.float(0.94, title="Target Sell: Current Bar Max Value", group=group_exit_rules)
stop_loss_units = input.float(0.10, title="Stop Loss: Drop from Peak Value", group=group_exit_rules)

// --- Indicator Values for Strategy ---
float ind_val = indicator_value_ift
float ind_val_prev = indicator_value_ift[1]

// --- State Tracking Variables ---
var float highest_indicator_since_long_entry = na
var bool track_for_reentry_after_close = false
var float lowest_indicator_since_reentry_tracking_started = na

// --- Update State Logic ---
// 1. Update the highest indicator value since entering long position
if strategy.position_size > 0
    if strategy.position_size[1] <= 0
        highest_indicator_since_long_entry := ind_val
    else
        highest_indicator_since_long_entry := math.max(highest_indicator_since_long_entry, ind_val)
else
    if strategy.position_size[1] > 0
        highest_indicator_since_long_entry := na

// 2. Update re-entry tracking mechanism
if strategy.position_size[1] > 0 and strategy.position_size == 0
    track_for_reentry_after_close := true
    lowest_indicator_since_reentry_tracking_started := ind_val
else if strategy.position_size > 0
    track_for_reentry_after_close := false
    lowest_indicator_since_reentry_tracking_started := na
else if track_for_reentry_after_close and strategy.position_size == 0
    if not na(lowest_indicator_since_reentry_tracking_started)
        lowest_indicator_since_reentry_tracking_started := math.min(lowest_indicator_since_reentry_tracking_started, ind_val)
    else
        lowest_indicator_since_reentry_tracking_started := ind_val

// --- Buy Conditions (Long Entry) ---
bool can_enter_new_position = strategy.opentrades == 0

// Condition 1: Main Buy Condition
bool condition_main_buy_cross = ind_val_prev <= entry_low_prev_max and ind_val >= entry_low_curr_min
bool main_long_entry_trigger = condition_main_buy_cross and can_enter_new_position

// Condition 2: Re-entry Buy Condition
bool condition_re_entry_trigger = false
if track_for_reentry_after_close and not na(lowest_indicator_since_reentry_tracking_started) and can_enter_new_position
    if ind_val >= lowest_indicator_since_reentry_tracking_started + reentry_trigger_units
        condition_re_entry_trigger := true

// Combined Buy Condition
bool final_long_entry_condition = main_long_entry_trigger or condition_re_entry_trigger

// --- Sell Conditions (Long Exit) ---
bool currently_in_long_position = strategy.position_size > 0

// Sell Condition 1: Target Sell
bool condition_sell_target = ind_val_prev >= exit_high_prev_min and ind_val <= exit_high_curr_max

// Sell Condition 2: Stop Loss
bool condition_sell_stop_loss = false
if currently_in_long_position and not na(highest_indicator_since_long_entry)
    if ind_val <= highest_indicator_since_long_entry - stop_loss_units
        condition_sell_stop_loss := true

// Combined Sell Condition
bool final_long_exit_condition = currently_in_long_position and (condition_sell_target or condition_sell_stop_loss)

// --- Strategy Orders ---
if (final_long_entry_condition)
    entry_comment = main_long_entry_trigger ? "Buy (Primary)" : "Buy (Re-entry)"
    strategy.entry("Buy ID", strategy.long, comment=entry_comment)

if (final_long_exit_condition)
    exit_comment = condition_sell_target ? "Sell (Target)" : "Sell (Stop)"
    strategy.close("Buy ID", comment=exit_comment)

// --- Plot Indicator and Strategy Markers ---
plot(indicator_value_ift, title="IFTCCI Value", color=color.rgb(0, 0, 0), linewidth=2)
hline(0, "Mid Level", color=color.new(#787b86, 50), linestyle=hline.style_dotted)
hline(0.95, "Upper Reference (+0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)
hline(-0.95, "Lower Reference (-0.95)", color=color.new(#002fff, 10), linestyle=hline.style_dashed)

// Background Coloring on Entry and Exit Signals
color background_color = final_long_entry_condition ? color.new(color.green, 81) : final_long_exit_condition ? color.new(color.red, 81) : na
bgcolor(background_color, title="Signal Background")