Esta estrategia es un sistema de negociación adaptativo basado en el índice Shiryaev-Zhou (SZI). Identifica las condiciones de mercado de sobrecompra y sobreventa mediante el cálculo de puntuaciones estandarizadas de rendimientos logarítmicos, con el objetivo de capturar oportunidades de reversión media. La estrategia incorpora objetivos dinámicos de stop-loss y take-profit para un control preciso del riesgo.
El núcleo de la estrategia radica en la construcción de un indicador estandarizado utilizando propiedades estadísticas rodantes de retornos logarítmicos.
Esta es una estrategia de negociación cuantitativa construida sobre bases estadísticas sólidas, que captura oportunidades de volatilidad de precios a través de rendimientos logarítmicos estandarizados. Las principales fortalezas de la estrategia se encuentran en su adaptabilidad y control de riesgos integral, aunque sigue habiendo espacio para la optimización en la selección de parámetros y la adaptación al entorno del mercado. A través de la introducción de umbrales dinámicos y mecanismos de confirmación de señales multidimensionales, la estabilidad y fiabilidad de la estrategia pueden mejorarse aún más.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Jalambi Paul model", overlay=true) // Define the length for the rolling window window = input.int(50, title="Window Length", minval=1) threshold = 2.0 // Fixed threshold value risk_percentage = input.float(1.0, title="Risk Percentage per Trade", step=0.1) / 100 // Calculate the logarithmic returns log_return = math.log(close / close[1]) // Calculate the rolling mean and standard deviation rolling_mean = ta.sma(log_return, window) rolling_std = ta.stdev(log_return, window) // Calculate the Shiryaev-Zhou Index (SZI) SZI = (log_return - rolling_mean) / rolling_std // Generate signals based on the fixed threshold long_signal = SZI < -threshold short_signal = SZI > threshold // Plot the signals on the main chart (overlay on price) plotshape(series=long_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", offset=-1) plotshape(series=short_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", offset=-1) // Strategy logic: Buy when SZI crosses below the negative threshold, Sell when it crosses above the positive threshold if (long_signal) strategy.entry("Buy", strategy.long, comment="Long Entry") if (short_signal) strategy.entry("Sell", strategy.short, comment="Short Entry") // Calculate the stop loss and take profit levels based on the percentage of risk stop_loss_pct = input.float(2.0, title="Stop Loss (%)") / 100 take_profit_pct = input.float(4.0, title="Take Profit (%)") / 100 // Set the stop loss and take profit levels based on the entry price strategy.exit("Take Profit / Stop Loss", "Buy", stop=close * (1 - stop_loss_pct), limit=close * (1 + take_profit_pct)) strategy.exit("Take Profit / Stop Loss", "Sell", stop=close * (1 + stop_loss_pct), limit=close * (1 - take_profit_pct)) // Plot the stop loss and take profit levels for visualization (optional) plot(stop_loss_pct != 0 ? close * (1 - stop_loss_pct) : na, color=color.red, linewidth=1, title="Stop Loss Level") plot(take_profit_pct != 0 ? close * (1 + take_profit_pct) : na, color=color.green, linewidth=1, title="Take Profit Level")