이것은 RSI, MACD 및 이동 평균을 활용한 조합 전략입니다. 그것은 RSI의 과잉 구매/ 과잉 판매 신호, MACD의 민감도 및 입력 지점을 결정 할 때 이동 평균의 지표 효과를 통합합니다.
이 전략은 주로 다음 네 가지 조건에 따라 장기 진출을 결정합니다.
다음 두 가지 출구 조건이 충족되면 전략은 손해를 막기 위해 포지션을 닫습니다.
따라서 전략은 적시에 손실을 멈추고 수익을 취하거나 회귀할 때 큰 손실을 피합니다.
이 전략의 가장 큰 장점은 각 지표의 장점을 최대한 발휘하는 지표의 조합 사용에 있습니다.
RSI의 적용은 범위에 묶인 시장에서 반복적으로 포지션을 개설함으로써 발생하는 거래 수수료 손실을 피합니다.
MACD 히스토그램 지표의 민감도는 전환점을 적시에 포착 할 수 있습니다.
이동 평균은 단기 시장 소음을 필터링하고 지표 효과를 완전히 발휘합니다.
이 전략의 주요 위험은 다음과 같습니다.
높은 리트레이싱 위험. 트렌드를 따르는 전략과 같은 이동 평균의 가장 큰 위험은 트렌드 역전으로 인한 큰 인회입니다. 이것은 포지션 사이징, 스톱 로스 등을 통해 적극적으로 제어 할 수 있습니다.
매개 변수 최적화에 어려움이 있다. 다중 지표 결합 전략은 매개 변수 설정 및 최적화에 더 큰 어려움을 겪는다. 앞으로 걷는 방법, 유전 알고리즘과 같은 방법은 최적화된 매개 변수를 위해 채택될 수 있다.
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
잘못된 신호를 더 피하기 위해 추가 필터를 증가하십시오. 예를 들어 볼륨, 변동성 지표 등과 결합하십시오.
더 많은 제품에 맞는 테스트 매개 변수 차이 더 많은 품종에 적응하도록 매개 변수를 조정합니다.
이동 평균 매개 변수 설정을 최적화. 다양한 길이 매개 변수의 차이를 테스트.
적응적인 이동평균을 조사하고 시장 체제에 따라 다른 매개 변수를 변경합니다.
결론적으로, 이 전략은 이동 평균 및 트렌드 다음 전략의 전형적인 최적화된 버전이다. 그것은 타이밍 엔트리 및 스톱 손실의 측면에서 MACD 및 RSI와 같은 주류 지표의 강점을 흡수한다. 다음 단계는 매개 변수 최적화 및 위험 통제와 같은 관점에서 개선하여 전략을 더 견고하고 더 많은 제품에 적응 할 수 있도록 함으로써 더 높은 안정성을 초래할 수 있다.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true) // Inputs src = input(close, title="RSI Source") // RSI Settings lengthRSI = input.int(14, minval=1) // Stop Loss Settings stopLossPct = input.float(0.09, title="Stop Loss Percentage") takeProfitPct = input.float(0.15, title="Take Profit Percentage") // MACD Settings fastlen = input(12) slowlen = input(26) siglen = input(9) // Strategy Settings longEntry = input(0, title="Long Entry Level") exitLevel = input(0, title="Exit Level") // EMA Settings emaShortLength = input(8, title="Short EMA Length") emaLongLength = input(21, title="Long EMA Length") atrMultiplier = input.float(2, title="atrMultiplier") atrLength = input.int(20, title="atrLength") // Indicators rsi1 = ta.rsi(src, lengthRSI) [macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen) // Calculate EMAs emaShort = ta.ema(src, emaShortLength) emaLong = ta.ema(src, emaLongLength) // Calculate ATR atr = ta.atr(atrLength) // Variables var bool canEnterLong = na // Strategy conditions longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr // Entries and Exits if hist < exitLevel and emaShort < emaLong canEnterLong := true strategy.close("Long") // Store last entry price var lastEntryPrice = float(na) var lastEntryPrice2 = float(na) if longCondition strategy.entry("Long", strategy.long) canEnterLong := false lastEntryPrice := close if lastEntryPrice < close lastEntryPrice := close // Calculate Stop Loss and Take Profit Levels based on last entry price stopLossLevel = lastEntryPrice * (1 - stopLossPct) // Check for stop loss and take profit levels and close position if triggered if (strategy.position_size > 0) last_buy = strategy.opentrades[0] if (close < stopLossLevel) strategy.close("Long", comment="Stop Loss Triggered") if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) ) strategy.close("Long", comment="Take Profit Triggered")