개선된 RSI MACD 이동 평균 전략

저자:차오장, 날짜: 2024-01-05 16:11:23
태그:

img

전반적인 설명

이것은 RSI, MACD 및 이동 평균을 활용한 조합 전략입니다. 그것은 RSI의 과잉 구매/ 과잉 판매 신호, MACD의 민감도 및 입력 지점을 결정 할 때 이동 평균의 지표 효과를 통합합니다.

전략 논리

이 전략은 주로 다음 네 가지 조건에 따라 장기 진출을 결정합니다.

  1. MACD 히스토그램이 정해진 긴 입상수준보다 크다.
  2. RSI가 50보다 높으면 과잉 매입 상태가 나타납니다.
  3. 단기 EMA는 긴 기간 EMA를 가로지르며 황금색 십자가를 형성합니다.
  4. 클로즈 가격은 장기 EMA를 통과하고 장기 EMA와 ATR 스톱 로스 범위보다 높습니다.

다음 두 가지 출구 조건이 충족되면 전략은 손해를 막기 위해 포지션을 닫습니다.

  1. MACD 히스토그램이 설정된 스톱 로스 레벨보다 낮습니다.
  2. 짧은 기간 EMA는 긴 기간 EMA 아래로 넘어가 생체 교차점을 형성합니다.

따라서 전략은 적시에 손실을 멈추고 수익을 취하거나 회귀할 때 큰 손실을 피합니다.

이점 분석

이 전략의 가장 큰 장점은 각 지표의 장점을 최대한 발휘하는 지표의 조합 사용에 있습니다.

  1. RSI의 적용은 범위에 묶인 시장에서 반복적으로 포지션을 개설함으로써 발생하는 거래 수수료 손실을 피합니다.

  2. MACD 히스토그램 지표의 민감도는 전환점을 적시에 포착 할 수 있습니다.

  3. 이동 평균은 단기 시장 소음을 필터링하고 지표 효과를 완전히 발휘합니다.

위험 과 해결책

이 전략의 주요 위험은 다음과 같습니다.

  1. 높은 리트레이싱 위험. 트렌드를 따르는 전략과 같은 이동 평균의 가장 큰 위험은 트렌드 역전으로 인한 큰 인회입니다. 이것은 포지션 사이징, 스톱 로스 등을 통해 적극적으로 제어 할 수 있습니다.

  2. 매개 변수 최적화에 어려움이 있다. 다중 지표 결합 전략은 매개 변수 설정 및 최적화에 더 큰 어려움을 겪는다. 앞으로 걷는 방법, 유전 알고리즘과 같은 방법은 최적화된 매개 변수를 위해 채택될 수 있다.

강화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 잘못된 신호를 더 피하기 위해 추가 필터를 증가하십시오. 예를 들어 볼륨, 변동성 지표 등과 결합하십시오.

  2. 더 많은 제품에 맞는 테스트 매개 변수 차이 더 많은 품종에 적응하도록 매개 변수를 조정합니다.

  3. 이동 평균 매개 변수 설정을 최적화. 다양한 길이 매개 변수의 차이를 테스트.

  4. 적응적인 이동평균을 조사하고 시장 체제에 따라 다른 매개 변수를 변경합니다.

결론

결론적으로, 이 전략은 이동 평균 및 트렌드 다음 전략의 전형적인 최적화된 버전이다. 그것은 타이밍 엔트리 및 스톱 손실의 측면에서 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")

더 많은