
이 전략은 일선 차트를 기반으로 한 다중 지표 연동 거래 시스템으로, 가격 행동, 다중 주기 평균선 시스템, 상대적으로 강한 지표 ((RSI), 평균 트렌드 지수 ((ADX) 및 거래량 필터를 교묘하게 결합하여 강력한 트렌드 환경에서 높은 확률의 회귀 시점으로 접근하는 것을 목표로합니다. 이 전략은 특히 일선 수준의 트렌드 거래에서 여러 단계의 필터링을 통해 조건이 명확한 방향성이있는 시장에서만 거래되도록 설계되었습니다.
이 전략의 핵심 논리는 다단계 조건 필터링 시스템에 기반하며, 구체적인 작동 원리는 다음과 같다:
트렌드 확인 시스템전략은 우선 가격이 장기 동향 평균선 (>100일 EMA) 위에 있고, 중기 동향 평균선 (>50일 EMA) 도 장기 동향 평균선 위에 있는 것을 요구한다. 강력한 상승 동향을 확인하기 위해서이다.
리콜 메커니즘: 트렌드를 확인한 후, 전략은 가격의 빠른 평균선 ((10일 EMA) 에 대한 회전을 찾고, 가격의 그 평균선 아래에서 다시 상향으로 돌파되어 명확한 입문 신호를 형성할 때까지 기다립니다.
RSI 동력 확인출입 전 RSI 지표가 설정된 스레드값 (설정값 55) 보다 높게 요구되는데, 이는 시장이 충분한 상행력을 유지할 수 있도록 하기 위한 것이다. 포크 거래는 설정된 스레드값 (설정값 45) 보다 낮은 RSI를 요구한다.
ADX 트렌드 강도 필터링이 전략은 ADX 지표의 사용자 정의 계산을 사용하여 ADX가 지정된 스레드값 (기본 20) 보다 높을 때만 거래가 허용되며, 약한 추세 또는 상반된 시장을 효과적으로 필터링합니다.
양수 확인거래의 질을 더욱 높이기 위해, 전략은 20일 평균 거래량보다 높은 거래량을 요구하며, 시장에 충분한 참여가 가격 움직임을 지원하도록 보장합니다.
위험 관리 시스템전략: ATR 기반의 동적 중지 및 중지 설정을 채택하고, 모바일 중지를 지원하여 정확한 위험 통제를 구현합니다. 중지 기본 설정은 1.5 배의 ATR, 중지 3 배의 ATR, 모바일 중지 단계는 1 배의 ATR입니다.
이 전략의 코드에 대해 자세히 살펴보면 다음과 같은 분명한 장점을 찾을 수 있습니다.
다단계 필터링 시스템이 전략은 평균선, RSI, ADX 및 거래량 다중 필터링 조건을 결합하여 거래 신호의 품질을 크게 향상시키고 가짜 신호의 발생을 줄였습니다.
추세와 동력이 전략은 가격 추세에만 초점을 맞추지 않고, RSI와 ADX를 통해 시장 동력과 추세 강도를 확인하는 “트렌드-동력”의 이중 확인 메커니즘을 구현합니다.
유연한 변수 맞춤형전략: 전략은 평균 주기, RSI 절댓값, ADX 절댓값, 거래량 배수 등과 같은 다양한 변수 설정을 제공합니다. 사용자는 다른 시장 환경에 따라 유연하게 조정할 수 있습니다.
좋은 위험 관리ATR 기반의 동적 중지 및 중지 시스템, 선택 가능한 이동 중지 메커니즘과 함께, 전략에 과학적 위험 제어 프레임 워크를 제공하여 각 거래의 위험 경계를 효과적으로 제어합니다.
시장 환경에 대한 적응력ADX 필터링을 통해 전략은 자동으로 동요 시장을 인식하고 회피할 수 있으며, 명확한 추세에서만 거래할 수 있으며, 전략의 다양한 시장 환경에 대한 적응력을 크게 향상시킵니다.
이 전략은 훌륭하게 설계되었지만 다음과 같은 잠재적인 위험과 도전이 있습니다.
매개변수 민감도전략은 여러 지표 파라미터를 의존하며, 다른 파라미터 조합은 성능의 큰 차이를 초래할 수 있으며, 과도한 최적화는 미래의 성능 저하로 이어질 수 있다. 해결책은 광범위한 파라미터 안정성 테스트를 실시하여, 역사 데이터를 과도하게 재배치하는 것을 피하는 것이다.
추세 전환의 위험강력한 트렌드가 급격히 변하는 경우, 여러 필터링 조건이 있더라도 전략은 여전히 큰 손실을 입을 수 있습니다. 더 높은 시간대에 대한 트렌드 확인 또는 트렌드 반전 경고 장치를 추가하는 것이 좋습니다.
신호 희소성: 여러 가지 엄격한 필터링 조건을 적용하기 때문에 전략은 장기간 거래 신호를 생성하지 못할 수 있으며, 이로 인해 자금 활용률이 낮아진다. 핵심 논리를 그대로 유지하면서 일부 조건 파라미터를 적절히 완화하는 것이 고려될 수 있다.
파격 위험을 막기: 시장의 큰 변동이나 유동성이 부족할 경우 ATR 기반의 고정 스톱은 예상대로 실행되지 않을 수 있습니다. 시간 조건 필터 또는 시장 변동성 모니터링 장치를 추가하는 것을 고려하는 것이 좋습니다.
리드 디스크와의 차이점: 전략 재검토에서의 성능은 실전과 차이가 있을 수 있으며, 특히 슬라이드 및 거래 비용과 같은 요소를 고려합니다. 실전 이전에 종이 거래 테스트를 수행하고 처음에는 더 적은 금액으로 검증하는 것이 좋습니다.
정책 코드의 심층적인 분석을 바탕으로 몇 가지 가능한 최적화 방향은 다음과 같습니다.
다중 시간 주기 확인: 더 높은 시간 주기의 트렌드 확인이 도입되면서, 여러 시간 주기의 트렌드가 일치할 때만 거래가 허용되며, 트렌드 판단의 신뢰성을 높인다.
변동률 적응 변수: 시장의 변동률 동력과 관련된 중요한 매개 변수, 예를 들어, 중지 거리, 이동 중지 단계, 전략이 다양한 시장 변동 환경에 자동으로 적응 할 수 있도록합니다.
기계 학습 최적화기계학습 기술을 사용하여 전략의 매개 변수 또는 무게를 동적으로 조정하여 전략이 시장 환경의 변화에 더 잘 적응하고 장기적인 안정성을 향상시킬 수 있습니다.
기본 필터를 추가하세요: 디지털 자산 거래의 경우, 추가적인 필터링 조건으로 체인 데이터 또는 시장 감정 지표를 도입하여 신호 품질을 더욱 향상시킬 수 있습니다.
일부 포지션 관리: 동적 포지션 관리 시스템을 구현하여 신호 강도, 시장 변동성 및 계좌 손실 상태에 따라 각 거래의 포지션 크기를 자동으로 조정하여 자금 사용 효율성과 위험 수익률을 최적화합니다.
을 막는 전략을 확장한다다단계 중단 전략, 예를 들어 분기 수익 또는 시장 구조에 기반한 동적 중단, 전략의 수익성 및 승률을 높이는 것.
트렌드 동력 확인형 다중 지표 협동 거래 전략은 가격 행동, 평균선 시스템, RSI 동력 확인, ADX 트렌드 강도 필터링 및 거래량 확인과 같은 다중 메커니즘을 결합하여 시장의 높은 확률 거래 기회를 효과적으로 포착하는 잘 설계된 거래 시스템입니다. 이 전략은 명확한 트렌드 시장에서 재입장 기회를 찾는 데 특히 적합하며, 엄격한 조건 필터링과 완벽한 위험 관리를 통해 높은 신호 품질과 위험 제어 능력을 달성합니다.
전략은 변수 감수성, 트렌드 전환 위험, 신호 희소성 등의 과제에 직면하지만, 여러 시간 주기 확인, 변동률 자율 적응 변수, 기계 학습 최적화, 기본 필터링 및 동적 위치 관리와 같은 수단과 같은 권장 된 최적화 방향을 통해 전략은 안정성과 적응력을 더욱 향상시킬 수 있습니다. 종합적으로, 이 전략은 거래자에게 체계화 된, 징계 된 거래 프레임 워크를 제공하여 복잡하고 변화하는 시장 환경에서 객관적인 거래 결정을 유지하는 데 도움이됩니다.
/*backtest
start: 2024-06-09 00:00:00
end: 2025-06-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("JonnyBtc Daily Pullback Strategy (Volume + ADX)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
ema_fast_len = input.int(10, title="Fast EMA (Pullback EMA)") // Shorter for daily
ema_trend_len = input.int(100, title="Long-Term Trend EMA") // Shorter than 200
ema_mid_len = input.int(50, title="Mid-Term Trend EMA")
rsi_len = input.int(14, title="RSI Length")
rsi_buy_min = input.int(55, title="Min RSI for Buy")
rsi_sell_max = input.int(45, title="Max RSI for Sell")
adx_len = input.int(14, title="ADX Length")
adx_min = input.float(20, title="Minimum ADX for Trend Strength")
vol_len = input.int(20, title="Volume MA Length")
volume_mult = input.float(1.0, title="Volume Multiplier for Confirmation")
long_only = input.bool(true, title="Only Trade Longs")
use_trailing_stop = input.bool(true, title="Use Trailing Stop")
trail_atr_mult = input.float(1.0, title="ATR Trailing Stop Multiplier", step=0.1)
atr_mult_sl = input.float(1.5, title="Fixed Stop Loss (ATR Multiplier)", step=0.1)
atr_mult_tp = input.float(3.0, title="Take Profit (ATR Multiplier)", step=0.1)
// === INDICATORS ===
price = close
ema_fast = ta.ema(price, ema_fast_len)
ema_trend = ta.ema(price, ema_trend_len)
ema_mid = ta.ema(price, ema_mid_len)
rsi = ta.rsi(price, rsi_len)
atr = ta.atr(14)
vol_sma = ta.sma(volume, vol_len)
// === Manual ADX Calculation ===
up = ta.change(high)
down = -ta.change(low)
plusDM = (up > down and up > 0) ? up : 0
minusDM = (down > up and down > 0) ? down : 0
trur = ta.rma(ta.tr(true), adx_len)
plusDI = 100 * ta.rma(plusDM, adx_len) / trur
minusDI = 100 * ta.rma(minusDM, adx_len) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adx_len)
// === TREND FILTERS ===
strong_uptrend = price > ema_trend and ema_mid > ema_trend
strong_downtrend = price < ema_trend and ema_mid < ema_trend
// === VOLUME & ADX CONFIRMATION ===
volume_ok = volume > vol_sma * volume_mult
adx_ok = adx > adx_min
// === ENTRY CONDITIONS ===
long_signal = ta.crossover(price, ema_fast) and strong_uptrend and rsi > rsi_buy_min and price[1] < ema_fast[1] and adx_ok and volume_ok
short_signal = ta.crossunder(price, ema_fast) and strong_downtrend and rsi < rsi_sell_max and price[1] > ema_fast[1] and adx_ok and volume_ok
// === TRADE EXECUTION ===
if long_signal
strategy.entry("Long", strategy.long)
if short_signal and not long_only
strategy.entry("Short", strategy.short)
// === EXITS ===
long_sl = price - atr * atr_mult_sl
long_tp = price + atr * atr_mult_tp
short_sl = price + atr * atr_mult_sl
short_tp = price - atr * atr_mult_tp
trail_offset = atr * trail_atr_mult
if use_trailing_stop
strategy.exit("Exit Long", from_entry="Long", trail_points=trail_offset, trail_offset=trail_offset, limit=long_tp)
strategy.exit("Exit Short", from_entry="Short", trail_points=trail_offset, trail_offset=trail_offset, limit=short_tp)
else
strategy.exit("Exit Long", from_entry="Long", stop=long_sl, limit=long_tp)
strategy.exit("Exit Short", from_entry="Short", stop=short_sl, limit=short_tp)
// === PLOTS ===
plot(ema_fast, title="Fast EMA", color=color.orange)
plot(ema_mid, title="Mid-Term EMA", color=color.aqua)
plot(ema_trend, title="Long-Term EMA", color=color.blue)
// === ALERT CONDITIONS ===
alertcondition(long_signal, title="Buy Alert", message="BTC BUY Signal")
alertcondition(short_signal and not long_only, title="Sell Alert", message="BTC SELL Signal")
// === PLOTS FOR SIGNALS ===
plotshape(long_signal, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.green, text="BUY")
plotshape(short_signal and not long_only, title="Sell Signal", style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL")