이 전략은 트렌드를 따르는 거래 시스템으로 단순 이동 평균 (SMA) 과 상대 강도 지수 (RSI) 를 결합합니다. 주로 상승 추세를 식별하기 위해 200 기간 SMA를 사용하고 입시 시기를 최적화하기 위해 RSI를 필터로 사용합니다. 이 전략은 또한 리스크를 제어하고 이익을 잠금하기 위해 수익을 취하고 손실을 멈추는 메커니즘을 통합합니다.
이 전략의 핵심 논리는 다음의 핵심 요소들을 포함합니다.
트렌드 식별: 200 기간 SMA를 장기 트렌드 지표로 사용합니다. 가격이 SMA를 넘어서고 SMA를 넘어서면 잠재적인 상승 추세로 간주됩니다.
진입 확인: 트렌드 안정성을 보장하기 위해 가격이 최소 30 개의 연속 기간 (분) 동안 SMA보다 높게 유지되도록 요구합니다.
RSI 필터: RSI가 30 (가장 팔린 지역) 이면만 입시를 허용하는 14 기간 RSI 지표를 사용합니다. 이는 잠재적인 리바운드 기회를 잡는 데 도움이됩니다.
리스크 관리: 거래당 최대 손실을 제한하기 위해 0.5%의 스톱 로스 수준을 설정합니다.
이윤 목표: 예상 수익이 달성되면 자동으로 포지션을 닫기 위해 2%의 이윤 취득 수준을 설정합니다.
전략 실행 과정은 다음과 같습니다.
트렌드 추적: 장기적인 SMA를 활용하여 주요 트렌드를 파악하여 강력한 상승 시장에서 이익을 얻는 데 도움이됩니다.
엔트리 최적화: 가격이 30 기간 동안 SMA보다 높게 유지되도록 요구하면 잘못된 브레이크오프를 필터링하여 엔트리 품질을 향상시킵니다.
역전 캡처: RSI 과잉 판매 조건을 결합하면 트렌드의 시작에서 잠재적인 리바운드 기회를 캡처 할 수 있습니다.
리스크 제어: 명확한 스톱 로스 레벨을 설정하면 각 거래의 최대 리스크를 효과적으로 제한합니다.
이윤 잠금: 미리 설정된 이윤 취득 수준은 예상 수익이 달성되면 자동 이윤 잠금을 보장합니다.
객관성: 명확한 전략 규칙은 주관적 판단의 감정적 영향을 줄입니다.
정량화 가능: 전략 매개 변수는 과거 데이터를 사용하여 역 테스트 및 최적화 할 수 있습니다.
가짜 브레이크: 부진하거나 불안정한 시장에서 빈번한 가짜 브레이크는 연속적인 스톱 손실로 이어질 수 있습니다.
지연: 지연 지표로서의 SMA는 트렌드의 시작에서 몇 가지 기회를 놓칠 수도 있고 트렌드가 끝나면 포지션을 유지할 수도 있습니다.
RSI 제한: 엄격한 RSI 조건은 특히 강한 상승 추세에서 좋은 진입 기회를 놓칠 수 있습니다.
고정된 영업 및 중단 손실: 미리 설정된 비율은 모든 시장 조건에 적합하지 않을 수 있으며 매우 변동적인 시장에서 너무 일찍 작동 할 수 있습니다.
단일 방향: 전략은 장기적으로만 지속되며, 하향 추세에서 이익을 얻을 수 없습니다.
매개 변수 민감성: 전략 성능은 SMA 기간, 확인 기간 및 RSI 설정의 변화에 민감할 수 있습니다.
시장 적응성: 전략은 특정 시장이나 시간 프레임에서 잘 수행 할 수 있지만 모든 상황에 적용되지 않을 수 있습니다.
동적 취득 및 중지 손실: 다른 시장 변동 조건에 적응하기 위해 동적 취득 및 중지 손실 수준을 설정하기 위해 ATR (평균 진정한 범위) 를 사용하는 것을 고려하십시오.
다중 시간 프레임 확인: 신호 신뢰성을 향상시키기 위해 입력 전에 일일 및 시간 차트 두 가지 조건이 충족되어야하는 것과 같은 여러 시간 프레임에 대한 확인 메커니즘을 도입하십시오.
트렌드 강도 필터: ADX (평균 방향 지표) 를 추가하여 트렌드 강도를 측정하고 강한 트렌드 중만 입력합니다.
변동성 조정: 낮은 변동성 중 확인 기간을 늘리고 높은 변동성 중 확정 기간을 줄이는 것과 같은 시장 변동성에 기초한 매개 변수를 동적으로 조정합니다.
쇼트 판매 메커니즘을 추가하십시오. 가격이 SMA 이하로 떨어지고 RSI가 과잉 구매되면 쇼트 판매를 고려하여 전략이 양쪽 방향으로 이익을 얻을 수 있습니다.
RSI 사용 최적화: 입시 신호 신뢰성을 높이기 위해 RSI 오차를 사용하거나 다른 지표 (MACD와 같은) 와 결합하는 것을 고려하십시오.
부피 확인을 도입합니다. 부피 분석을 추가하여 충분한 거래 부피로 브레이크오웃 또는 반전이 지원되는지 확인합니다.
시간 필터: 알려진 낮은 유동성 기간 동안 거래를 피하기 위해 시간 필터를 추가합니다.
자금 관리 최적화: 역동적인 포지션 크기를 구현하고 계정 크기와 시장 변동성에 따라 각 거래에 대한 위험 노출을 조정합니다.
지표 조합을 증가 시키십시오: 더 포괄적인 거래 시스템을 구축하기 위해 볼링거 밴드 및 피보나치 리트레이싱과 같은 다른 기술 지표를 결합하는 것을 고려하십시오.
그러나 전략은 또한 가짜 브레이크에 취약하고 롱 트레이드에 한정되는 것과 같은 몇 가지 한계를 가지고 있습니다. 전략의 안정성과 적응력을 더욱 향상시키기 위해 동적 인 수익 및 스톱 로스 레벨, 멀티 타임프레임 확인, 트렌드 강도 필터링 및 기타 최적화 조치를 도입하는 것을 고려하는 것이 좋습니다. 또한 단장 매매 메커니즘을 추가하고 돈 관리 전략을 최적화하는 것이 시스템의 전반적인 성능을 크게 향상시킬 수 있습니다.
요약하자면, 이 전략은 트렌드 추적 및 모멘텀 트레이딩에 좋은 출발점을 제공합니다. 지속적인 백테스팅, 최적화 및 라이브 트레이딩 검증을 통해 거래자는 특정 시장 환경과 개별 위험 선호도에 따라 이 전략을 더욱 정비하고 사용자 정의하여 더 나은 거래 결과를 얻을 수 있습니다.
/*backtest start: 2024-07-21 00:00:00 end: 2024-07-28 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA 200 with RSI Filter", overlay=true) // Inputs smaLength = input.int(200, title="SMA Length") confirmBars = input.int(30, title="Confirmation Bars (30 minutes)") takeProfitPerc = input.float(2.0, title="Take Profit (%)", step=0.1) / 100 stopLossPerc = input.float(0.5, title="Stop Loss (%)", step=0.1) / 100 rsiLength = input.int(14, title="RSI Length") rsiOverbought = input.int(70, title="RSI Overbought Level") rsiOversold = input.int(30, title="RSI Oversold Level") // Calculate SMA sma = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Buy condition priceAboveSMA = close > sma aboveSMAcount = ta.barssince(priceAboveSMA == false) rsiCondition = rsi < rsiOversold enterLongCondition = priceAboveSMA and aboveSMAcount >= confirmBars and rsiCondition // Track entry price for calculating take profit and stop loss levels var float entryPrice = na if (enterLongCondition and na(entryPrice)) entryPrice := close // Ensure the entryPrice is only set when a position is opened if (strategy.opentrades == 0) entryPrice := na takeProfitLevel = entryPrice * (1 + takeProfitPerc) stopLossLevel = entryPrice * (1 - stopLossPerc) // Exit conditions takeProfitCondition = close >= takeProfitLevel stopLossCondition = close <= stopLossLevel // Plot SMA and RSI plot(sma, title="SMA 200", color=color.blue) hline(rsiOverbought, "Overbought", color=color.red) hline(rsiOversold, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.purple) // Plot shapes for entries and exits plotshape(series=enterLongCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=takeProfitCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="TP") plotshape(series=stopLossCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SL") // Strategy entry and exit if (enterLongCondition) strategy.entry("Long", strategy.long, comment="SMA200LE") if (takeProfitCondition or stopLossCondition) strategy.close("Long", when=takeProfitCondition or stopLossCondition) // Reset entry price after position is closed if (strategy.position_size == 0) entryPrice := na