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

RSI 모멘텀 필터와 함께 전략에 따른 다기술 지표 트렌드

저자:차오장, 날짜: 2024-12-20 14:10:43
태그:EMARSIATRSMAMACD

img

전반적인 설명

이 전략은 트렌드를 따르는 전략으로, 주로 기하급수적인 이동평균 (EMA) 크로스오버, 슈퍼트렌드 지표 및 상대적 강도 지표 (RSI) 를 사용하여 여러 기술적 지표를 결합하여 거래 기회를 식별합니다. 이 전략은 지표를 유기적으로 통합하여 전체적인 거래 시스템을 달성하고, 트렌드 추적에 모멘텀 필터링을 추가하고, 동적인 스톱-러스 및 영리 포지셔닝을 위해 ATR을 활용합니다.

전략 원칙

이 전략은 트레이딩 신호를 결정하기 위해 세 가지 필터링 메커니즘을 사용합니다.

  1. EMA 크로스오버 시스템은 단기 트렌드 변화를 포착하여 빠른 EMA가 느린 EMA를 넘어서면 긴 신호를 생성하고 느린 EMA를 넘어서면 짧은 신호를 생성합니다.
  2. 슈퍼트렌드 지표는 전체 트렌드 방향을 확인하기 위해 ATR에 기반한 동적 지지/저항 라인을 계산합니다. 가격은 슈퍼트렌드 라인 위에 있고, 아래로 내려갈 때만 긴 포지션이 허용됩니다.
  3. RSI 지표는 과잉 구매 또는 과잉 판매 시장 조건을 필터합니다. RSI가 과잉 구매 수준 이하일 때만 긴 엔트리가 허용되며, 과잉 판매 수준 이상의 경우 단축됩니다.

이 전략에는 ATR 기반의 동적 스톱 로스 및 이윤 취득 시스템이 포함되어 있으며 시장 변동성에 따라 위험 관리 매개 변수를 자동으로 조정합니다. 시간 필터는 또한 유동성이 낮은 시기를 피하기 위해 특정 기간에 거래를 제한합니다.

전략적 장점

  1. 여러 가지 기술 지표의 조합은 단일 지표에서 나올 수 있는 잘못된 신호를 피하여 더 신뢰할 수 있는 거래 신호를 제공합니다.
  2. 동적 스톱 로스 및 영업 취득 설정은 다른 시장 변동성 조건에 적응하여 매우 변동적인 시장에서 더 많은 호흡 공간을 허용합니다.
  3. RSI 필터링 메커니즘은 극단적인 시장 조건에서 진입 위험을 효과적으로 줄입니다.
  4. 시간 필터 기능을 사용하면 거래자가 특정 거래 세션에 집중하여 비효율적인 기간을 피할 수 있습니다.

전략 위험

  1. 여러 필터링 조건으로 인해 거래 기회를 놓칠 수 있습니다.
  2. 급변하는 시장에서 손해를 막는 수준은 쉽게 작동될 수 있습니다.
  3. 과도한 매개 변수 최적화는 과도한 적합성 문제로 이어질 수 있습니다.
  4. 높은 주파수 거래는 상당한 거래 비용을 초래할 수 있습니다.

전략 최적화 방향

  1. 추가 확인으로 부피 지표를 추가하는 것을 고려하십시오.
  2. 다양한 시장 환경에 더 잘 적응하기 위해 적응 가능한 매개 변수 조정 메커니즘을 도입합니다.
  3. 트렌드 강도 필터를 구현하여 약한 트렌드 시장에서 과잉 거래를 피하십시오.
  4. 보다 지능적인 위치 사이즈 시스템을 개발하여 시장 조건에 따라 위치 사이즈를 동적으로 조정합니다.

요약

이 전략은 여러 기술적 지표와 필터링 조건을 결합하여 비교적 완전한 거래 시스템을 구축합니다. 주요 장점은 여러 확인 메커니즘과 동적 위험 관리에 있으며 매개 변수 최적화 및 거래 비용에주의를 기울여야합니다. 지속적인 최적화 및 개선으로 전략은 다른 시장 환경에서 안정적인 성능을 유지할 수 있습니다.


