이 전략은 여러 기술적 지표를 결합한 자동화 거래 시스템으로, 주로 RSI (비례 강도 지수), CHOP (Choppiness Index) 및 스토카스틱 지표를 사용하여 동적 인 영리 및 스톱 로스 메커니즘을 통해 거래 위험을 관리하는 동시에 시장 트렌드를 식별합니다. 이 전략은 거래 정확성과 신뢰성을 향상시키기 위해 여러 지표의 교차 검증을 활용하여 스칼핑 거래를 위해 5 분 시간 프레임으로 작동합니다.
이 전략은 트렌드 탐지 및 거래 신호 생성에 대한 네 가지 핵심 지표를 사용합니다. 1. 과잉 매수/ 과잉 판매 상태를 식별하는 RSI (RSI <30 과잉 매수, >70 과잉 매수) 2. 시장의 불안정성을 결정하기 위한 CHOP 지수 (<50는 명확한 경향을 나타냅니다) 3. 거래 시점 확인을 위한 스토카스틱 K 및 D 라인 크로스오버 4. 전체 트렌드 지원에 대한 SMA (단순 이동 평균)
거래 규칙은 다음과 같습니다. - 긴 입문: RSI<30 + CHOP<50 + K 선이 D 선 위를 가로지릅니다. - 짧은 입력: RSI>70 + CHOP<50 + K 선이 D 선 아래로 넘는다 이 전략은 리스크 통제를 위해 비율에 기반한 동적 취익 및 스톱 로스 수준을 구현합니다.
이 전략은 여러 지표 조합과 엄격한 위험 통제를 통해 비교적 완전한 거래 시스템을 구축합니다. 최적화의 영역이 있지만 전체 설계는 명확하고 실용적인 응용 가치가 있습니다. 지속적인 최적화 및 매개 변수 조정으로 전략의 안정성과 수익성이 더욱 향상 될 수 있습니다.
/*backtest start: 2024-12-17 00:00:00 end: 2025-01-16 00:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("RSI + CHOP + Stochastic Strategy", overlay=true) // Parametry wskaźników rsiPeriod = input(14, title="RSI Period") chopPeriod = input(14, title="Choppiness Period") stochK = input(14, title="Stochastic K Period") stochD = input(3, title="Stochastic D Period") stochSmoothK = input(3, title="Stochastic Smooth K Period") smaPeriod = input(50, title="SMA Period") // Parametry Take Profit i Stop Loss longTakeProfitPct = input.float(1.0, title="Long Take Profit %", minval=0.1, step=0.1) / 100 longStopLossPct = input.float(5.0, title="Long Stop Loss %", minval=0.1, step=0.1) / 100 shortTakeProfitPct = input.float(1.0, title="Short Take Profit %", minval=0.1, step=0.1) / 100 shortStopLossPct = input.float(5.0, title="Short Stop Loss %", minval=0.1, step=0.1) / 100 // Obliczenia wskaźników rsiValue = ta.rsi(close, rsiPeriod) highLowRange = ta.highest(high, chopPeriod) - ta.lowest(low, chopPeriod) chopIndex = 100 * math.log10(highLowRange / ta.sma(close, chopPeriod)) / math.log10(2) stoch = ta.stoch(close, high, low, stochK) k = stoch[0] d = stoch[1] // Obliczenia SMA smaValue = ta.sma(close, smaPeriod) // Warunki kupna i sprzedaży buyCondition = (rsiValue < 30) and (chopIndex < 50) and (ta.crossover(k, d)) sellCondition = (rsiValue > 70) and (chopIndex < 50) and (ta.crossunder(k, d)) var float longStopLevel = na var float longTakeProfitLevel = na var float shortStopLevel = na var float shortTakeProfitLevel = na // Wejście w pozycję długą if (buyCondition and na(longStopLevel)) strategy.entry("Long", strategy.long) longStopLevel := na // Zresetuj poziom Stop Loss longTakeProfitLevel := na // Zresetuj poziom Take Profit // Wejście w pozycję krótką if (sellCondition and na(shortStopLevel)) strategy.entry("Short", strategy.short) shortStopLevel := na // Zresetuj poziom Stop Loss shortTakeProfitLevel := na // Zresetuj poziom Take Profit // Ustaw poziomy Take Profit i Stop Loss na podstawie ceny wejścia w pozycję if (strategy.position_size > 0 and na(longTakeProfitLevel)) longStopLevel := strategy.position_avg_price * (1 - longStopLossPct) longTakeProfitLevel := strategy.position_avg_price * (1 + longTakeProfitPct) if (strategy.position_size < 0 and na(shortTakeProfitLevel)) shortStopLevel := strategy.position_avg_price * (1 + shortStopLossPct) shortTakeProfitLevel := strategy.position_avg_price * (1 - shortTakeProfitPct) // Resetowanie poziomów po wyjściu z pozycji if (strategy.position_size == 0) longStopLevel := na longTakeProfitLevel := na shortStopLevel := na shortTakeProfitLevel := na // Wyjście z pozycji długiej if (strategy.position_size > 0) strategy.exit("Take Profit", "Long", limit=longTakeProfitLevel, stop=longStopLevel) // Wyjście z pozycji krótkiej if (strategy.position_size < 0) strategy.exit("Take Profit", "Short", limit=shortTakeProfitLevel, stop=shortStopLevel) // Oznaczenie poziomów stop loss i take profit na wykresie plot(series=longStopLevel, title="Long Stop Loss", color=color.red, linewidth=1, style=plot.style_circles) plot(series=longTakeProfitLevel, title="Long Take Profit", color=color.green, linewidth=1, style=plot.style_circles) plot(series=shortStopLevel, title="Short Stop Loss", color=color.red, linewidth=1, style=plot.style_circles) plot(series=shortTakeProfitLevel, title="Short Take Profit", color=color.green, linewidth=1, style=plot.style_circles) // Wyświetlanie wskaźników na wykresie plot(rsiValue, title="RSI", color=color.blue, linewidth=2) hline(30, "RSI 30", color=color.red) hline(70, "RSI 70", color=color.red) plot(chopIndex, title="Choppiness Index", color=color.purple, linewidth=2) hline(50, "CHOP 50", color=color.red) plot(k, title="Stochastic K", color=color.green, linewidth=2) plot(d, title="Stochastic D", color=color.red, linewidth=2) hline(20, "Stoch 20", color=color.red) hline(80, "Stoch 80", color=color.red) // Wyświetlanie SMA na wykresie plot(smaValue, title="SMA", color=color.orange, linewidth=2)