이 전략은 상대적 강도 지수 (RSI) 를 기반으로 한 적응 거래 시스템으로, 과잉 구매 및 과잉 판매 임계치의 역동적 조정으로 거래 신호 발생을 최적화합니다. 핵심 혁신은 시장 추세와 가격 변동성에 따라 RSI 트리거 임계치를 역동적으로 조정하여 전통적인 RSI 전략의 효과를 향상시키는 Bufi
핵심 개념은 전통적인 고정 임계 RSI 시스템을 동적 임계 시스템으로 업그레이드하는 것입니다. 구현 세부 사항:
이 전략은 두 가지 위험 통제 메커니즘을 포함합니다.
이 혁신적인 적응형 거래 전략은 역동적 임계 최적화를 통해 전통적인 RSI 전략의 한계를 해결합니다. 전략은 강력한 적응력과 위험 제어 기능을 갖춘 시장 추세와 변동성을 포괄적으로 고려합니다. 매개 변수 최적화에 도전이 있지만 지속적인 개선과 최적화는이 전략을 실제 거래에 유망합니다. 거래자는 특정 시장 특성에 따라 적절한 조정을 통해 라이브 구현 전에 철저한 백테스팅과 매개 변수 최적화를 수행하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-11 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PineCodersTASC // TASC Issue: October 2024 // Article: Overbought/Oversold // Oscillators: Useless Or Just Misused // Article By: Francesco P. Bufi // Language: TradingView's Pine Script™ v5 // Provided By: PineCoders, for tradingview.com //@version=5 title ='TASC 2024.10 Adaptive Oscillator Threshold' stitle = 'AdapThrs' strategy(title, stitle, false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, slippage = 5) // --- Inputs --- string sys = input.string("BAT", "System", options=["Traditional", "BAT"]) int rsiLen = input.int(2, "RSI Length", 1) int buyLevel = input.int(14, "Buy Level", 0) int adapLen = input.int(8, "Adaptive Length", 2) float adapK = input.float(6, "Adaptive Coefficient") int exitBars = input.int(28, "Fixed-Bar Exit", 1, group = "Strategy Settings") float DSL = input.float(1600, "Dollar Stop-Loss", 0, group = "Strategy Settings") // --- Functions --- // Bufi's Adaptive Threshold BAT(float price, int length) => float sd = ta.stdev(price, length) float lr = ta.linreg(price, length, 0) float slope = (lr - price[length]) / (length + 1) math.min(0.5, math.max(-0.5, slope / sd)) // --- Calculations --- float osc = ta.rsi(close, rsiLen) // Strategy entry rules // - Traditional system if sys == "Traditional" and osc < buyLevel strategy.entry("long", strategy.long) // - BAT system float thrs = buyLevel * adapK * BAT(close, adapLen) if sys == "BAT" and osc < thrs strategy.entry("long", strategy.long) // Strategy exit rules // - Fixed-bar exit int nBar = bar_index - strategy.opentrades.entry_bar_index(0) if exitBars > 0 and nBar >= exitBars strategy.close("long", "exit") // - Dollar stop-loss if DSL > 0 and strategy.opentrades.profit(0) <= - DSL strategy.close("long", "Stop-loss", immediately = true) // Visuals rsiColor = #1b9e77 thrsColor = #d95f02 rsiLine = plot(osc, "RSI", rsiColor, 1) thrsLine = plot(sys == "BAT" ? thrs : buyLevel, "Threshold", thrsColor, 1) zeroLine = plot(0.0, "Zero", display = display.none) fill(zeroLine, thrsLine, sys == "BAT" ? thrs : buyLevel, 0.0, color.new(thrsColor, 60), na)