이동평균 골든크로스오버 RSI MACD 전략


생성 날짜: 2024-01-05 16:11:23 마지막으로 수정됨: 2024-01-05 16:11:23
복사: 0 클릭수: 649
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동평균 골든크로스오버 RSI MACD 전략

개요

이 전략은 RSI, MACD 및 이동 평균을 이용한 조합 전략이다. RSI의 과매매 신호, MACD의 민감성 및 이동 평균의 지표 효과를 통합하여 시점을 판단한다.

전략 원칙

이 전략은 다음과 같은 네 가지 조건에 따라 결정됩니다.

  1. MACD의 기둥은 설정된 다중입입 변수보다 크다.
  2. RSI가 50보다 크면 과매매 상태입니다.
  3. 단기 EMA가 장기 EMA를 넘어서 골든 크로스 (Gold Cross) 를 형성한다.
  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")