
La estrategia de inversión de la inversión de la anomalía de varios períodos es un sistema de negociación basado en el principio de la regresión de la media, diseñado específicamente para identificar las fluctuaciones anormales de los precios que se producen en el mercado en el corto plazo, y después de estas acciones anormales, se toman medidas de negociación inversa. La estrategia utiliza un indicador de cambio porcentual para monitorear la amplitud de las fluctuaciones de los precios en un período de tiempo específico.
La lógica central de esta estrategia se basa en el fenómeno de que los mercados a menudo “sobre-reaccionan” en el corto plazo y luego regresan a la media. La implementación concreta es la siguiente:
Mecanismo de detección de anomalías: Calculando el porcentaje de cambio en el precio en N minutos y comparándolo con el umbral definido por el usuario. La estrategia utiliza la función request.security para obtener los datos de precios de los N minutos anteriores, asegurando la precisión del tiempo.
Generación de señales de comercio:
Administración de posiciones flexible: la estrategia permite entrar directamente en una posición vacía desde una posición vacía, y también soporta la inversión directa desde una posición ya existente, sin la necesidad de un paso intermedio para cerrar la posición.
Mecanismo de control de riesgos: Cada operación tiene un punto fijo de stop loss y stop stop, y el control de riesgo se ejecuta estrictamente con la función strategy.exit.
Parámetros de simulación del discoLas estrategias incluyen comisiones (de 0.05% por defecto), simulación de puntos de deslizamiento (de 2 puntos) y el cálculo del tamaño de la posición basado en la proporción de derechos y intereses de la cuenta, lo que mejora la veracidad de la retroalimentación.
Logía de ejecución instantánea: Asegura la ejecución inmediata de la señal al cierre de la línea K, reduciendo la latencia, mediante la configuración process_orders_on_close=true.
Al analizar en profundidad la implementación del código de esta estrategia, podemos resumir las siguientes ventajas destacadas:
La adaptabilidad del mercadoLa estrategia se puede aplicar a cualquier variedad de transacciones y período de tiempo, y el usuario solo tiene que ajustar el porcentaje de descenso y el tiempo de retorno según las características de la volatilidad de las diferentes variedades.
Identificación de anomalías con precisiónLa precisión de la detección de anomalías se mantiene incluso en períodos de tiempo más largos, mediante el uso de datos con una precisión de 1 minuto para calcular los cambios en los precios.
Logía de transacciones automatizadasEl sistema es capaz de reconocer automáticamente las anomalías y ejecutar las transacciones sin necesidad de intervención humana, lo que reduce el impacto de los factores emocionales.
Control de riesgo completoEl mecanismo de stop loss y stop-loss incorporado, con un rango de riesgo predeterminado para cada transacción, evita las pérdidas excesivas de una sola transacción.
Funciones de ayuda visualA través de una configuración de marcadores gráficos (señales de compra y venta triangulares y un fondo brillante), los operadores pueden identificar de forma intuitiva los períodos de anomalías y mejorar la eficiencia del análisis.
Simulación de los costos reales del mercadoLos resultados de las revisiones se acercaron al rendimiento del disco real.
Flexibilidad en la gestión de posiciones: soporta la conversión directa de la posición vacía → más/vacía, más → vacía, más → vacía, sin pasos intermedios, mejorando la velocidad de reacción de la estrategia en mercados fluctuantes.
Aunque la estrategia está diseñada de manera integral, existen algunos riesgos y desafíos potenciales:
El riesgo de un mercado de tendenciasEn un mercado de fuerte tendencia, los precios pueden no retroceder rápidamente, sino que continúan moviéndose en la misma dirección, lo que hace que las inversiones se enfrenten a pérdidas continuas. La solución es agregar un filtro de tendencia y suspender la ejecución de la estrategia cuando se identifica una fuerte tendencia.
Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración del porcentaje de desvalorización y el tiempo de recuperación. Los parámetros óptimos pueden variar mucho en diferentes entornos de mercado. Se recomienda una optimización y retroalimentación completa de los parámetros y una reevaluación periódica.
Riesgo de mercado anormalEn el caso de noticias importantes o eventos de Black Swan, los precios pueden saltar o fluctuar en extremos, y el stop loss puede no ejecutarse en el precio esperado. Se puede considerar aumentar el filtro de fluctuación, reducir la posición o suspender la negociación en caso de fluctuación anormalmente alta.
Consideraciones de liquidezEn un mercado con poca liquidez, una gran cantidad de pedidos puede causar un aumento de los puntos de deslizamiento, lo que afecta el rendimiento de la estrategia. Se recomienda aplicar la estrategia en un mercado con mucha liquidez, o aumentar los criterios de liquidez.
Limitación de las pérdidas fijasLa estrategia utiliza paros y paradas de puntos fijos, sin tener en cuenta los cambios en la volatilidad del mercado. Se puede considerar el uso de paradas y paradas dinámicas basadas en el ATR o la volatilidad.
Basado en un análisis profundo del código, las siguientes son algunas posibles direcciones de optimización:
Añadir filtro de tendenciasSe puede reducir considerablemente las falsas señales y aumentar la probabilidad de ganar mediante la adición de indicadores de tendencia (como las medias móviles, el ADX, etc.) para evitar el comercio inverso en una tendencia fuerte. Por ejemplo, solo se permite el cambio de tendencia cuando el ADX está por debajo de un determinado umbral (que indica que no hay una tendencia evidente).
Ajuste de parámetros dinámicosSe puede usar el indicador ATR para medir la volatilidad del mercado, aumentando la volatilidad durante la alta volatilidad y reduciendo la volatilidad durante la baja.
Confirmación de varios períodos de tiempo: Añadir análisis de múltiples períodos de tiempo, solo realizar transacciones cuando varios períodos de tiempo muestran anomalías, puede mejorar la calidad de la señal.
Añadir un filtro de tiempo de transacciónAlgunos mercados son más propensos a la devolución de la media en un período de tiempo determinado. Al limitar el tiempo de negociación, se pueden evitar períodos de mercado desfavorables.
Optimización de la gestión de posicionesLas estrategias actuales utilizan la administración de fondos en proporciones fijas. Se puede considerar ajustar el tamaño de la posición en función de la intensidad de la señal o la volatilidad del mercado actual, aumentando la posición en operaciones más seguras.
Incorporación de pérdidas en el seguimiento de gananciasEn el caso de las inversiones en el mercado de divisas, la venta de divisas en el mercado de divisas es una ventaja, ya que las inversiones en divisas son más rentables que en divisas.
Confirmación de aumento de volumenEl movimiento de precios anormales suele estar acompañado de cambios significativos en el volumen de transacción. Se puede aumentar la fiabilidad de la señal mediante la adición de condiciones de filtro de volumen de transacción.
La estrategia de inversión de la inversión de la anomalía del ciclo múltiple es un sistema de negociación de retorno del valor promedio bien diseñado para capturar la oportunidad de retorno de los precios mediante la identificación precisa de las fluctuaciones anormales a corto plazo en el mercado y la adopción de operaciones inversas. La estrategia combina múltiples funciones, como detección de anomalías, gestión de riesgos y simulación en el mercado real, para una variedad de tipos de transacción y períodos de tiempo.
Las principales ventajas de la estrategia residen en su mecanismo automatizado de identificación de anomalías, un control de riesgo completo y un manejo de posiciones flexible, lo que le permite capturar oportunidades de reversión en mercados volátiles. Sin embargo, puede enfrentar desafíos en mercados de fuerte tendencia, que requieren optimización mediante la adición de filtros de tendencia.
Hay mucho espacio para mejorar esta estrategia mediante la adición de confirmación de múltiples ciclos de tiempo, ajuste de parámetros dinámicos y optimización de la gestión de posiciones. Para los operadores cuantitativos, es un marco estratégico valioso que se puede desarrollar y personalizar aún más, especialmente para aquellos mercados en los que se suele producir una reacción excesiva.
/*backtest
start: 2024-05-16 00:00:00
end: 2025-05-14 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="Anomaly Counter-Trend Strategy",
shorttitle="ACTS",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity, // Trade size as a percentage of equity
default_qty_value=1, // Default to 1% of equity per trade
commission_type=strategy.commission.percent, // Commission as a percentage of trade value
commission_value=0.05, // 0.05% commission per trade
slippage=2, // 2 ticks of slippage
process_orders_on_close=true, // Process orders on bar close for more immediate fills
margin_long=100, // Pine v6 default: 100% margin for long
margin_short=100) // Pine v6 default: 100% margin for short
// Inputs for Anomaly Detection
//-----------------------------------------------------------------------------
var GRP_ANOMALY = "Anomaly Detection Parameters"
inpPercentageThreshold = input.float(1, title="Percentage Threshold (%)", minval=0.01, step=0.01, group=GRP_ANOMALY, tooltip="Minimum percentage change (e.g., 2 for 2%) over the lookback period to detect an anomaly. Positive value used for both up/down moves.")
inpLookbackMinutes = input.int(30, title="Lookback Period (Minutes)", minval=1, group=GRP_ANOMALY, tooltip="The period in minutes to look back for calculating the price change. E.g., for a 15-minute period, enter 15.")
// Inputs for Risk Management
//-----------------------------------------------------------------------------
var GRP_RISK = "Risk Management"
inpStopLossTicks = input.int(100, title="Stop Loss (Ticks)", minval=1, group=GRP_RISK, tooltip="Stop-loss distance from entry price in ticks. Adjust based on instrument volatility.")
inpTakeProfitTicks = input.int(200, title="Take Profit (Ticks)", minval=1, group=GRP_RISK, tooltip="Take-profit distance from entry price in ticks. Adjust based on instrument volatility.")
// Inputs for Visual Settings
//-----------------------------------------------------------------------------
var GRP_VISUAL = "Visual Settings"
inpPlotShapes = input.bool(true, title="Plot Trade Signal Shapes", group=GRP_VISUAL, tooltip="If true, plots shapes (triangles) on the chart for buy/sell signals.")
inpBgColor = input.bool(true, title="Highlight Anomaly Background", group=GRP_VISUAL, tooltip="If true, changes the chart background color during detected anomaly periods.")
// Fetch Historical Price Data
//-----------------------------------------------------------------------------
// Fetch the closing price from 'inpLookbackMinutes' ago using 1-minute data for precision.
// The index is inpLookbackMinutes - 1 because array/series indexing is 0-based.
// e.g., for 15 minutes ago, we need the 14th previous 1-minute bar's close.
// A check for inpLookbackMinutes > 0 is included to prevent negative index if input is 0 or 1.
priceNMinutesAgo = request.security(syminfo.tickerid, "1", close[inpLookbackMinutes > 0? inpLookbackMinutes - 1 : 0], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
// Calculate Percentage Change
//-----------------------------------------------------------------------------
percentageChange = 0.0 // Initialize with a default value
if not na(priceNMinutesAgo) and priceNMinutesAgo!= 0.0
// Standard percentage change formula: ((current - past) / past) * 100
percentageChange := ((close - priceNMinutesAgo) / priceNMinutesAgo) * 100.0
// Define Anomaly Conditions
//-----------------------------------------------------------------------------
// A price rise anomaly occurs if the positive percentage change meets or exceeds the threshold.
isPriceRiseAnomaly = percentageChange >= inpPercentageThreshold and inpPercentageThreshold > 0
// A price fall anomaly occurs if the negative percentage change meets or exceeds the (negative) threshold.
isPriceFallAnomaly = percentageChange <= -inpPercentageThreshold and inpPercentageThreshold > 0
// Define Trade Conditions
//-----------------------------------------------------------------------------
// Sell (short) if a price rise anomaly occurs and we are not already short (i.e., flat or long).
// This allows for position reversal if currently long.
sellCondition = isPriceRiseAnomaly and strategy.position_size >= 0
// Buy (long) if a price fall anomaly occurs and we are not already long (i.e., flat or short).
// This allows for position reversal if currently short.
buyCondition = isPriceFallAnomaly and strategy.position_size <= 0
// Execute Trades
//-----------------------------------------------------------------------------
// Entry for Sell (Short)
if sellCondition
strategy.entry("SellAnomaly", strategy.short, comment="Sell on Rise Anomaly")
// Entry for Buy (Long)
if buyCondition
strategy.entry("BuyAnomaly", strategy.long, comment="Buy on Fall Anomaly")
// Risk Management: Stop Loss and Take Profit
//-----------------------------------------------------------------------------
// Apply stop-loss and take-profit if in a long position
if strategy.position_size > 0
strategy.exit(id="Exit Long", from_entry="BuyAnomaly", loss=inpStopLossTicks, profit=inpTakeProfitTicks, comment_profit="TP Long", comment_loss="SL Long")
// Apply stop-loss and take-profit if in a short position
if strategy.position_size < 0
strategy.exit(id="Exit Short", from_entry="SellAnomaly", loss=inpStopLossTicks, profit=inpTakeProfitTicks, comment_profit="TP Short", comment_loss="SL Short")
// Visual Indicators
//-----------------------------------------------------------------------------
// Plot shapes for buy/sell signals if enabled
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.normal, text="BUY")
plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.normal, text="SELL")
// Change background color during anomaly periods if enabled
anomalyDetectedColor = isPriceRiseAnomaly? color.new(color.red, 85) : isPriceFallAnomaly? color.new(color.green, 85) : na
bgcolor(anomalyDetectedColor, title="Anomaly Period Highlight")