/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Supertrend + EMA Crossover with RSI Filter", shorttitle="ST_EMA_RSI", overlay=true)

// Input parameters for EMA
fastEMA          = input.int(3,  title="Fast EMA Period", minval=1)
slowEMA          = input.int(6,  title="Slow EMA Period", minval=1)
atrLength        = input.int(3,  title="ATR Length", minval=1)

// Using a fixed multiplier for Supertrend calculation
stMultiplier = 1

// Stop loss and take profit multipliers
stopLossATR      = input.float(2.5, title="Stop Loss ATR Multiplier", minval=0.1, step=0.1)
takeProfitATR    = input.float(4,   title="Take Profit ATR Multiplier", minval=0.1, step=0.1)

// RSI inputs
rsiLength      = input.int(10, title="RSI Length", minval=1)
rsiOverbought  = input.float(65, title="RSI Overbought Level", minval=50.0, maxval=100.0)
rsiOversold    = input.float(30.0, title="RSI Oversold Level",   minval=0.0, maxval=50.0)

// Declare the RSI plot toggle input as a global variable
bool rsiPlotEnabled = input.bool(true, title="Show RSI in separate panel")

// Time filter inputs
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 2023 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime   = input(title="End Filter",   defval=timestamp("28 Apr 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Date/time filtering logic
inDateRange = true

// Calculate EMAs
fastEMALine = ta.ema(close, fastEMA)
slowEMALine = ta.ema(close, slowEMA)

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate Supertrend using fixed multiplier
up = high - (stMultiplier * atr)
dn = low +  (stMultiplier * atr)

var float trendUp = na
var float trendDown = na
var int trend = na

trendUp   := na(trendUp[1])   ? up : (close[1] > trendUp[1]   ? math.min(up, trendUp[1])   : up)
trendDown := na(trendDown[1]) ? dn : (close[1] < trendDown[1] ? math.max(dn, trendDown[1]) : dn)

trend := close > nz(trendUp[1]) ? 1 : close < nz(trendDown[1]) ? -1 : nz(trend[1], 1)
supertrend = trend == 1 ? trendUp : trendDown

// Calculate RSI
myRSI = ta.rsi(close, rsiLength)

// Entry conditions with RSI filter
longEntryCondition  = ta.crossover(fastEMALine, slowEMALine) and (trend == 1) and (myRSI < rsiOverbought)
shortEntryCondition = ta.crossunder(fastEMALine, slowEMALine) and (trend == -1) and (myRSI > rsiOversold)

// Strategy entries
if inDateRange and longEntryCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if inDateRange and shortEntryCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

// Stops and targets
if strategy.position_size > 0
    longStopLoss   = strategy.position_avg_price - stopLossATR * atr
    longTakeProfit = strategy.position_avg_price + takeProfitATR * atr
    strategy.exit("Long SL/TP", "Long", stop=longStopLoss, limit=longTakeProfit)

if strategy.position_size < 0
    shortStopLoss   = strategy.position_avg_price + stopLossATR * atr
    shortTakeProfit = strategy.position_avg_price - takeProfitATR * atr
    strategy.exit("Short SL/TP", "Short", stop=shortStopLoss, limit=shortTakeProfit)

// Plot EMAs and Supertrend
plot(fastEMALine, title="Fast EMA", color=color.new(color.blue, 0))
plot(slowEMALine, title="Slow EMA", color=color.new(color.red, 0))
plot(trend == 1 ? supertrend : na, title="Supertrend Up", color=color.green, style=plot.style_linebr)
plot(trend == -1 ? supertrend : na, title="Supertrend Down", color=color.red, style=plot.style_linebr)

// Plot RSI and hlines
plot(rsiPlotEnabled ? myRSI : na, title="RSI", color=color.new(color.purple, 0))
hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold,   "Oversold",   color=color.green, linestyle=hline.style_dotted)

// Plot entry signals
plotshape(longEntryCondition, title="Long Entry Signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0))
plotshape(shortEntryCondition, title="Short Entry Signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))


관련

더 많은