RSI와 MACD 듀얼 필터링을 이용한 동적 손절매 추세 추종 전략

RSI MACD SL (Stop Loss) TA (Technical Analysis)
생성 날짜: 2025-02-20 16:50:43 마지막으로 수정됨: 2025-02-20 16:50:43
복사: 0 클릭수: 289
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

RSI와 MACD 듀얼 필터링을 이용한 동적 손절매 추세 추종 전략 RSI와 MACD 듀얼 필터링을 이용한 동적 손절매 추세 추종 전략

개요

이 전략은 MACD와 RSI 이중 지표 필터링에 기반한 트렌드 추적 시스템이며, 동적 스톱 메커니즘을 통합한다. 이 전략은 주로 MACD의 교차 신호를 통해 거래 기회를 창출하며, RSI를 2차 확인으로 사용하며, 위험을 제어하기 위해 백분율 스톱을 도입한다. 전략의 핵심은 기술 지표의 조합을 통해 거래 신호의 신뢰성을 높이고, 동적 스톱을 통해 수익을 보호하는 것이다.

전략 원칙

이 전략은 MACD ((12,26,9) 와 RSI ((14)) 를 주요 지표로 사용합니다. 입시 신호는 두 가지 조건을 동시에 충족해야합니다. MACD 금 포크와 RSI가 초매 지역 (설정 40 이하) 에 있으면 더하고, MACD 사각지대와 RSI가 초매 지역 (설정 59 이상) 에 있으면 더하지 않습니다.

전략적 이점

  1. 이중 지표 필터링은 거래 신호의 신뢰성을 높이고 가짜 신호를 줄여줍니다.
  2. 다이내믹 스포드 메커니즘은 각 거래의 위험을 효과적으로 통제합니다.
  3. 전략 파라미터는 시장 조건에 따라 유연하게 조정할 수 있다.
  4. 시간 필터 기능은 특정 시간 동안 거래를 수행 할 수 있습니다.
  5. 자금 관리에 도움이 되는 자금 지분 사용.

전략적 위험

  1. 불안정한 시장에서 거래 신호가 자주 발생하여 거래 비용이 증가할 수 있습니다.
  2. 고정 비율의 손실은 높은 변동성이 있는 시장에서 조기 평점으로 이어질 수 있다.
  3. MACD는 지연 지표로서 빠른 시장에서 중요한 가격 움직임을 놓칠 수 있습니다.
  4. RSI 마이너스의 설정은 시장에 따라 최적화되어야 합니다.
  5. 거래 비용과 슬라이드 포인트는 전략의 실제 성과에 영향을 미칠 수 있다.

전략 최적화 방향

  1. 변동률 지표를 도입하여 동적으로 중지 손실 비율을 조정합니다.
  2. 트렌드 강도 필터를 추가하여 불안정한 시장에서 과도한 거래를 피하십시오.
  3. 이윤을 보호하기 위해 이동성 손실을 추가하는 것을 고려하십시오.
  4. RSI와 MACD의 파라미터 설정을 최적화하여 다른 시장 주기들에 더 잘 적응하도록 한다.
  5. 거래량 분석을 늘리고 신호의 신뢰성을 높여줍니다.

요약하다

이것은 구조적이고, 논리적으로 명확한 트렌드 추적 전략이다. MACD와 RSI의 조합을 사용하여 거래 신호의 질을 효과적으로 향상시킵니다. 동적 인 손실 디자인은 위험을 통제하는 데 도움이되어 전략이 좋은 위험 관리 특성을 갖는다. 이 전략은 트렌드가 명확한 시장에서 사용하기에 적합하지만 특정 시장 특성에 따라 매개 변수를 조정해야합니다. 제안된 최적화 방향으로 전략의 안정성과 신뢰성을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-02-13 10:00:00
end: 2025-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BNB_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © eagle916
//@version=5
strategy("EAG MACD + RSI Strategy",overlay=true, initial_capital = 300, default_qty_value = 10, default_qty_type = "percent_of_equity", commission_type=strategy.commission.percent, commission_value=0.1)


// Input para el RSI
rsi_length = input.int(14, title="RSI Length", minval=1)
rsi_overbought = input.int(59, title="RSI Overbought Level", minval=1, maxval=100)
rsi_oversold = input.int(40, title="RSI Oversold Level", minval=1, maxval=100)

// Input para el MACD
macd_length = input.int(12, title="MACD Length", minval=1)
macd_overbought = input.int(26, title="MACD Overbought Level", minval=1, maxval=100)
macd_signal = input.int(9, title="MACD Signal Level", minval=1, maxval=100)

// Input para el porcentaje de pérdida (stop loss)
stop_loss_percent = input.float(3.0, title="Porcentaje de Stop Loss (%)", minval=0.1, step=0.1)

// Calcular RSI
rsi_value = ta.rsi(close, rsi_length)

// Calcular MACD
[macdLine, signalLine, _] = ta.macd(close, macd_length, macd_overbought, macd_signal)
macd_crossup = ta.crossover(macdLine, signalLine)   // Cruce al alza del MACD
macd_crossdown = ta.crossunder(macdLine, signalLine) // Cruce a la baja del MACD

// Condiciones de compra y venta
buy_condition = macd_crossup and rsi_value <= rsi_oversold
sell_condition = macd_crossdown and rsi_value >= rsi_overbought


// Registrar precio de entrada
var float entry_price = na
if strategy.position_size == 0
    entry_price := na

// Mostrar señales de compra y venta en la gráfica principal
plotshape(series=buy_condition, title="Señal de Compra", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") // Compra debajo de la vela
plotshape(series=sell_condition, title="Señal de Venta", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Venta encima de la vela

// Órdenes de estrategia
if buy_condition 
    strategy.entry("Compra", strategy.long)
    entry_price := close
if sell_condition 
    strategy.entry("Venta", strategy.short)
    entry_price := close

// Calcular el precio de stop loss
long_stop_loss = entry_price * (1 - stop_loss_percent / 100)
short_stop_loss = entry_price * (1 + stop_loss_percent / 100)

// Cerrar posición si el precio va en contra el porcentaje definido por el usuario
if strategy.position_size > 0 and close < long_stop_loss
    strategy.close("Compra", comment="Stop Loss Compra")

if strategy.position_size < 0 and close > short_stop_loss
    strategy.close("Venta", comment="Stop Loss Venta")