RSI와 MACD 크로스오버 전략 기반


생성 날짜: 2024-03-15 15:08:39 마지막으로 수정됨: 2024-03-15 15:08:39
복사: 0 클릭수: 420
1
집중하다
1166
수행원

RSI와 MACD 크로스오버 전략 기반

전략 개요

RSI와 MACD의 교차 전략은 상대적으로 약한 지수 ((RSI) 와 이동 평균의 교차 분산 지수 ((MACD) 를 기반으로 한 거래 전략이다. 이 전략은 RSI와 MACD의 교차 신호를 사용하여 잠재적인 구매 및 판매 기회를 식별한다. RSI가 초상 판매 영역에서 상향으로 돌파하고 MACD 기둥이 부정적으로 수정되면 구매 신호가 발생한다. RSI가 초상 구매 영역에서 하향으로 돌파되고 MACD 기둥이 부정적으로 수정되면 판매 신호가 발생한다.

이 전략은 또한 두 개의 지수 이동 평균 ((EMA) 을 추가적인 확인 지표로 도입한다. 짧은 기간의 EMA (예: 10 일 EMA) 와 긴 기간의 EMA (예: 20 일 EMA) 의 교차는 RSI와 MACD에서 발생하는 신호를 확인하는 데에도 사용될 수 있다. 가격이 두 개의 EMA 위에 있을 때 구매 신호를 추가로 확인하고, 가격이 두 개의 EMA 아래에 있을 때 판매 신호를 추가로 확인한다.

전략 원칙

  1. RSI 지수를 계산합니다. Ta-Lib 라이브러리의 ta.rsi () 함수를 사용하여 RSI 값을 계산합니다. RSI는 주어진 시간 동안의 가격 변화의 크기를 측정하는 동적 지표입니다.

  2. MACD 지표 계산: Ta-Lib의 ta.macd () 함수를 사용하여 MACD 라인, 신호 라인 및 기둥 그래프를 계산하십시오. MACD는 두 개의 이동 평균의 차원에서 계산되는 트렌드 추적 지표입니다.

  3. 계산 EMA 지표: Ta-Lib 저장소의 ta.ema () 함수를 사용하여 10일 EMA와 20일 EMA를 계산한다. EMA는 무게를 줄인 이동 평균으로 최근 가격 변화에 더 민감하다.

  4. 구매 조건을 정의합니다. RSI가 초상조 (기본 40 이하) 에서 상향으로 돌파되고 MACD 기둥이 마이너스로 교정되면 구매 신호가 발생합니다. 이는 가격이 곧 상승 할 수 있음을 나타냅니다.

  5. 판매 조건의 정의: RSI가 초고 구매 지역 (기본 60 이상) 에서 하향으로 돌파되고 MACD 기둥 그래프가 긍정적으로 부정적으로 변할 때 판매 신호가 발생한다. 이것은 가격이 떨어질 가능성이 있음을 나타냅니다.

  6. 확인으로 EMA를 사용한다: 가격이 10일 EMA와 20일 EMA 위에 있을 때, 추가로 확인 구매 신호; 가격이 10일 EMA와 20일 EMA 아래에 있을 때, 추가로 확인 판매 신호.

  7. 신호를 그리기: 차트에 녹색 상향 삼각형으로 표시된 구매 신호, 빨간색 상향 삼각형으로 표시된 판매 신호

전략적 이점

  1. 다중 지표 결합: 이 전략은 RSI, MACD, EMA의 세 가지 일반적인 기술 지표를 결합하여 더 신뢰할 수있는 거래 신호를 제공합니다.

  2. 트렌드 추적: MACD 지표는 가격 트렌드의 변화를 식별하는 데 도움이 되며, 전략이 다른 시장 조건에 적응할 수 있도록 합니다.

  3. 동력 확인: RSI 지표는 가격 동력의 확인을 제공하여 잘못된 신호를 제거하는 데 도움이됩니다.

  4. 간단하고 사용하기 쉬운: 전략은 간단한 지표 계산과 신호 정의를 사용하여 이해하기 쉽고 구현할 수 있습니다.

  5. 적응성: RSI와 MACD의 매개 변수를 조정하여 다양한 시장과 거래 품종에 맞게 전략을 최적화 할 수 있습니다.

전략적 위험

  1. 매개 변수 감수성: 전략의 성능은 RSI와 MACD의 매개 변수 선택에 민감할 수 있다. 부적절한 매개 변수는 신호 품질이 떨어질 수 있다.

  2. 신호 지연: MACD는 이동 평균을 기반으로 계산되기 때문에 신호 지연이 있을 수 있다. 이것은 최적의 출전 시간을 놓치게 할 수 있다.

  3. 흔들리는 시장: 흔들리는 시장 조건에서 RSI와 MACD는 자주 교차 신호를 생성하여 과도한 거래와 자금 손실을 초래할 수 있습니다.

  4. 스톱의 부재: 이 전략은 명확하게 정의된 스톱 조건이 없으며, 가격의 급격한 변동 시 큰 위험을 감수할 수 있다.

최적화 방향

  1. 트렌드 필터 도입: 구매 또는 판매 신호를 생성하기 전에 가격이 명확한 상승 또는 하락 추세에 있음을 확인합니다. 이것은 장기 이동 평균의 방향을 평가하거나 트렌드 지표를 사용하여 수행 할 수 있습니다.

  2. 최적화 변수 선택: 역대 데이터를 재검토하고 최적화하여 신호의 신뢰성과 정확성을 높이기 위해 최적의 RSI와 MACD 변수 조합을 찾아내는 방법

  3. 스톱로스 및 스톱스톱을 추가: 잠재적인 손실을 제한하고 이익을 보호하기 위해 각 거래에 대한 적절한 스톱로스 및 스톱스톱 수준을 설정하십시오. 스톱로스 및 스톱스톱 위치를 결정하려면 퍼센트 또는 ATR과 같은 방법을 사용할 수 있습니다.

  4. 거래량을 고려하십시오: 거래량 지표를 전략에 포함하여 가격 변화의 유효성을 확인하십시오. 거래량이 증가하면 트렌드의 강도를 확인할 수 있으며 거래량이 감소하면 트렌드가 반전 될 수 있습니다.

  5. 다른 지표와 결합: 추가 확인과 필터링을 제공하기 위해 브린 밴드, 무작위 지표와 같은 다른 기술 지표를 전략에 포함시키는 것을 고려하십시오.

요약하다

RSI와 MACD의 교차전략은 상대적으로 약한 지수, 이동 평균의 교차 분산 지수와 지수 이동 평균을 결합한 거래 전략이다. 이 전략은 RSI와 MACD의 교차 신호를 식별하여 구매 및 판매 신호를 생성하고 추가적인 확인으로 EMA를 사용합니다.

이 전략의 장점은 여러 일반적인 지표가 결합되어 다양한 시장 조건에 적응할 수 있고 이해하기 쉽고 실행할 수 있다는 것입니다. 그러나, 전략에는 파라미터 민감성, 신호 지연 및 명확한 중단 규칙이 없는 것과 같은 몇 가지 위험도 있습니다.

전략을 개선하기 위해, 트렌드 필터를 도입하고, 파라미터 선택을 최적화하고, 스톱 및 스톱을 추가하고, 거래량을 고려하고, 다른 기술 지표와 결합하여 전략을 개선할 수 있습니다. 이러한 최적화는 전략의 신뢰성, 정확성 및 위험 관리 능력을 향상시킬 수 있습니다.

일반적으로 RSI와 MACD 교차 전략은 동력과 추세에 기반한 거래 프레임워크를 제공합니다. 적절한 최적화와 위험 관리를 통해 전략은 잠재적인 거래 기회를 식별하는 효과적인 도구가 될 수 있습니다. 그러나 실제 적용에서 거래자는 자신의 위험 선호와 거래 목표에 따라 전략을 조정하고 테스트하여 자신의 거래 스타일과 시장 환경에 적합하도록해야합니다.

전략 소스 코드
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('RSIand macd bull and bear', overlay=true)

// Input parameters
length = input.int(14, title='RSI Length', minval=1)
overbought = input.int(60, title='RSI Overbought Level', minval=0, maxval=100)
oversold = input.int(40, title='RSI Oversold Level', minval=0, maxval=100)

ema30_length = input(10, title='EMA RSI')
ema50_length = input(20, title='EMA MACD')

// Calculate EMAs

ema30 = ta.ema(close, ema30_length)
ema50 = ta.ema(close, ema50_length)

// Calculate RSI
rsiValue = ta.rsi(close, length)

// Calculate MACD
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)

var float buyPrice = na

// Buy condition: EMA 3 crosses above EMA 30 and price is above EMA 50
buyCondition =  rsiValue > oversold and ta.crossover(hist,0) or ta.crossover(rsiValue,oversold) and hist>0
if (buyCondition)
    // buyPrice := close
    strategy.entry('Buy', strategy.long)

// Exit long position when close is below EMA30 and below the low of the previous 3 candles after the buy entry0
//exitLongCondition = close < ema30 and close < ta.lowest(low, 3) and close < buyPrice
//if (exitLongCondition)
  //  strategy.close('BuyExit')

// Sell condition: EMA 3 crosses below EMA 30 and price is below EMA 50
sellCondition = rsiValue < overbought and ta.crossunder(hist,0) or ta.crossunder(rsiValue, overbought) and hist<0
if (sellCondition)
    strategy.entry('Sell', strategy.short)

// Exit short position when close is above EMA30 and above the high of the previous 3 candles after the sell entry
//exitShortCondition = close > ema30 and close > ta.highest(high, 3)
//if (exitShortCondition)
  //  strategy.close('SellExit')

// Plot EMAs on the chart


// Change color of EMA 50 based on MACD histogram
ema50Color = hist > 0 ? color.new(color.green, 0) :  hist<0 ? color.new(color.red, 0) : color.new(color.black, 0)
plot(ema50, color=ema50Color, title='EMA 50 Colored')

// Change color of EMA 30 based on RSI trend
ema30Color = rsiValue > oversold ? color.new(color.green, 0) : rsiValue<overbought ? color.new(color.red, 0) : color.new(color.black, 0)
plot(ema30, color=ema30Color, title='EMA 30 Colored')

// Highlight Buy and Sell signals on the chart
// bgcolor(buyCondition ? color.new(color.green, 90) : na)
// bgcolor(sellCondition ? color.new(color.red, 90) : na)

// Plotting Buy and Sell Signals on the Chart until strategy exit
barcolor(strategy.position_size > 0 and rsiValue > overbought ? color.new(color.yellow, 0) : strategy.position_size < 0 and rsiValue < oversold ? color.new(color.black, 0) : na)
// plotshape(buyCondition,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green,textcolor = color.white, transp = 0, size = size.tiny)
// plotshape(sellCondition, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,textcolor = color.white, transp = 0, size = size.tiny)

plotshape(buyCondition, color=color.green, style=shape.triangleup, size=size.small, location=location.belowbar, text="Buy")
plotshape(sellCondition, color=color.red, style=shape.triangledown, size=size.small, location=location.abovebar, text="Sell")