RSI와 EMA 이중 필터링 전략


생성 날짜: 2024-03-22 15:37:08 마지막으로 수정됨: 2024-03-22 15:37:08
복사: 7 클릭수: 423
1
집중하다
1219
수행원

RSI와 EMA 이중 필터링 전략

개요

RSI와 EMA 이중 필터링 전략은 상대적으로 약한 지표 ((RSI) 와 지수 이동 평균 ((EMA) 를 기반으로 한 양적 거래 전략이다. 이 전략은 RSI 지표를 사용하여 시장의 과매매 상황을 판단하고, 두 개의 EMA 선의 트렌드를 판단하면서, 진입과 출퇴근의 기초를 제공합니다. RSI와 EMA의 이중 필터링을 통해 가짜 신호를 효과적으로 줄이고, 전략의 안정성과 수익성을 향상시킬 수 있습니다.

전략 원칙

이 전략의 핵심은 다음과 같습니다.

  1. RSI 지표의 계산 및 응용: 전략은 먼저 사용자 정의 된 주기 (기본 2) 의 RSI 지표를 계산합니다. RSI 값이 초과 경량 (기본 10) 보다 낮으면 시장이 초과 상태임을 나타냅니다.

  2. 빠른 EMA 라인의 트렌드 판단: 전략은 두 개의 EMA 라인을 계산합니다. 하나는 느린 라인 (기본 주기는 200) 이며 하나는 빠른 라인 (기본 주기는 50). 빠른 라인이 느린 라인의 위쪽과 가격이 느린 라인의 위쪽에 있을 때, 시장이 상승 추세에 있다고 간주합니다. 반대로, 빠른 라인이 느린 라인의 아래쪽과 가격이 느린 라인의 아래쪽에 있을 때, 시장이 하락 추세에 있다고 간주합니다.

  3. 트렌드 필터: 전략은 트렌드 필터 옵션을 제공합니다. 이 옵션을 활성화하면 RSI 오버셀을 촉발하는 다수 트렌드에서만 더 많은 포지션을 열고, RSI 오버 구매를 촉발하는 공백 트렌드에서만 공백 포지션을 열 수 있습니다.

  4. 거래 신호의 확인: 전략 통합은 RSI 지표와 EMA 트렌드 판단의 결과를 고려하여 최종 거래 신호를 생성합니다. 다면 트렌드에서는 RSI가 초과 판매 경계를 넘어서면 더 많은 포지션을 열고, 공백 트렌드에서는 RSI가 초과 구매 경계를 넘어서면 공백 포지션을 열습니다.

  5. 포지션 관리: 전략은 거래 빈도를 제어하기 위해 최소 거래 간격 (기본 5 분) 을 채택하고 과도한 거래를 방지합니다. 동시에, 전략은 추적 스톱 손실과 고정 스톱 손실을 결합한 방법을 사용하여 위험을 관리합니다. 이윤을 충분히 지속시킬 수 있지만 손실을 효과적으로 제어 할 수 있습니다.

우위 분석

RSI와 EMA의 이중 필터링 전략은 다음과 같은 장점이 있습니다.

  1. 트렌드 추적 능력: 빠른 느린 EMA 선의 트렌드를 판단하여 전략은 시장의 주요 트렌드를 효과적으로 파악하고, 흔들리는 시장에서 자주 거래되는 것을 피할 수 있습니다.

  2. 효과적인 가짜 신호 필터링: RSI 지표는 특히 추세가 명확하지 않은 시장에서 더 많은 가짜 신호를 생성 할 수 있습니다. EMA 트렌드 필터는 주요 트렌드를 효과적으로 식별하여 RSI에서 발생하는 가짜 신호를 줄일 수 있습니다.

  3. 리스크 관리: 전략은 추적 스톱 손실과 고정 스톱 손실을 결합하여 이익을 충분히 지속시킬 수 있으며 손실을 효과적으로 제어 할 수 있습니다. 이러한 위험 관리 방법은 전략의 안정성과 철회 제어 능력을 향상시킬 수 있습니다.

  4. 매개 변수 유연성: 전략은 RSI 주기, 오버 바이 오버 시드 마이너스, EMA 주기, 중지 비율 등과 같은 사용자 조정을위한 여러 매개 변수를 제공합니다. 이것은 전략이 다른 시장 환경과 거래 습관에 유연하게 적응 할 수있게합니다.

위험 분석

RSI와 EMA의 듀얼 필터링 전략이 좋은 장점이 있음에도 불구하고 몇 가지 잠재적인 위험이 있습니다.

  1. 트렌드 전환 위험: 시장 트렌드가 전환될 때, EMA 라인은 지연될 수 있으며, 전략이 최적의 입문 시기를 놓치거나 출구를 지연시킬 수 있다.

  2. 매개 변수 최적화 위험: 이 전략의 성능은 매개 변수 설정에 민감하며, 다른 매개 변수 조합은 완전히 다른 결과를 가져올 수 있다. 매개 변수가 지나치게 최적화되면, 전략이 미래 시장에서 좋지 않은 성능을 낼 수 있다.

  3. 검은 천둥 사건 위험: 전략은 역사적 데이터에 기반하여 재검토 및 최적화되지만, 역사적 데이터는 미래의 극단적인 사건을 완전히 반영할 수 없습니다. 검은 천둥 사건이 발생하면 전략은 큰 손실을 입을 수 있습니다.

이러한 위험들을 해결하기 위해, 다음과 같은 해결책들을 고려할 수 있습니다.

  1. 다른 기술 지표나 가격 행동 패턴과 결합하여 트렌드 전환을 판단하고 조기에 조정을 할 수 있습니다.

  2. 적당한 변수 최적화를 적용하여 역사적 데이터에 과도하게 적합하지 않도록하십시오. 동시에 최신 시장 특성에 맞게 변수를 정기적으로 검토하고 조정하십시오.

  3. 합리적인 중지 손실을 설정하고, 단일 거래의 최대 손실을 제어한다. 동시에, 포트폴리오 수준에서 분산 투자, 포지션 제어 등과 같은 위험을 제어한다.

최적화 방향

  1. 더 많은 기술 지표를 도입: 기존의 RSI 및 EMA 지표의 기초에, 전략의 신호 정확성과 안정성을 높이기 위해 MACD, 브린 띠 등과 같은 더 많은 효과적인 기술 지표를 도입 할 수 있습니다.

  2. 최적화 트렌드 판단 방법: EMA 라인을 사용하여 트렌드를 판단하는 것 외에도 다른 트렌드 판단 방법을 탐색 할 수 있습니다. 높은 낮은 점법, 평선 시스템 등. 여러 가지 트렌드 판단 방법을 결합하여 전략의 적응성을 향상시킬 수 있습니다.

  3. 리스크 관리 방법을 개선: 기존의 추적 중지 및 고정 중지 기반에 더 고급 리스크 관리 방법을 도입 할 수 있습니다. 변동성 중지, 동적 중지 등이 있습니다. 이러한 방법은 시장의 변동성에 더 잘 적응하여 위험을 더 잘 제어 할 수 있습니다.

  4. 포지션 관리 모듈을 추가: 현재 전략은 고정 포지션 방식을 채택하고 있으며, 동적 포지션 관리 모듈을 도입하여 시장의 변동성, 계정 권리 이익 등의 요인에 따라 포지션을 동적으로 조정하여 자금 활용 효율성을 높일 수 있습니다.

  5. 여러 시장과 품종에 적합함: 전략이 더 많은 거래 시장과 품종으로 확장되어 투자가 분산되어 전체 위험을 줄일 수 있습니다. 동시에, 다양한 시장과 품종 간의 연관성을 연구하여 전략의 자산 배치를 최적화하기 위해 이러한 정보를 사용할 수 있습니다.

요약하다

RSI와 EMA 이중 필터링 전략은 상대적으로 약한 지표와 지수 이동 평균의 유기적 결합을 통해 시장 추세를 효과적으로 포착하고 RSI 지표가 가짜 신호를 일으킬 수있는 문제를 줄입니다. 전략 논리는 명확하고, 완벽한 위험 관리 조치를 포함하고, 좋은 안정성과 수익 잠재력을 가지고 있습니다. 그러나, 전략에는 추세 전환 위험, 변수 최적화 위험 및 블랙 스윙 사건 위험과 같은 잠재적인 위험도 있습니다.

전략 소스 코드
/*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=4
strategy("RSI2", overlay=true)

// RSILength input
len = input(2, minval=1, title="RSILength")

// Threshold RSI up input
RSIthreshUP = input(90, title="Threshold RSI up")

// Threshold RSI down input
RSIthreshDWN = input(10, title="Threshold RSI down")

// Slow MA length input
mmlen = input(200, title="Slow MA len")

// Fast MA length input
mmflen = input(50, title="Fast MA len")

// Moving Average type input
machoice = input("EMA", defval="EMA", options=["SMA", "EMA"])

// Ticker size input
tick=input(0.5,title="Ticker size",type=input.float)

// Trend Filter input
filter=input(true,title="Trend Filter",type=input.bool)

// Trailing Stop percentage input
ts_percent = input(1, title="TrailingStop%")

// Stop Loss percentage input
sl_percent = input(0.3, title="Stop Loss %")

// Calculate RSI
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)

// Calculate moving averages
mmslow = machoice == "SMA" ? sma(close, mmlen) : ema(close, mmlen)
mmfast = machoice == "SMA" ? sma(close, mmflen) : ema(close, mmflen)

// Plot moving averages
plot(mmslow, color=color.white)
plot(mmfast, color=color.yellow)

// Conditions for entry and exit
var lastLongEntryTime = 0
var lastShortEntryTime = 0

ConditionEntryL = if filter == true
    mmfast > mmslow and close > mmslow and rsi < RSIthreshDWN
else 
    mmfast > mmslow and rsi < RSIthreshDWN
    
ConditionEntryS = if filter == true
    mmfast < mmslow and close < mmslow and rsi > RSIthreshUP
else
    mmfast < mmslow and rsi > RSIthreshUP

// Calculate trailing stop and stop loss
ts_calc = close * (1/tick) * ts_percent * 0.01
sl_price = close * (1 - sl_percent / 100)

// Entry and exit management
if ConditionEntryL and time - lastLongEntryTime > 1000 * 60 * 5 // 5 minutes
    strategy.entry("RSILong", strategy.long)
    lastLongEntryTime := time

if ConditionEntryS and time - lastShortEntryTime > 1000 * 60 * 5 // 5 minutes
    strategy.entry("RSIShort", strategy.short)
    lastShortEntryTime := time

lastLongEntryTimeExpired = time - lastLongEntryTime >= 1000 * 60 * 5
lastShortEntryTimeExpired = time - lastShortEntryTime >= 1000 * 60 * 5

strategy.exit("ExitLong", "RSILong", when=lastLongEntryTimeExpired, trail_points=0, trail_offset=ts_calc, stop=sl_price)
strategy.exit("ExitShort", "RSIShort", when=lastShortEntryTimeExpired, trail_points=0, trail_offset=ts_calc, stop=sl_price)