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

EMA-Smoothed RSI 및 ATR 동적 스톱 로스/익스피스 취득에 기초한 다중 시간 프레임 양적 거래 전략

저자:차오장, 날짜: 2025-01-06 16:43:14
태그:RSIEMAATR

img

전반적인 설명

이 전략은 상대적 강도 지수 (RSI), 기하급수적인 이동 평균 (EMA), 평균 진정한 범위 (ATR) 를 기반으로 한 포괄적 인 양적 거래 시스템입니다. 이 전략은 EMA를 사용하여 RSI를 부드럽게하고 주요 수준에서 RSI 브레이크오웃을 통해 거래를 유발하며 효과적인 리스크 통제를 달성하기 위해 동적 스톱 로스 및 영리 수준을 위해 ATR을 사용합니다. 또한 전략에는 거래 신호 계산 및 기록 기능이 포함되어 거래자가 백테스팅 및 최적화에 도움을줍니다.

전략 원칙

핵심 논리는 다음의 주요 구성 요소를 포함합니다.

  1. 14주기 RSI를 사용하여 시장의 과잉 구매/ 과잉 판매 조건을 계산합니다.
  2. EMA를 통해 잘못된 신호를 줄이기 위해 RSI를 부드럽게합니다.
  3. RSI가 70과 30의 핵심 수준을 넘을 때 거래 신호를 생성합니다.
  4. ATR을 사용해서 스톱 로스 및 영업 수익 수치를 동적으로 계산합니다
  5. 각 거래에 대한 가격 정보를 기록하기 위해 거래 신호 계산 테이블을 설정합니다

전략적 장점

  1. 강력한 신호 평형: EMA를 통해 RSI 평형은 잘못된 브레이크오웃 신호를 효과적으로 감소시킵니다.
  2. 종합적인 리스크 제어: ATR을 이용한 동적 스톱 로스
  3. 양방향 거래: 시장 기회를 포착하기 위해 긴 거래와 짧은 거래를 지원합니다.
  4. 매개 변수 조정성: 주요 매개 변수는 다른 시장 특성에 맞게 사용자 정의 할 수 있습니다.
  5. 시각 모니터링: 전략 모니터링 및 백테스팅을 위한 표에 거래 신호를 기록

전략 위험

  1. RSI 가짜 브레이크 아웃 위험: EMA 평형화에도 불구하고 RSI는 여전히 잘못된 브레이크 아웃 신호를 생성 할 수 있습니다.
  2. ATR 스톱-러스 부적절함: ATR 곱셈값의 부적절한 설정으로 인해 느슨하거나 긴 스톱이 발생할 수 있습니다.
  3. 매개 변수 최적화 위험: 과도한 최적화는 전략의 과도한 적합성으로 이어질 수 있습니다.
  4. 시장 환경 의존성: 성능은 트렌드 및 시장의 범위에서 크게 다를 수 있습니다.

전략 최적화

  1. 다중 시간 프레임 분석을 도입: 거래 확인을 위해 더 긴 시간 프레임 RSI 신호를 통합
  2. 스톱 로스 메커니즘을 최적화: 지원/저항에 기초한 동적 ATR 곱셈 조절을 고려
  3. 시장 환경 분석을 추가합니다. 전략 매개 변수를 조정하기 위해 트렌드 지표를 포함합니다.
  4. 신호 필터링을 개선합니다. 가짜 브레이크를 필터하기 위해 볼륨 표시기를 추가하는 것을 고려하십시오.
  5. 포지션 크기를 구현합니다. 신호 강도와 변동성에 따라 포지션 크기를 동적으로 조정합니다.

요약

이 전략은 세 가지 고전적인 기술 지표 - RSI, EMA, ATR - 를 결합하여 완전한 양적 거래 시스템을 구축합니다. 신호 생성, 위험 통제 및 거래 실행에서 강력한 실용성을 보여줍니다. 지속적인 최적화 및 개선으로 전략은 라이브 거래에서 안정적인 성능을 약속합니다. 그러나 사용자는 전략 성과에 대한 시장 조건의 영향을 고려하고 적절한 매개 변수를 설정하고 적절한 위험 통제를 유지해야합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("RSI Trading Strategy with EMA and ATR Stop Loss/Take Profit", overlay=true)
length = input.int(14, minval=1, title="RSI Length")
src = input(close, title="Source")
rsi = ta.rsi(src, length)
smoothingLength = input.int(14, minval=1, title="Smoothing Length")
smoothedRsi = ta.ema(rsi, smoothingLength)  // استفاده از EMA برای صاف کردن RSI
atrLength = input.int(14, title="ATR Length")
atrMultiplier = input.float(1, title="ATR Multiplier")
atrValue = ta.atr(atrLength)  // محاسبه ATR
level1 = 30
level2 = 70

// تنظیمات استراتژی
var table crossingTable = table.new(position.top_right, 2, 5, border_width=1)
var int crossCount = 0
var float crossPrice = na

// شرط ورود به معامله خرید زمانی که RSI از سطح 70 به بالا عبور می‌کند
if (ta.crossover(smoothedRsi, level2))
    strategy.entry("Long", strategy.long)
    // تنظیم حد سود و حد ضرر
    strategy.exit("Take Profit/Stop Loss", "Long", stop=close - atrMultiplier * atrValue, limit=close + atrMultiplier * atrValue, comment="")
    crossCount := crossCount + 1
    crossPrice := close

// شرط ورود به معامله فروش زمانی که RSI از سطح 70 به پایین عبور می‌کند
if (ta.crossunder(smoothedRsi, level2))
    strategy.entry("Short", strategy.short)
    // تنظیم حد سود و حد ضرر
    strategy.exit("Take Profit/Stop Loss", "Short", stop=close + atrMultiplier * atrValue, limit=close - atrMultiplier * atrValue, comment="")
    crossCount := crossCount + 1
    crossPrice := close

// شرط ورود به معامله خرید زمانی که RSI از سطح 30 به بالا عبور می‌کند
if (ta.crossover(smoothedRsi, level1))
    strategy.entry("Long", strategy.long)
    // تنظیم حد سود و حد ضرر
    strategy.exit("Take Profit/Stop Loss", "Long", stop=close - atrMultiplier * atrValue, limit=close + atrMultiplier * atrValue, comment="")
    crossCount := crossCount + 1
    crossPrice := close

// شرط ورود به معامله فروش زمانی که RSI از سطح 30 به پایین عبور می‌کند
if (ta.crossunder(smoothedRsi, level1))
    strategy.entry("Short", strategy.short)
    // تنظیم حد سود و حد ضرر
    strategy.exit("Take Profit/Stop Loss", "Short", stop=close + atrMultiplier * atrValue, limit=close - atrMultiplier * atrValue, comment="")
    crossCount := crossCount + 1
    crossPrice := close

if (not na(crossPrice))
    table.cell(crossingTable, 0, crossCount % 5, text=str.tostring(crossCount), bgcolor=color.green)
    table.cell(crossingTable, 1, crossCount % 5, text=str.tostring(crossPrice), bgcolor=color.green)

// ترسیم خطوط و مقادیر RSI
plot(smoothedRsi, title="Smoothed RSI", color=color.blue)
hline(level1, "Level 30", color=color.red)
hline(level2, "Level 70", color=color.green)


관련

더 많은