이 전략은 Shiryaev-Zhou Index (SZI) 를 기반으로 한 적응형 거래 시스템이다. 이 전략은 평균 회귀 기회를 포착하는 것을 목표로 로그아리듬 수익률의 표준화된 점수를 계산하여 과반 구매 및 과반 판매 시장 조건을 식별합니다. 이 전략은 정확한 위험 통제를 위해 동적 스톱 로스 및 영업 목표를 통합합니다.
전략의 핵심은 로그아리듬적 수익의 롤링 통계적 특성을 사용하여 표준화된 지표를 구성하는 데 있습니다. 구체적인 단계는 다음과 같습니다.
이것은 견고한 통계적 기초에 기반을 둔 양적 거래 전략이며, 표준화 된 로가리듬 수익을 통해 가격 변동 가능성을 포착합니다. 전략의 주요 장점은 적응력과 포괄적인 위험 통제에 있습니다. 그러나 매개 변수 선택 및 시장 환경 적응에 최적화 할 여지가 남아 있습니다. 동적 임계 및 다차원 신호 확인 메커니즘을 도입함으로써 전략의 안정성과 신뢰성이 더욱 향상 될 수 있습니다.
/*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")