
이 전략은 트렌드 추적과 간격 거래를 결합한 자기 적응 거래 시스템이다. 시스템은 ADX 지표를 통해 시장 상태를 동적으로 식별하고, 트렌드 시장과 충격 시장에서 각각 다른 거래 전략을 사용합니다. 트렌드 시장에서, 전략은 RSI와 MACD 확인과 결합한 이동 평균 크로스 신호를 사용합니다. 충격 시장에서, 전략은 RSI 과잉 구매 과잉 판매 신호와 결합한 브린 밴드 돌파를 사용하여 거래 시스템을 사용합니다. 또한 ATR 기반의 동적 손실 차단 장치를 통합하여 위험을 효과적으로 제어합니다.
전략의 핵심은 시장 상태를 식별하는 메커니즘이다. ADX가 25 이상일 때 트렌드 시장으로 판단될 때 트렌드 추적 전략을 활성화한다:
ADX가 25보다 작을 때 주파수 시장으로 판단하면, 간격 거래 전략을 사용한다:
손해제어 설정은 ATR의 동적배수 방식을 채택하고, 손해제어는 1.5배 ATR, 손해제어는 3배 ATR .
이 전략은 시장 상태의 동적 인식과 그에 따른 전략 전환을 통해 다양한 시장 환경에 적응합니다. 다중 기술 지표의 조합과 동적 위험 제어 메커니즘을 통해 전략은 더 나은 실용성을 가지고 있습니다. 그러나 여전히 신호 지연 및 가짜 돌파 등의 위험에 주의를 기울여야하며 실제에서 충분한 테스트와 매개 변수 최적화를 권장합니다.
/*backtest
start: 2024-09-01 00:00:00
end: 2025-02-19 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Trend vs Range Trading - Fully Fixed for v6", overlay=true)
// 🔹 Moving Averages (SMA 50 & 200)
sma50 = ta.sma(close, 50)
sma200 = ta.sma(close, 200)
// 🔹 Proper ADX Calculation (With Corrected ta.dmi() Parameters)
dmiLength = 14
adxSmoothing = 14
[dmiPlus, dmiMinus, adx] = ta.dmi(dmiLength, adxSmoothing)
// 🔹 Bollinger Bands Calculation (Fixed for v6)
bb_length = 20
bb_mult = 2.0
bb_basis = ta.sma(close, bb_length)
bb_dev = ta.stdev(close, bb_length)
bb_upper = bb_basis + (bb_mult * bb_dev)
bb_lower = bb_basis - (bb_mult * bb_dev)
// 🔹 Additional Indicators (RSI & MACD)
rsi = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// 🔹 ATR for Stop Loss & Take Profit
atr = ta.atr(14)
stop_loss_mult = 1.5 // Stop Loss Multiplier
take_profit_mult = 3.0 // Take Profit Multiplier
// 🔹 Trend vs Range Market Detection
is_trending = adx > 25
// 🔹 Trend Following Strategy (SMA Cross & Confirmation)
long_condition_trend = is_trending and ta.crossover(sma50, sma200) and rsi > 50 and macdLine > signalLine
short_condition_trend = is_trending and ta.crossunder(sma50, sma200) and rsi < 50 and macdLine < signalLine
// 🔹 Range Trading Strategy (Bollinger Bands & RSI Confirmation)
long_condition_range = not is_trending and ta.crossover(close, bb_lower) and rsi < 40
short_condition_range = not is_trending and ta.crossunder(close, bb_upper) and rsi > 60
// 🔹 Stop Loss & Take Profit Calculations
long_stop_loss = close - (atr * stop_loss_mult)
long_take_profit = close + (atr * take_profit_mult)
short_stop_loss = close + (atr * stop_loss_mult)
short_take_profit = close - (atr * take_profit_mult)
// 🔹 Execute Trades (With Stop Loss & Take Profit)
if long_condition_trend
strategy.entry("Long_Trend", strategy.long)
strategy.exit("Exit_Long_Trend", from_entry="Long_Trend", stop=long_stop_loss, limit=long_take_profit)
if short_condition_trend
strategy.entry("Short_Trend", strategy.short)
strategy.exit("Exit_Short_Trend", from_entry="Short_Trend", stop=short_stop_loss, limit=short_take_profit)
if long_condition_range
strategy.entry("Long_Range", strategy.long)
strategy.exit("Exit_Long_Range", from_entry="Long_Range", stop=long_stop_loss, limit=long_take_profit)
if short_condition_range
strategy.entry("Short_Range", strategy.short)
strategy.exit("Exit_Short_Range", from_entry="Short_Range", stop=short_stop_loss, limit=short_take_profit)
// 🔹 Visual Indicators & Background Color (Trend vs Range)
bgcolor(is_trending ? color.green : color.blue)
// 🔹 Plot Moving Averages & Bollinger Bands
plot(sma50, color=color.blue, title="SMA 50")
plot(sma200, color=color.red, title="SMA 200")
plot(bb_upper, color=color.green, title="BB Upper")
plot(bb_lower, color=color.orange, title="BB Lower")