이 전략은 트레이더 다이내믹 인덱스 (TDI) 를 주요 기술 지표로 사용하며, 다른 시간 프레임에 걸쳐 이동 평균과 결합하여 거래 신호를 생성합니다. 과잉 구매 및 과잉 판매 상태에서 평균 반전 기회를 포착하는 것을 목표로합니다.
이 전략은 먼저 13의 기간으로 닫는 RSI를 계산하고, 그 다음 RSI의 34주기 간단한 이동 평균을 계산하고, RSI의 34주기 표준편차의 1.6185배를 상부와 하부 대역으로 사용합니다. 상부 대역은 이동 평균과 오프셋이며, 하부 대역은 이동 평균 빼기 오프셋입니다. 이동 평균은 중간 대역입니다.
그 후, 2의 기간과 RSI의 빠른 MA를 계산하고 7의 기간과 RSI의 느린 MA를 계산합니다. 그 다음 더 높은 시간 프레임에서 이러한 지표의 역사적 값을 검색합니다. 빠른 MA가 느린 MA 아래로 넘을 때 구매 신호가 생성됩니다. 빠른 MA가 느린 MA 위에 넘을 때 판매 신호가 생성됩니다.
이 전략은 RSI의 평균 역행 특성을 활용하고 역행 거래를 구현하기 위해 모멘텀 지표를 결합합니다. RSI의 상부 및 하부 대역은 과잉 구매 및 과잉 판매 조건을 반영하며 중간 대역은 평균 가격 수준을 반영합니다. 빠르고 느린 MAs의 크로스오버는 모멘텀 변화와 역행 기회를 반영합니다. 전반적으로이 전략은 이상적인 드래운드 컨트롤과 함께 역행 지점을 정확하게 캡처합니다.
특히, RSI 대역은 적당한 과잉 구매 및 과잉 판매 임계치를 설정하여 오너마리를 신속히 감지합니다. 중간 대역은 균형 가격 수준을 파악합니다. 빠른 MA는 단기 잡음을 필터하고 느린 MA는 중장기 트렌드를 결정합니다. 함께 작업하면 역전 기회를 효과적으로 식별 할 수 있습니다. 또한, 다른 시간 프레임에 대한 지표의 조합은 전략이 여러 시간 지평을 통해 확인하여 잘못된 신호의 위험을 줄일 수 있습니다.
이 전략은 주로 평균 회귀를 기반으로하며, 이는 고유한 타이밍 위험을 가지고 있습니다. 시장이 짧은 압축과 같은 장기간 비합리적 인 팽창을 겪으면 연속적 손실이 발생할 수 있습니다. 또한 빠르고 느린 MAs를 적절히 설정하지 않으면 놓친 회귀 기회 또는 잘못된 신호가 발생할 수 있습니다. 어느 정도의 매개 변수 최적화가 필요합니다.
위의 위험을 제어하기 위해 MA 기간을 합리적으로 조정하거나 스톱 로스 메커니즘을 추가하는 것이 좋습니다. 시장이 비합리적인 체제에 들어갈 때 포지션 크기를 줄이거나 거래를 완전히 중단해야합니다. 전반적으로 특정 시장 환경에 전략을 조정하는 것이 중요합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
다른 길이의 RSI 기간을 테스트하여 현재 시장 조건에 더 적합한 설정을 찾습니다.
빠른 MAs와 느린 MAs의 길이를 최적화하여 회전 포착과 소음을 필터링하는 균형을 맞추십시오.
최대 마감을 제어하기 위해 변동성 기반의 스톱 손실을 추가합니다.
정확성을 높이기 위해 입력 논리에서 볼륨 변화와 같은 다른 요소를 추가해보세요.
여러 시간 프레임에서 동일한 거래 신호를 재사용하는 효과를 테스트합니다.
동적 매개 변수 조절을 위한 적응적 최적화 메커니즘 개발
이 RSI 역전 전략의 전반적인 틀은 명확하고 해석 가능한 논리로 합리적입니다. 사용자 정의 가능한 공간과 최적화 잠재력을 가지고 있습니다. 적절한 매개 변수 조정 및 위험 통제와 함께 역전 포착 능력은 유망합니다. 다음 단계는 더 많은 백테스팅과 매개 변수 조정을 통해 전략을 더 최적화하여 안정성과 수익성을 향상시키는 것입니다.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("TDI - Traders Dynamic Index [Mehdi]", shorttitle="TDIMEHDI") rsiPeriod = input(13, minval = 1, title = "RSI Period") bandLength = input(34, minval = 1, title = "Band Length") lengthrsipl = input(7, minval = 0, title = "Fast MA on RSI") lengthtradesl = input(2, minval = 1, title = "Slow MA on RSI") p1 = input("15", title = "Signal Timeframe") src = close // Source of Calculations (Close of Bar) r = rsi(src, rsiPeriod) // RSI of Close ma = sma(r, bandLength) // Moving Average of RSI [current] offs = (1.6185 * stdev(r, bandLength)) // Offset up = ma + offs // Upper Bands dn = ma - offs // Lower Bands mid = (up + dn) / 2 // Average of Upper and Lower Bands fastMA = sma(r, lengthrsipl) // Moving Average of RSI 2 bars back slowMA = sma(r, lengthtradesl) // Moving Average of RSI 7 bars back hline(20) // ExtremelyOversold hline(30) // Oversold hline(50) // Midline hline(70) // Overbought hline(80) // ExtremelyOverbought up1 = request.security(syminfo.tickerid, p1, up) dn1 = request.security(syminfo.tickerid, p1, dn) mid1 = request.security(syminfo.tickerid, p1, mid) slowMA1 = request.security(syminfo.tickerid, p1, slowMA) fastMA1 = request.security(syminfo.tickerid, p1, fastMA) plot(up1, "Upper Band", color = #3286c3, linewidth = 2) // Upper Band plot(dn1, "Lower Band", color = #3286c3, linewidth = 2) // Lower Band plot(mid1, "Middle of Bands", color = yellow, linewidth = 2) // Middle of Bands plot(slowMA1, "Slow MA", color=green, linewidth=2) // Plot Slow MA plot(fastMA1, "Fast MA", color=red, linewidth=1) // Plot Fast MA if (crossover(slowMA1, fastMA1)) strategy.entry("Buy", strategy.long, comment="Buy") if (crossunder(slowMA1, fastMA1)) strategy.entry("Sell", strategy.short, comment="Sell")