리소스 로딩... 로딩...

EMA RSI 크로스오버 전략

저자:차오장, 날짜: 2024-06-03 11:08:30
태그:EMARSIATR

img

전반적인 설명

EMA RSI 크로스오버 전략은 잠재적 인 구매 또는 판매 신호를 식별하기 위해 기하급수적인 이동 평균 (EMA) 및 상대적 강도 지수 (RSI) 기술 지표를 결합합니다. EMA와 RSI 라인이 교차 할 때 교차를 나타냅니다. 예를 들어, 더 짧은 EMA가 더 긴 EMA를 넘어서고, RSI가 특정 임계 이상의 상승 추세를 나타냅니다. 반대로, 하향 크로스오버는 더 짧은 EMA가 더 긴 EMA를 넘어서고, RSI가 지정된 수준을 넘어서면 하락 추세를 나타냅니다. 거래자는 종종이 크로스오버 신호를 기반으로 포지션을 입력하거나 출출하는 전략을 사용합니다. 시장 추세와 역행에 자본을 목표로합니다.

전략 원칙

  1. 지정된 기간에 대한 RSI 지표 값을 계산하고 차트에 그릴 수 있습니다.
  2. 지정된 기간에 대한 EMA 지표 값을 계산하고 그래프에 그려라.
  3. 가격이 EMA 이하이고 RSI가 20 이하일 때 구매 신호로 간주합니다. 가격이 EMA 이상이고 RSI가 80 이상일 때 판매 신호로 간주합니다.
  4. 구매 신호가 나타나고 현재 촛불의 닫기 가격이 이전 촛불보다 높으면 긴 포지션을 열고 판매 신호가 나타나고 현재 촛불의 닫기 가격이 이전 촛불보다 낮으면 짧은 포지션을 열고
  5. 평균 참 범위 (ATR) 를 사용하여 스톱 로스 및 영리 수준을 계산합니다. 스톱 로스 레벨은 엔트리 가격 마이너스 (ATR + 촛불 몸길이) 이며, 영리 레벨은 엔트리 가격 플러스 (1.2 * (ATR + 촛불 몸길이)).

전략적 장점

  1. 트렌드를 따르는 EMA 지표와 모멘텀 기반 RSI 지표를 결합하여 시장 트렌드를 보다 포괄적으로 평가합니다.
  2. 트렌드가 형성되는 초기에 트레이딩 신호를 생성하여 트렌드 기회를 신속하게 포착하는 데 도움이 됩니다.
  3. ATR을 사용하여 스톱 로스를 동적으로 조정하고 수익 거리를 취하여 시장 변동에 더 잘 적응합니다.
  4. 가격과 지표 사이의 관계와 촛불 패턴을 모두 고려하여 신호의 신뢰성을 향상시킵니다.

전략 위험

  1. EMA와 RSI 두 지표 모두 일정 수준의 지연을 가지고 있으며, 이는 지표가 교차하지만 가격이 즉시 역전되지 않는 경우 잘못된 신호로 이어질 수 있습니다.
  2. RSI 지표는 빈번하게 범위에 묶인 시장에서 크로스오버 신호를 생성하여 과도한 거래로 이어질 수 있습니다.
  3. 고정된 RSI 문턱은 모든 시장 조건에 적합하지 않을 수 있으며 시장 특성에 따라 조정해야 할 수 있습니다.
  4. 이 전략은 스톱 로스 및 영업 수익을 계산하기 위해 ATR에 크게 의존하지만, ATR 값은 급격한 큰 가격 변동으로 왜곡 될 수 있습니다.

전략 최적화 방향

  1. 현재 시장에 가장 적합한 조합을 찾기 위해 EMA와 RSI의 매개 변수를 최적화하십시오.
  2. 다른 필터링 조건을 추가하여 빈번한 잘못된 신호를 필터링할 수 있습니다.
  3. 다른 시장 상태에 적응하기 위해 RSI의 상부 및 하부 임계치를 적응적으로 조정합니다.
  4. 여러 개의 스톱 로스 및 수익을 취하는 방법을 사용하십시오. 예를 들어, 스톱 로스 및 수익을 취하기 위해 지원 및 저항 수준을 기반으로하거나 트렌드 방향에 기반한 트래일링 스톱 로스를 사용하여 위험 통제 능력을 향상시킵니다.
  5. 포지션 사이즈 모듈을 포함하여 시장 변동성 및 계정 위험 상태에 따라 각 거래의 포지션 크기를 동적으로 조정합니다.

요약

EMA RSI 크로스오버 전략은 시장 방향을 포괄적으로 평가하기 위해 트렌드 및 모멘텀 차원의 지표를 결합한 간단하고 사용하기 쉬운 트렌드 추적 전략이다. 이 전략은 또한 신호 품질과 위험 통제 기능을 향상시키기 위해 일부 필터링 조건과 동적 스톱 로스 및 수익 방식을 사용한다. 그러나 전략에는 지표 지연 및 빈번한 거래와 같은 몇 가지 제한이 있습니다. 따라서 실제 응용에서는 특정 시장 특성 및 개인 위험 선호도에 따라 전략을 더 이상 최적화하고 개선해야합니다.


/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pritom980

//@version=5
strategy("EMA RSI Cross", overlay=true, margin_long=100, margin_short=100)

// add RSI

rsi_period = input.int(7,"RSI Period")
rsi_val =  ta.rsi(close[1],rsi_period)
plot(rsi_val, color=color.blue, linewidth=2, title="RSI")

buyRsiFlag = rsi_val < 20
sellRsiFlag = rsi_val > 80

// add EMA
ema = ta.ema(close, 50)
plot(ema, color=color.red, linewidth=2, title="EMA")


// check buy

// buy when the price is below ema 
buyFlag = ema > close ? true : false

// sell when the price is above ema
sellFlag = ema < close ? true : false


bgcolor(buyFlag and buyRsiFlag ? color.green : na )
bgcolor(sellFlag and sellRsiFlag ? color.red : na )




// Check if current candle's body is bigger than previous candle's body and of opposite color
is_body_bigger_long = math.abs(close - open) > math.abs(close[1] - open[1]) and close > open != close[1] > open[1]


greenCandle = close > close[1]
redCandle = close < close[1]
// Mark the candle
bgcolor(is_body_bigger_long and greenCandle and buyFlag  ? color.blue : na, transp=70)


// ENTRY ---------------------

// Input for ATR period
atr_length = input(14, title="ATR Length")

// Calculate ATR
atr_value = ta.atr(atr_length)

// Calculate stop loss and take profit levels
candleBody = math.abs(close-open)
slDist = atr_value + candleBody

stop_loss_long = close - slDist
take_profit_long = close + (1.2 * slDist) 


stop_loss_short = high + slDist
take_profit_short = high - (1.2 * slDist)

// Entry and exit conditions
if (buyFlag and buyRsiFlag  and strategy.opentrades >= 0 and greenCandle)
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)

// Entry and exit conditions
if (sellFlag and sellRsiFlag   and strategy.opentrades <= 0 and redCandle)
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)

관련

더 많은