마드리드 밴드 RSI 강화 다중 시간 프레임 EMA 추세 전략

EMA RSI MA 移动平均线 相对强弱指标 趋势跟踪 多时间框架分析 动量分析
생성 날짜: 2025-03-24 15:52:28 마지막으로 수정됨: 2025-03-24 15:52:28
복사: 0 클릭수: 510
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

마드리드 밴드 RSI 강화 다중 시간 프레임 EMA 추세 전략 마드리드 밴드 RSI 강화 다중 시간 프레임 EMA 추세 전략

개요

마드리드 리본 RSI 강화형 다중 시간 프레임 EMA 트렌드 전략은 이동 평균 리본 시스템 ((Madrid Ribbon) 과 상대적으로 약한 지표 ((RSI) 필터를 교묘하게 결합하여 트렌드 식별 및 거래 실행을 위한 이중 확인 메커니즘을 제공하는 통합적인 정량화 거래 시스템이다. 이 전략의 핵심은 여러 개의 주기적으로 다른 지표 이동 평균 (((5에서 90) 을 모니터링하여 형성된 구조적인 리본이다.

전략 원칙

이 전략의 핵심 원칙은 다중 시간 프레임의 이동 평균 집합과 RSI 지표의 필터링에 대한 분석에 기반합니다.

  1. 다중 시간 프레임 이동 평균 띠형 시스템전략은 5에서 90 사이클의 18개의 이동 평균을 구성하고 100 사이클의 기준선과 비교한다. 각각의 이동 평균은 변화의 방향과 기준선에 대한 위치에 따라 색상으로 표시된다.

    • 상승하고 기준선 위에 위치: 밝은 녹색 ((lime)
    • 아래로 그리고 기준선 위에: 어두운 빨간색 (maroon)
    • 하락하고 기준선 아래: 빨간색 ((red)
    • 상승하고 기준선 아래: 녹색 ((green)
  2. 추세 강도를 측정합니다.트렌드 강도를 측정하기 위한 전략: 녹색의 () 상승) 과 빨간색의 () 하락) 이동 평균의 수를 계산하여 트렌드 강도를 측정합니다.

    • 초록색 이동 평균이 ≥13일 때, 강한 상승 추세로 인식
    • 빨간색 이동 평균이 ≥9일 때, 강렬한 하향 추세로 인식
  3. RSI 필터 메커니즘위조 신호를 줄이기 위해, 전략은 RSI 지표를 필터링 조건으로 도입합니다.

    • 구매 신호를 충족해야 한다: 녹색 이동 평균≥13 그리고 RSI<30 (오버셀 지역)
    • 팔기 신호를 충족해야 합니다: 빨간색 이동 평균 ≥9 그리고 RSI>70 (오버 바이 지역)
  4. 위험 관리 메커니즘%에 기반한 스톱스토프 패러미터를 설정합니다.

    • 다중 거래: 스톱이 입시 가격으로 설정되어 +0.5%, 스톱로스는 입시 가격으로 설정되어 -1%
    • 공백 거래: 스톱을 입시 가격으로 설정 -0.5%, 스톱로스를 입시 가격으로 설정 +1%
  5. 자금 관리: 전략은 사용자가 초기 자본량을 설정하고, 현재 가격에 따라 자동으로 포지션 크기를 계산할 수 있도록 한다.

전략적 이점

  1. 다중 인증 메커니즘이동 평균 띠 시스템과 RSI 지표를 결합하여 전략은 여러 확인 메커니즘을 제공하여 잘못된 신호의 가능성을 크게 줄입니다. 이동 평균 집합과 RSI가 동시에 조건을 충족하면 신호의 신뢰성이 크게 향상됩니다.

  2. 추세 강도를 측정합니다.간단한 크로스 전략과는 달리, 이 전략은 다양한 색의 이동 평균의 수를 계산하여 트렌드 강도를 정량화하여 거래 결정을 더 객관적이고 데이터에 의해 주도합니다.

  3. 시각화 거래 신호전략: 배경 색상 변화와 모양 표시를 통해 신호를 명확하게 표시하여 거래자가 잠재적인 거래 기회를 직관적으로 식별 할 수 있도록합니다.

  4. 내장 위험 관리이 전략은 스톱 스톱 손실 메커니즘을 기본으로 통합하고 있으며, 각 거래의 최대 이익과 손실에 대한 명확한 사전 설정이 있으며, 리스크 을 효과적으로 제어합니다.

  5. 매우 적응력이 좋다전략: 사용자가 선택적으로 EMA 또는 SMA를 사용할 수 있으며, 다른 시장 환경에 따라 유연하게 조정할 수 있습니다. EMA는 최근 가격 변화에 더 민감하고 SMA는 다른 시장 조건에 적합한 다른 설정으로 더 부드럽습니다.

  6. 전체적인 시장 상태 모니터링18개의 다른 주기의 이동 평균을 모니터링함으로써, 전략은 시장의 동력을 포괄적으로 포착할 수 있으며, 단일 시간 프레임 분석으로 인해 발생할 수 있는 맹점을 줄일 수 있습니다.

전략적 위험

  1. 트렌드 반전 지연전략이 여러 이동 평균에 의존하기 때문에, 트렌드가 급격하게 변할 때 반응이 늦어질 수 있으며, 이는 진입 또는 출퇴근 시기가 좋지 않습니다. 이 위험에 대응하기 위해, 더 짧은 주기의 지표를 추가하거나 RSI 파라미터를 조정하여 전략의 시장 변화에 대한 민감성을 높일 수 있습니다.

  2. 엄격한 필터링 조건으로 인해 놓친 기회: RSI 필터 조건 설정이 더 엄격하기 때문에 잠재적인 거래 기회를 놓칠 수 있습니다. 사용자는 특정 시장 특성에 따라 RSI 값을 적절하게 조정할 수 있습니다. 예를 들어 구매 조건이 RSI <40으로 완화되고 판매 조건이 RSI> 60으로 완화됩니다.

  3. 고정 스톱 스톱 손실 비율의 제한: 전략은 고정된 비율의 스톱로스 설정을 사용한다. 이것은 다양한 변동률의 시장에서 충분히 유연하지 않을 수 있다. 자산의 평균 실제 변동량 (ATR) 의 동력에 따라 스톱로스 수준을 조정하는 것이 좋습니다.

  4. 시장 위축 위험시장의 수평 정리 단계에서 이동 평균이 자주 교차하여 신호 혼란을 일으킬 수 있습니다. 추가적인 수평 탐지 메커니즘을 추가하여 (ADX 지표와 같은) 낮은 변동성 환경에서 과도한 거래를 피할 수 있습니다.

  5. 매개변수 민감도전략 성능은 매개 변수 선택에 민감하다 (예를 들어, 이동 평균 주기 및 RSI 길이는), 매개 변수 선택이 적절하지 않으면 전략 성능이 좋지 않을 수 있다. 실전 사용 전에 충분한 매개 변수 최적화 및 재검토를 수행하는 것이 좋습니다.

전략 최적화 방향

  1. 다이내믹 스틸 스피드 메커니즘: ATR 지표로 고정된 퍼센트의 스톱 스톱 손실 설정을 대체하여 시장의 변동성에 더 잘 적응할 수 있습니다. 예를 들어, 스톱 스톱 손실을 1.5로 설정할 수 있습니다.*ATR, 1을 멈춰*ATR은 위험 관리에 대한 더 많은 유연성과 시장 적응력을 제공합니다.

  2. 트렌드 강도 필터를 추가하세요: 트렌드 강도를 측정하기 위해 ADX 지표를 도입하고, ADX>25의 강한 트렌드 환경에서만 거래하고, 약한 트렌드 또는 수평 시장에서 과도한 가짜 신호를 피하십시오.

  3. RSI 변수를 최적화: 현재 전략은 표준 14주기 RSI를 사용하며, 특정 자산 특성 및 시간 프레임에 따라 RSI 주기를 조정하는 것을 고려할 수 있습니다.

  4. 수량확인 도입: 거래량 분석 차원을 추가하여 신호가 발생했을 때 충분한 시장 참여가 뒷받침되는지 확인하고 거래 신호의 신뢰성을 향상시킵니다. 예를 들어, 구매 신호가 발생했을 때 거래량이 N 일 평균보다 높을 수 있습니다.

  5. 포지션 동적 조정동적으로 트렌드 강도에 따라 포지션 크기를 조정합니다. (녹색 또는 빨간색 이동 평균의 수) 더 강한 트렌드에 포지션을 증가시키고 약한 트렌드에 포지션을 감소시켜 자금 사용 효율을 최적화합니다.

  6. 시장 환경 필터에 가입하세요: 변동률 지표 (VIX 또는 ATR과 같은) 를 통해 현재 시장 환경을 탐지하고, 높은 변동성 환경에서 전략 매개 변수를 조정하거나 거래를 중지하여 극한 시장 조건에서의 위험을 줄입니다.

요약하다

마드리드 띠 모양 RSI 강화형 다중 시간 프레임 EMA 트렌드 전략은 이동 평균 띠 모양 구조와 RSI 필터링 메커니즘을 결합하여 거래자에게 강력한 트렌드 식별 및 거래 실행 도구를 제공하는 기능이있는 전체적인 정량 거래 시스템입니다. 전략의 핵심 장점은 여러 확인 메커니즘과 트렌드 강도를 측정하는 능력으로 거래 결정을 더 객관적이고 데이터에 의해 주도합니다.

트렌드 시장에서 전략이 잘 작동하지만, 수평 시장과 급격한 반전 환경에서 도전을 겪을 수 있습니다. 동적 정지 손실, 트렌드 강도 필터링, 거래량 확인과 같은 최적화 조치를 도입함으로써 전략의 안정성과 적응력을 더욱 향상시킬 수 있습니다.

이 전략은 특히 중·장기 추세 거래자에게 적합하며, 합리적인 파라미터 조정과 위험 관리를 통해 다양한 시장 환경에서 높은 확률의 거래 기회를 찾을 수 있습니다. 그러나 모든 거래 전략은 거래자의 위험 선호도와 투자 목표와 일치해야합니다. 실제 적용 전에 충분한 피드백과 최적화가 권장됩니다.

전략 소스 코드
/*backtest
start: 2024-03-24 00:00:00
end: 2025-03-23 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=5
strategy("Madrid Ribbon Strategy with Backtesting", shorttitle="Madrid Ribbon Strat", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000)

// Inputs
i_exp = input.bool(true, title="Use Exponential MA")
wallet_balance = input.float(100000, title="Starting Wallet Balance", minval=1000)

// RSI Settings
rsi_length = input.int(14, title="RSI Length")
rsi = ta.rsi(close, rsi_length)

// Profit Target & Stop Loss (%)
long_take_profit_perc = input.float(0.5, title="Long Take Profit (%)") / 100  // 0.5%
long_stop_loss_perc = input.float(1.0, title="Long Stop Loss (%)") / 100    // 1%
short_take_profit_perc = input.float(0.5, title="Short Take Profit (%)") / 100  // 0.5%
short_stop_loss_perc = input.float(1.0, title="Short Stop Loss (%)") / 100    // 1%

// Source
src = close

// Compute Moving Averages
ma05 = i_exp ? ta.ema(src, 5) : ta.sma(src, 5)
ma10 = i_exp ? ta.ema(src, 10) : ta.sma(src, 10)
ma15 = i_exp ? ta.ema(src, 15) : ta.sma(src, 15)
ma20 = i_exp ? ta.ema(src, 20) : ta.sma(src, 20)
ma25 = i_exp ? ta.ema(src, 25) : ta.sma(src, 25)
ma30 = i_exp ? ta.ema(src, 30) : ta.sma(src, 30)
ma35 = i_exp ? ta.ema(src, 35) : ta.sma(src, 35)
ma40 = i_exp ? ta.ema(src, 40) : ta.sma(src, 40)
ma45 = i_exp ? ta.ema(src, 45) : ta.sma(src, 45)
ma50 = i_exp ? ta.ema(src, 50) : ta.sma(src, 50)
ma55 = i_exp ? ta.ema(src, 55) : ta.sma(src, 55)
ma60 = i_exp ? ta.ema(src, 60) : ta.sma(src, 60)
ma65 = i_exp ? ta.ema(src, 65) : ta.sma(src, 65)
ma70 = i_exp ? ta.ema(src, 70) : ta.sma(src, 70)
ma75 = i_exp ? ta.ema(src, 75) : ta.sma(src, 75)
ma80 = i_exp ? ta.ema(src, 80) : ta.sma(src, 80)
ma85 = i_exp ? ta.ema(src, 85) : ta.sma(src, 85)
ma90 = i_exp ? ta.ema(src, 90) : ta.sma(src, 90)
ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100)

// Function for ribbon color
maColor(_ma, _maRef) =>
    diffMA = ta.change(_ma)
    resultColor = diffMA >= 0 and _ma > _maRef ? color.lime :
                  diffMA < 0 and _ma > _maRef ? color.maroon :
                  diffMA <= 0 and _ma < _maRef ? color.red :
                  diffMA >= 0 and _ma < _maRef ? color.green : color.gray
    resultColor

// Count Green and Red Ribbons
count_green = 0
count_red = 0

mas = array.new_float(18)
array.set(mas, 0, ma05)
array.set(mas, 1, ma10)
array.set(mas, 2, ma15)
array.set(mas, 3, ma20)
array.set(mas, 4, ma25)
array.set(mas, 5, ma30)
array.set(mas, 6, ma35)
array.set(mas, 7, ma40)
array.set(mas, 8, ma45)
array.set(mas, 9, ma50)
array.set(mas, 10, ma55)
array.set(mas, 11, ma60)
array.set(mas, 12, ma65)
array.set(mas, 13, ma70)
array.set(mas, 14, ma75)
array.set(mas, 15, ma80)
array.set(mas, 16, ma85)
array.set(mas, 17, ma90)

for i = 0 to array.size(mas) - 1
    ma = array.get(mas, i)
    col = maColor(ma, ma100)
    count_green += col == color.lime or col == color.green ? 1 : 0
    count_red += col == color.red or col == color.maroon ? 1 : 0

// Buy/Sell Conditions
buy_signal = count_green >= 13
sell_signal = count_red >= 9

// RSI Filtering
rsi_buy = buy_signal and rsi < 30
rsi_sell = sell_signal and rsi > 70

// Calculate Entry, Take Profit & Stop Loss for Long and Short
entry_price = close
long_take_profit = entry_price * (1 + long_take_profit_perc)  // +0.5%
long_stop_loss = entry_price * (1 - long_stop_loss_perc)      // -1%
short_take_profit = entry_price * (1 - short_take_profit_perc) // -0.5%
short_stop_loss = entry_price * (1 + short_stop_loss_perc)     // +1%

// Backtesting Orders
if rsi_buy
    strategy.entry("Buy", strategy.long, qty=wallet_balance / close)
    strategy.exit("Long Exit", from_entry="Buy", limit=long_take_profit, stop=long_stop_loss)
    alert("📈 Buy Signal! Entering long trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)

if rsi_sell
    strategy.entry("Sell", strategy.short, qty=wallet_balance / close)
    strategy.exit("Short Exit", from_entry="Sell", limit=short_take_profit, stop=short_stop_loss)
    alert("📉 Sell Signal! Entering short trade at " + str.tostring(entry_price), alert.freq_once_per_bar_close)

// Highlight Chart Background Based on Ribbon Counts
bgcolor(count_green >= 13 ? color.new(color.green, 90) : count_red >= 9 ? color.new(color.red, 90) : na, title="Ribbon Trend Highlight")

// Plot "B" when Buy Signal is active
plotshape(rsi_buy, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="B")

// Plot "S" when Sell Signal is active
plotshape(rsi_sell, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="S")

// Plot the Madrid Ribbon (all MAs)
plot(ma05, color=maColor(ma05, ma100), title="MA05", linewidth=1)
plot(ma10, color=maColor(ma10, ma100), title="MA10", linewidth=1)
plot(ma15, color=maColor(ma15, ma100), title="MA15", linewidth=1)
plot(ma20, color=maColor(ma20, ma100), title="MA20", linewidth=1)
plot(ma25, color=maColor(ma25, ma100), title="MA25", linewidth=1)
plot(ma30, color=maColor(ma30, ma100), title="MA30", linewidth=1)
plot(ma35, color=maColor(ma35, ma100), title="MA35", linewidth=1)
plot(ma40, color=maColor(ma40, ma100), title="MA40", linewidth=1)
plot(ma45, color=maColor(ma45, ma100), title="MA45", linewidth=1)
plot(ma50, color=maColor(ma50, ma100), title="MA50", linewidth=1)
plot(ma55, color=maColor(ma55, ma100), title="MA55", linewidth=1)
plot(ma60, color=maColor(ma60, ma100), title="MA60", linewidth=1)
plot(ma65, color=maColor(ma65, ma100), title="MA65", linewidth=1)
plot(ma70, color=maColor(ma70, ma100), title="MA70", linewidth=1)
plot(ma75, color=maColor(ma75, ma100), title="MA75", linewidth=1)
plot(ma80, color=maColor(ma80, ma100), title="MA80", linewidth=1)
plot(ma85, color=maColor(ma85, ma100), title="MA85", linewidth=1)
plot(ma90, color=maColor(ma90, ma100), title="MA90", linewidth=1)
plot(ma100, color=maColor(ma100, ma100), title="MA100", linewidth=2)