다중 요인 추세 추종 양적 전략

SAR EMA RSI ADX ATR
생성 날짜: 2025-04-24 17:23:29 마지막으로 수정됨: 2025-04-24 17:23:29
복사: 0 클릭수: 355
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 요인 추세 추종 양적 전략 다중 요인 추세 추종 양적 전략

개요

이 전략은 패러블라인 전환 지표 (SAR), 지수 이동 평균 (EMA), 상대적으로 강한 지수 (RSI) 및 평균 트렌드 지수 (ADX) 를 결합한 다중 요소 트렌드 추적 시스템이다. 그것은 여러 기술 지표의 연동 작용을 통해 잠재적인 트렌드 방향을 식별하고 트렌드가 확인되면 거래를 발송한다. 신호 전략은 또한 평균 실제 파도 (ATR) 에 기반한 동적 위험 관리 방법을 채택하고 있으며, 자동으로 스톱 로즈 및 스톱 스톱 레벨을 계산한다.

전략 원칙

  1. 트렌드 확인: 가격이 패러블레이스 회전 지표 ((SAR) 를 뚫고 종결 가격이 빠른 EMA보다 높을 때 상승 추세를 확인하고; 가격이 SAR를 넘어 종결 가격이 빠른 EMA보다 낮을 때 하향 추세를 확인한다.
  2. 동력 필터: RSI 지표 필터 신호를 사용하여 RSI>60을 요구하고, RSI>40을 요구하며, 거래가 동력이 강한 방향으로 이루어지도록 보장합니다.
  3. 트렌드 강도 검증: ADX 지표 ((值30) 를 통해 트렌드 강도를 확인하고, 흔들리는 시장에서 거래하는 것을 피하십시오.
  4. 위험 관리: ATR을 기반으로 동적 스톱로스 ((1.5배 ATR) 와 스톱로스 ((2배 ATR) 를 계산하고 계정 자금의 고정 비율 ((설정 2%)) 을 기반으로 포지션 크기를 계산한다.

전략적 이점

  1. 다중 인자 검증SAR, EMA, RSI 및 ADX의 4가지 지표의 다중 검증을 통해 신호 품질이 크게 향상되었다.
  2. 동적 위험 관리ATR-based Stop Loss Hanger은 시장의 변동성에 자동으로 적응합니다.
  3. 트렌드 강도 필터링:ADX 하락 효과적 필터 가짜 돌파구, 강한 트렌드 시장에서만 거래.
  4. 자동 포지션 계산리스크 기반의 포지션 관리: 모든 거래의 리스크가 동일하게 보장됩니다.
  5. 명확한 시각적 피드백: 색상 배경으로 거래 신호를 직관적으로 표시한다.

전략적 위험

  1. 지연 위험SAR와 EMA는 동향을 따르는 지표이며, 동향이 역전되면 지연될 수 있습니다.
  2. 매개 변수 감수성: RSI 길이 ((6) 와 EMA 주기 ((2) 의 짧은 주기 설정은 과도한 거래로 이어질 수 있다.
  3. ADX 하락 위험: 고정 ADX 마이너스 ((30) 는 시장 조건에 따라 변동할 수 있다.
  4. 변동성은 위험을 증가시킵니다.ATR 곱하기 고정은 극한 변동 중에 상쇄가 너무 넓어질 수 있다.
    해결책
  • ADX 마이너스 및 RSI 변수를 동적으로 최적화합니다.
  • 변동성 필터를 추가 (VIX 지표와 같이)
  • 점진적 포지션 관리로 고정 비율을 대체

최적화 방향

  1. 변수 동적화: 고정된 변수를 시장 상태에 기반한 동적 변수로 바꾸어 ATR 곱셈을 변동률을 사용하여 조정한다.
  2. 기계학습 통합: 역사 데이터 훈련 모델로 지표 변수 조합을 최적화한다.
  3. 다중 시간 프레임 확인더 높은 시간 프레임에 가입하는 경향을 확인했다.
  4. 비정상적인 파동 필터이 사이트의 운영자는 “이 사이트의 운영자가 누구인가?“라고 묻습니다.
  5. 복합 탈퇴 전략: 트레이킹 스톱로즈와 타임 아웃 등 다양한 아웃소프트 메커니즘을 결합한다.

요약하다

이 다중 요소 트렌드 전략은 지표 협동과 엄격한 위험 관리로 트렌드 시장에서 우수한 성능을 나타냅니다. 핵심 장점은 신호의 여러 가지 검증과 동적 위험 제어에 있습니다. 그러나 매개 변수의 민감성 및 지연 위험에 주의를 기울여야합니다. 향후 최적화는 매개 변수의 자조 메커니즘과 시장 상태를 인식하는 데 초점을 맞추어 전략의 튼튼함을 향상시킵니다.

전략 소스 코드
/*backtest
start: 2024-04-23 00:00:00
end: 2024-12-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("🚀 Estrategia SAR+EMA+RSI con Alertas", overlay=true)

// ———— PARÁMETROS ————
riskPerTrade = input.float(2.0, title="Riesgo por operación (%)", minval=0.5, step=0.5)
sarStart = input.float(0.02, title="SAR Start", minval=0.001)
sarIncrement = input.float(0.02, title="SAR Increment", minval=0.001)
sarMax = input.float(0.2, title="SAR Max", minval=0.1)
rsiLength = input.int(6, title="RSI Length", minval=3, maxval=10)
emaFastLength = input.int(2, title="EMA Rápida", minval=1, maxval=5)
adxThreshold = input.int(30, title="ADX mínimo", minval=20, maxval=50)
atrMultiplier = input.float(1.5, title="Multiplicador ATR para SL", step=0.1)

// ———— INDICADORES ————
sar = ta.sar(sarStart, sarIncrement, sarMax)
emaFast = ta.ema(close, emaFastLength)
rsi = ta.rsi(close, rsiLength)
[diplus, diminus, adx] = ta.dmi(14, 14) // Ahora pasamos length y adxSmoothing

atr = ta.atr(14)

// ———— CONDICIONES ————
longCondition = ta.crossover(close, sar) and close > emaFast and rsi > 60 and adx >= adxThreshold
shortCondition = ta.crossunder(close, sar) and close < emaFast and rsi < 40 and adx >= adxThreshold

// ———— FUNCIÓN MENSAJE ALERTA ————
getAlertMessage(isLong) =>
    slPoints = atr * atrMultiplier
    message = (isLong ? "🚀 COMPRA " : "🔻 VENTA ") + syminfo.ticker + "\n" +
      "Precio: " + str.tostring(math.round(close, 2)) + "\n" +
      "SL: " + str.tostring(math.round(isLong ? (close - slPoints) : (close + slPoints), 2)) + "\n" +
      "TP: " + str.tostring(math.round(isLong ? (close + slPoints * 2) : (close - slPoints * 2), 2)) + "\n" +
      "RSI: " + str.tostring(math.round(rsi, 1)) + "\n" +
      "ADX: " + str.tostring(math.round(adx, 1))
    message

// ———— ALERTAS ————
if (longCondition)
    alert(getAlertMessage(true), alert.freq_once_per_bar_close)

if (shortCondition)
    alert(getAlertMessage(false), alert.freq_once_per_bar_close)



if (longCondition)
    alert(getAlertMessage(true), alert.freq_once_per_bar_close)

if (shortCondition)
    alert(getAlertMessage(false), alert.freq_once_per_bar_close)

// ———— ENTRADAS DE ESTRATEGIA ————
riskAmount = strategy.equity * (riskPerTrade / 100)
slPoints = atr * atrMultiplier
qty = riskAmount / close

if (longCondition)
    strategy.entry("Long", strategy.long, qty=qty)
    strategy.exit("Exit Long", "Long", stop=close - slPoints, limit=close + slPoints * 2)

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=qty)
    strategy.exit("Exit Short", "Short", stop=close + slPoints, limit=close - slPoints * 2)

// ———— VISUALIZACIÓN ————
plot(sar, title="SAR", color=color.red, style=plot.style_cross)
plot(emaFast, title="EMA Rápida", color=color.blue)
bgcolor(longCondition ? color.new(color.green, 90) : shortCondition ? color.new(color.red, 90) : na)