
El sistema de negociación de reversión de tendencia de la intensidad de los precios internos es una estrategia de negociación a nivel de línea diaria basada en el indicador de intensidad de los precios internos (IBS). El núcleo de la estrategia consiste en identificar posibles puntos de reversión del mercado y juzgar el estado de sobrecompra y sobreventa del mercado mediante el monitoreo de la posición relativa del precio de cierre de la línea de referencia anterior dentro de su rango de puntos altos y bajos. La estrategia es especialmente adecuada para el comercio de acciones y índices estadounidenses, y los parámetros por defecto se optimizan para los principales índices como SPY/SPX y NDQ/QQ.
El núcleo de esta estrategia es el cálculo y la aplicación del indicador de la intensidad de los precios internos (IBS). El indicador IBS se calcula mediante la siguiente fórmula:
IBS = (前一日收盘价 - 前一日最低价) / (前一日最高价 - 前一日最低价)
Los valores de IBS oscilan entre 0 y 1:
Las reglas de negociación de la estrategia son las siguientes:
Las condiciones para la entrada son múltiples:
Las condiciones para jugar más partidos:
Además, la estrategia también introdujo el parámetro de “mínimo porcentaje de distancia entre nuevas entradas” para garantizar que las nuevas posiciones se abran solo cuando el precio retrocede lo suficiente, lo que reduce el riesgo de retorno y optimiza la administración de fondos.
La precisión de la hora del mercado: el uso del indicador IBS puede capturar con precisión el estado de sobreventa y sobreventa del mercado, proporcionando una base matemática objetiva para las entradas y salidas, reduciendo la desviación causada por el juicio subjetivo.
Mecanismo de filtración de tendencias: A través de EMA como filtro de tendencias, se asegura que la dirección de las operaciones esté en consonancia con las tendencias principales, evitando así el riesgo de operaciones en contra. La estrategia puede ajustar el ciclo de EMA según las diferentes características del mercado, o desactivar esta condición por completo.
Gestión de posiciones flexible: la estrategia admite la acumulación de posiciones en forma de pirámide (hasta 2 veces) y la introducción del parámetro de “mínimo porcentaje de distancia de entrada nueva”, lo que permite un mecanismo de acumulación de posiciones más inteligente que reduce efectivamente el costo promedio de la posición cuando el precio retrocede.
Control automático del riesgo: la estrategia establece un límite de tiempo máximo de mantenimiento de la posición, que se liquida automáticamente después del período de negociación máximo predeterminado, incluso si el mercado no dispara la señal de salida habitual, controlando efectivamente el tiempo de exposición al riesgo de una sola operación.
Optimización de parámetros: los parámetros predeterminados se han optimizado para los principales índices de mercado, como SPY y QQQ/NDQ, y el usuario puede aplicar la configuración recomendada directamente:
Modelo de negociación integral: soporte para el modo de negociación de solo hacer más, solo hacer menos o bidireccional, adaptado a diferentes entornos de mercado y estilos de negociación.
Sensibilidad de los parámetros: los parámetros de entrada y salida de IBS tienen un gran impacto en el rendimiento de la estrategia. La configuración incorrecta de los parámetros puede causar exceso de operaciones o perder oportunidades de negociación importantes.
Riesgo de mercado en turbulencia: en mercados en turbulencia sin una tendencia obvia, las señales IBS pueden aparecer con frecuencia, lo que provoca exceso de transacciones y un aumento innecesario de los costos de las transacciones. La solución es agregar condiciones de filtración, como requerir la confirmación de múltiples señales IBS consecutivas o combinarlas con otros indicadores (como el ATR) para juzgar la volatilidad del mercado.
Retraso en los cambios bruscos de tendencias: cuando el mercado se convierte en una tendencia rápida, los indicadores de IBS calculados en base a los datos del día anterior pueden reaccionar con retraso, lo que hace que el momento de entrada o salida no sea lo suficientemente ideal. Se recomienda ajustar adecuadamente el umbral de IBS o reducir el tiempo máximo de tenencia en períodos de alta volatilidad.
Gestión de riesgos de fondos: el uso por defecto del 50% de los fondos de la cuenta para operar, puede causar una exposición excesiva al riesgo en caso de que se coloque varias veces. Se recomienda al usuario que ajuste el tamaño de la posición y los parámetros de colocación según su capacidad de asumir el riesgo.
Limitación de la implementación técnica: la estrategia se basa en la ejecución de operaciones en el precio de cierre. En la operación real, es posible que se enfrenten a puntos de deslizamiento y diferencias de precios. Para reducir este tipo de riesgos, se puede considerar ordenar antes del cierre o usar un listado de precio limitado en lugar del listado de precio de mercado.
Ajuste de los umbrales dinámicos: la estrategia actual utiliza los umbrales de entrada y salida de IBS fijos, y se puede considerar ajustar estos umbrales en función de la dinámica de la volatilidad del mercado. Por ejemplo, aumentar adecuadamente los umbrales de entrada y bajar los umbrales de salida en períodos de alta volatilidad para reducir las falsas señales; en períodos de baja volatilidad, se puede adoptar una configuración más radical.
Confirmación de múltiples períodos de tiempo: Introducción de un marco de análisis de múltiples períodos de tiempo que requiere la confirmación simultánea de señales IBS a corto y medio plazo para ejecutar una transacción. Por ejemplo, además de la señal IBS de línea diaria, también se puede calcular el valor IBS de la línea diurna o de 4 horas, que solo se incluye cuando varios períodos de tiempo muestran un estado de sobreventa o sobreventa, lo que mejora considerablemente la calidad de la señal.
Mecanismos inteligentes de parada: las estrategias actuales dependen solo de las señales de salida de IBS y el control del riesgo máximo de tiempo de posición, y se pueden introducir mecanismos de parada más inteligentes. Por ejemplo, los paros dinámicos basados en ATR, los paros de seguimiento o las estrategias de parada basadas en puntos de soporte / resistencia, para proteger mejor las ganancias y controlar el riesgo de una sola operación.
Adaptación del estado del mercado: introducción de un mecanismo de identificación del estado del mercado, el uso de diferentes configuraciones de parámetros en diferentes entornos de mercado (mercado de tendencia, mercado de oscilación). Se puede identificar el estado del mercado a través de ADX (índice de dirección promedio) u otros indicadores de intensidad de tendencia, flexibilizar las condiciones de IBS en entornos de fuerte tendencia y adoptar un umbral de IBS más estricto en mercados de oscilación.
Optimización de aprendizaje automático: utiliza la tecnología de aprendizaje automático para optimizar y filtrar las señales de IBS. Identifica qué señales de IBS son más propensas a generar operaciones rentables a través de modelos de entrenamiento y ajusta automáticamente los parámetros según las características del mercado para lograr la capacidad de adaptación de la estrategia. Este método puede mejorar significativamente la estabilidad y la adaptabilidad de la estrategia, especialmente cuando se enfrenta a diferentes condiciones de mercado y variedades de operaciones.
El sistema de negociación de reversión de tendencia de la intensidad de los precios internos es una estrategia de negociación a nivel de línea diaria que combina el indicador de intensidad de los precios internos (IBS) y el promedio móvil del índice (EMA). La estrategia optimiza las decisiones de negociación mediante la identificación de posibles puntos de reversión del mercado y el seguimiento de tendencias a largo plazo, especialmente para el comercio de acciones e índices estadounidenses.
La estrategia ha optimizado los parámetros para los principales índices de mercado, como SPY/SPX y NDQ/QQQ, y los usuarios pueden aplicar la configuración recomendada para operar directamente. Sin embargo, cualquier estrategia de negociación conlleva riesgos, incluida la sensibilidad de los parámetros, el riesgo de un mercado convulso y el atraso en un cambio brusco de tendencia.
Las direcciones de optimización futuras incluyen ajustes dinámicos de los umbrales, confirmación de múltiples ciclos de tiempo, mecanismos inteligentes de parada de pérdidas, adaptación automática del estado del mercado y optimización de aprendizaje automático. Estas mejoras pueden mejorar aún más la adaptabilidad y robustez de las estrategias para que puedan mantener un buen rendimiento en diferentes entornos de mercado.
Como estrategia de comercio cuantitativo, el sistema de comercio de inversión de tendencias de la intensidad de los precios internos ofrece a los comerciantes una forma de comercio basada en reglas y objetiva, reduce la influencia de los factores emocionales en las decisiones comerciales y ayuda a lograr resultados comerciales más consistentes y predecibles.
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//Implementation by AlgoTradeKit
//v.0.5
//The IBS Trading Strategy is a daily bars long-only trading system, based on the concept of Internal Bar Strength (IBS).
//The strategy aims to identify potential reversals by monitoring how the previous bar’s close positions itself within its high-low range.
//It is suitable for stock and US indices. The default parameters are optimized for SPY/SPX and NDQ/QQQ
//Setting for QQQ: 0.09, 0.985, 220, 0, 14
//Setting for SPY: 0.11, 0.995, 200, 0, 12
//@version=6
strategy("IBS (Internal Bar Strength) Trading Strategy for SPY and NDQ", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, pyramiding = 2, currency = currency.USD, process_orders_on_close=false)
// ***** INPUTS *****
// IBS thresholds
ibsEntryThreshold = input.float(0.09, title="IBS Entry Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
ibsExitThreshold = input.float(0.985, title="IBS Exit Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
// EMA period (set to 0 to disable the EMA condition)
emaPeriod = input.int(220, title="EMA Period (0 to disable)", minval=0, maxval=5000, step=1, tooltip="Exponential Moving Average Filter Period (0 to disable)")
// Minimum percentage drop required for a new entry (for dollar-cost averaging)
minEntryPct = input.float(0, title="Minimum Distance for New Entry (%)", step=0.05, minval=0.0, maxval=100, tooltip = "Distance in Price from Last Opened Position, in Percentage Terms (%)")
maxTradeDuration = input.int(title="Maximum Trade Duration (days)", defval=14, minval=1, step=1, maxval=1000, tooltip = "Exit at close if maximum trade duration is reached.")
// Persistent variable to record the bar index when the trade is entered.
var int entryBarIndex = na
// ***** EMA CALCULATION *****
// Calculate the EMA globally if the period is greater than 0, otherwise leave as na.
emaValue = emaPeriod > 0 ? ta.ema(close, emaPeriod) : na
// ***** IBS CALCULATION *****
// Calculate IBS using the previous bar’s values.
// Guard against division by zero: if previous high equals previous low, default IBS to 0.5.
prevHigh = high[1]
prevLow = low[1]
prevClose = close[1]
ibs = (prevHigh != prevLow) ? (prevClose - prevLow) / (prevHigh - prevLow) : 0.5
// ***** ENTRY AND EXIT CONDITIONS *****
// Define the EMA condition: if emaPeriod is 0, bypass the EMA check.
emaConditionLong = emaPeriod == 0 or (close > emaValue)
emaConditionShort = emaPeriod == 0 or (close < emaValue)
// Entry: IBS is below the entry threshold and the EMA condition holds.
enterLong = (ibs < ibsEntryThreshold) and emaConditionLong
enterShort = (ibs > ibsExitThreshold) and emaConditionShort
// Exit: IBS is above the exit threshold.
exitLong = ibs > ibsExitThreshold
exitShort = ibs < ibsEntryThreshold
// ***** DOLLAR-COST AVERAGING CONDITION IN PERCENTAGE *****
// Track the last entry price. Reset when there is no open position.
var float lastEntryPrice = na
if strategy.position_size == 0
lastEntryPrice := na
// If there is no previous entry, the condition is met.
// Otherwise, allow a new entry only if the current price is lower than the last entry price
// by at least the predefined percentage (converted to a fraction).
dcaCondition = na(lastEntryPrice) or ((close < lastEntryPrice) and (((lastEntryPrice - close) / lastEntryPrice) >= (minEntryPct / 100)))
dcaConditionShort = na(lastEntryPrice) or ((close > lastEntryPrice) and (((close - lastEntryPrice) / lastEntryPrice) >= (minEntryPct / 100)))
// ***** STRATEGY ORDERS *****
// Enter a long position only if both the entry condition and the DCA condition are met.
if enterLong and dcaCondition
strategy.entry("Long", strategy.long)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
if enterShort and dcaConditionShort
strategy.entry("Short", strategy.short)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
// Compute trade duration in days using the absolute difference
tradeDuration = not na(entryBarIndex) ? math.abs(bar_index - entryBarIndex) : 0
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitLong or (tradeDuration >= maxTradeDuration)
strategy.close("Long")
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitShort or (tradeDuration >= maxTradeDuration)
strategy.close("Short")
// ***** PLOTTING *****
// Plot IBS for reference, along with horizontal lines for the entry and exit thresholds.
//plot(ibs, title="IBS", color=color.blue, linewidth=2)
//hline(ibsEntryThreshold, title="IBS Entry Threshold", color=color.green)
//hline(ibsExitThreshold, title="IBS Exit Threshold", color=color.red)