이중 이동 평균 및 확률적 RSI 추세 추종 전략

EMA RSI SRSI SMA
생성 날짜: 2025-02-10 16:56:56 마지막으로 수정됨: 2025-02-10 16:56:56
복사: 0 클릭수: 577
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균 및 확률적 RSI 추세 추종 전략

개요

이것은 지수 이동 평균 (EMA) 과 임의의 상대적으로 약한 지표 (Stochastic RSI) 를 결합한 트렌드 추적 전략이다. 이 전략은 가격 트렌드와 오버 바이 오버 셀 상태를 분석하여 높은 확률의 거래 기회를 식별한다. 이 전략은 EMA 9와 EMA 21의 교차점을 사용하여 트렌드 방향을 결정하며, 동시에 시장 상태를 확인하기 위해 Stochastic RSI를 사용하여 거래 신호의 질을 향상시킵니다.

전략 원칙

전략의 핵심 논리는 두 가지 주요 기술 지표의 조합에 기반합니다.

  1. 쌍평선 시스템: 9주기 및 21주기 지수 이동 평균 ((EMA) 을 사용하여 트렌드를 식별한다. 빠른 EMA ((9) 가 느린 EMA ((21) 을 상향으로 통과하면 다중 신호가 발생하고, 반대로 공백 신호가 발생한다.
  2. 무작위 RSI 지표: RSI 값을 계산하는 무작위 지표를 사용하여 과매매 지역을 식별합니다. 이 지표는 먼저 14 주기의 RSI를 계산한 다음 무작위 형태로 변환하고 마지막으로 3 주기의 간단한 이동 평균 (SMA) 을 사용하여 부드럽게 처리합니다.

거래 신호 트리거 조건:

  • 다중 조건: EMA 9이 상향으로 EMA 21을 통과하고, 스토카스틱 RSI가 초상조치보다 낮습니다.
  • 공백 조건: EMA 9이 EMA 21을 아래로 통과하고 Stochastic RSI가 초과 구매 경계를 초과합니다 (~ 80)
  • 평점 조건: 반대의 거래 신호가 발생했을 때

전략적 이점

  1. 신호 확인 메커니즘: 트렌드와 동력 지표의 결합으로 가짜 돌파의 위험을 낮춘다.
  2. 유연한 변수 설정: 거래자가 다른 시장 조건에 따라 EMA 주기와 Stochastic RSI의 변수를 조정할 수 있습니다.
  3. 명확한 시각화: 전략은 가격 차트에 직접 EMA 라인을 표시하고, 분석을 위해 개별 패널에 스토카스틱 RSI를 표시합니다.
  4. 리스크 관리: 기본적인 스톱 로즈 및 수익 메커니즘을 포함합니다.
  5. 이중 필터링: 트렌드와 오버 바이 오버 셀 지표를 이중 필터링으로 사용하여 거래 품질을 향상시킵니다.

전략적 위험

  1. 트렌드 리버스 위험: 급격한 변동이 있는 시장에서 가짜 평행선 교차 신호가 발생할 수 있습니다.
  2. 뒤떨어진 문제: 이동 평균은 본질적으로 뒤떨어진 지표이며, 진입 시기가 늦어질 수 있습니다.
  3. 수평 시장 위험: 명백한 추세가 없는 시장에서 빈번한 잘못된 신호가 발생할 수 있습니다.
  4. 변수 민감성: 다른 변수 설정으로 인해 상당히 다른 결과가 발생할 수 있습니다.
  5. 시장 환경 의존성: 전략은 강세를 보이는 시장에서 잘 작동하지만, 흔들리는 시장에서는 잘 작동하지 않을 수 있습니다.

전략 최적화 방향

  1. 변동율 필터 도입: ATR 지표를 추가하여 낮은 변동율 환경에서 거래 신호를 필터링 할 수 있습니다.
  2. 손해 차단 장치를 최적화: 손해 차단을 추적하여 수익을 더 잘 보호 할 수 있습니다.
  3. 시간 필터를 추가: 거래 시간 창을 추가하여 유동성이 낮은 기간을 피하십시오.
  4. 거래량 확인을 추가: 거래량 요소를 고려하여 거래 신호를 생성합니다.
  5. 최적화 매개 변수 적응: 시장 상황에 따라 매개 변수를 동적으로 조정하는 메커니즘

요약하다

이것은 명확한 구조와 논리적으로 엄격한 트렌드 추적 전략이다. 이 전략은 EMA와 Stochastic RSI를 결합하여 트렌드 및 시장 상태를 식별하는 데 있어 균형이 잘 잡힌다. 일부 고유한 위험이 있지만, 합리적인 매개 변수 최적화 및 위험 관리를 통해 이 전략은 다양한 시장 환경에서 안정적인 성능을 유지할 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-01-10 00:00:00
end: 2025-02-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA 9/21 + Stoch RSI Strategy", shorttitle="EMA+StochRSI", overlay=true)

// ===== Užívateľské vstupy ===== //
emaFastLen     = input.int(9,   "Rýchla EMA (9)")
emaSlowLen     = input.int(21,  "Pomalá EMA (21)")
rsiLen         = input.int(14,  "RSI Length")
stochRsiLen    = input.int(14,  "Stoch RSI Length")     // úsek, z ktorého berieme min/max RSI
stochSignalLen = input.int(3,   "Stoch RSI K/D Smoothing")
overSold       = input.int(20,  "Stoch RSI Oversold (%)")
overBought     = input.int(80,  "Stoch RSI Overbought (%)")

// ===== Výpočet EMA(9) a EMA(21) ===== //
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)

// ===== Výpočet RSI a Stoch RSI ===== //
// 1) Klasické RSI
rsiValue = ta.rsi(close, rsiLen)

// 2) Prevod RSI -> Stoch RSI: 
//    (rsiValue - min(rsiValue, stochRsiLen)) / (max(rsiValue, stochRsiLen) - min(rsiValue, stochRsiLen)) * 100
//    Následne vyhladíme K a D (podobne ako pri bežnom Stochastic)
rsiLowest  = ta.lowest(rsiValue,  stochRsiLen)
rsiHighest = ta.highest(rsiValue, stochRsiLen)
stochRaw   = (rsiValue - rsiLowest) / math.max(rsiHighest - rsiLowest, 1e-10) * 100.0
stochK     = ta.sma(stochRaw, stochSignalLen)
stochD     = ta.sma(stochK,   stochSignalLen)

// ===== Podmienky pre LONG / SHORT ===== //
// LONG, ak:
//  - EMA(9) prekríži EMA(21) smerom nahor
//  - Stoch RSI je v prepredanej zóne (t.j. stochK < overSold)
longCondition  = ta.crossover(emaFast, emaSlow) and (stochK < overSold)

// SHORT, ak:
//  - EMA(9) prekríži EMA(21) smerom nadol
//  - Stoch RSI je v prekúpenej zóne (stochK > overBought)
shortCondition = ta.crossunder(emaFast, emaSlow) and (stochK > overBought)

// ===== Vstup do pozícií ===== //
if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)

// ===== Výstup z pozície pri opačnom signáli (okamžite na trhu) ===== //
if strategy.position_size > 0 and shortCondition
    // Ak držíme LONG a príde signál na SHORT, zavrieme LONG
    strategy.close("Long", comment="Exit Long")

if strategy.position_size < 0 and longCondition
    // Ak držíme SHORT a príde signál na LONG, zavrieme SHORT
    strategy.close("Short", comment="Exit Short")

// ===== (Nepovinné) Môžeš pridať stop-loss, take-profit, trailing stop atď. ===== //