
동적 추적 ADX 강화형 SMA 교차 전략은 간단한 이동 평균 ((SMA) 교차 신호와 평균 방향 지수 ((ADX) 필터를 결합한 정량 거래 시스템이다. 이 전략은 ADX 지표를 통해 시장 추세 강도를 확인하고, 충분한 동력이있는 경우에만 SMA 교차 거래 신호를 실행하며, 동적 중지 손실 및 추적 중지 손실 장치를 사용하여 수익과 위험을 제한한다. 이 전략은 또한 밤새 위험을 피하기 위해 회담 시간을 설정한다.
이 전략의 핵심 논리는 다음과 같은 몇 가지 핵심 구성 요소에 기반합니다.
SMA 교차 신호: 단기 (설정 3주기) 간단한 이동 평균을 사용하여, 가격이 상향으로 SMA를 통과할 때 다중 신호를 생성하고, 가격이 하향으로 SMA를 통과할 때 다중 신호를 생성한다.
ADX 필터: 수동으로 ADX 지표 (기본 주기는 15) 를 계산하여, ADX 값이 설정된 마이너스 (기본 15) 보다 크면만 거래가 실행될 수 있는 충분한 추세 강도를 확인한다. 이것은 흔들리는 시장에서 가짜 신호를 효과적으로 필터링한다.
동적 위험 관리:
세션 관리: 지정된 거래 세션 종료 시간 (설정된 16:00) 에 모든 지분을 필수적으로 매장하고, 밤새의 위험을 피한다.
실시간 신호 경고: 거래 신호가 발생하면 거래 방향, 입시 가격, 중지 가격, 중지 가격 등이 포함된 JSON 형식의 경고 메시지가 생성된다.
다시 그리기 방지 함수: reso_no_repaint 함수를 제공하여 지표가 다시 그려지지 않도록 보장하고 정책 신뢰성을 향상시킵니다.
트렌드 확인 메커니즘이 전략은 SMA 크로스와 ADX 지표를 결합하여 강력한 트렌드 상황을 효과적으로 식별하고 흔들리는 시장에서 잘못된 신호를 줄일 수 있습니다. 단순한 SMA 크로스 전략에 비해 거래 성공 확률이 증가합니다.
유연한 위험 관리포괄적 인 위험 제어 조치를 제공 합니다. 고정된 스톱, 목표 스톱 및 추적 스톱을 포함하여 거래자가 자신의 위험 취향에 따라 매개 변수를 조정할 수 있습니다.
세션 관리 기능: 트레이딩 하루의 끝에서 자동으로 포지션을 청산하여 하룻밤의 위험을 피합니다. 특히 일일 거래자 또는 주요 경제 뉴스 및 이벤트 위험을 피하려는 거래자에게 적합합니다.
실시간 경보 시스템: 자동화 거래 시스템이나 알림 메커니즘에 통합하기 위해 구조화된 JSON 형식의 알림을 제공합니다.
간단하지만 효과적입니다.: 전략 논리가 명확하고, 변수가 적으며, 이해하기 쉽고 조정할 수 있으며, 모든 수준의 거래자에게 적합하다.
다시 그리기 방지 디자인: 리모델링 방지 함수를 통해 정책이 실 디스크 환경에서 신뢰성을 보장한다.
단기 SMA 변동성: 기본으로 사용된 3주기 SMA는 너무 민감할 수 있으며, 높은 변동성 시장에서 과도한 거래 신호를 생성하여 거래 비용을 증가시키고 연속적인 손실을 초래할 수 있습니다.
고정 점수 위험 관리: 전략은 고정 점수를 사용 하 여 비율 또는 ATR 배수 보다는 중지 중지 손실을 설정 하기 위해, 이것은 다양한 변동성 환경에서 충분히 유연하지 않을 수 있습니다. 높은 변동성 시장 중단 손실은 너무 작을 수 있습니다, 낮은 변동성 시장 중단 손실은 너무 커 할 수 있습니다. ATR 기반의 동적 위험 관리로 전환하는 것을 고려 할 수 있습니다.
ADX 지연성: ADX는 뒤쳐진 지표이며, 트렌드가 형성된 후에야 확정 신호를 줄 수 있으며, 이는 진입이 늦어지게 됩니다. ADX 매개 변수를 최적화하거나 다른 선도 지표와 결합하여 개선할 수 있습니다.
시장 상태 구분 부족: 전략은 다른 시장 상태를 구분하지 않는다 (예: 트렌드, 간격 변동), 모든 시장 환경에서 동일한 거래 논리를 사용한다. 이는 트렌드 아닌 시장에서 좋지 않은 성과를 초래할 수 있다.
단일 시간 프레임 제한이 전략은 단일 시간 프레임 분석에만 기반하고, 다중 시간 프레임 확인이 부족하여, 더 큰 추세의 배경에서 중요한 시장 전환을 놓칠 수 있습니다.
동적 위험 관리 개선: ATR (평균 실제 변동폭) 에 기반한 다이내믹 리스크 관리 시스템으로 고정 점수 스톱 스톱을 대체하여 전략이 다른 시장 변동 환경에 적응할 수 있도록합니다. 예를 들어, 스톱 스톱은 1.5 배의 ATR, 스톱 스톱은 3 배의 ATR로 설정할 수 있습니다.
다중 시간 프레임 분석: 더 높은 시간 프레임의 트렌드 확인을 추가하고, 더 큰 트렌드 방향으로만 거래하여 승률을 높인다. 더 긴 주기 SMA를 트렌드 필터로 추가할 수 있다.
시장 상태 식별: 시장 상태 분류 메커니즘을 도입합니다. 변동성 지표 또는 트렌드 강도 지표와 같은 다른 시장 환경에서 다른 전략 매개 변수 또는 거래 논리를 적용합니다.
입시 최적화: 추가적인 진입 확인 지표, RSI ((상대적으로 약한 지수) 또는 브린 밴드 등을 추가하여 진입 신호의 질을 향상시킬 수 있습니다. 또한 단일 진입 지점 위험을 줄이기 위해 배치 창고 전략을 시행할 수 있습니다.
적응 변수: 최근 시장 행동에 따라 SMA 길이를 자동으로 조정하는 변수 적응 메커니즘을 구현합니다. ADX 마이너스 및 위험 관리 매개 변수는 전략이 변화하는 시장 조건에 적응 할 수 있도록합니다.
시간 필터거래 시간 필터를 추가하여 유동성이 낮은 시간이나 유동성이 높은 뉴스 발표 시간을 피하여 슬라이드 포인트 및 비정상적인 움직임의 위험을 줄입니다.
동적 추적 ADX 강화 SMA 교차 전략은 기술 분석과 위험 관리를 결합한 완전한 거래 시스템이다. 간단한 SMA 교차 신호와 ADX 트렌드 확인을 결합함으로써 이득이 되는 거래 기회를 더 정확하게 식별할 수 있다. 동적 중지 및 추적 중지 메커니즘은 좋은 위험 관리를 제공하며, 세션 관리 기능은 하룻밤의 위험을 더 낮춘다.
고정 점수 리스크 관리 및 단일 시간 프레임 분석과 같은 몇 가지 제한 사항에도 불구하고, 이러한 문제는 이 문서에서 제시된 최적화 방향에 의해 해결 될 수 있습니다. ATR 기반의 동적 리스크 관리, 다중 시간 프레임 분석 및 시장 상태 인식 등의 개선을 도입함으로써, 이 전략은 더 안정적이고 적응 가능한 거래 시스템으로 발전할 잠재력이 있습니다.
결국, 이 전략의 성공은 거래자의 매개 변수의 정교한 조정과 특정 시장과 시간 프레임에 대한 적응성에 달려 있습니다. 실제 거래 전에 충분한 회수 및 시뮬레이션 거래가 이루어져 전략이 다른 시장 조건에서 어떻게 작동하는지 확인하는 것이 좋습니다.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("safa bot alert", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
smaLength = input.int(3, title="SMA Length")
tpPoints = input.float(80, title="Take Profit (Points)")
slPoints = input.float(35, title="Stop Loss (Points)")
trailPoints = input.float(15, title="Trailing Stop (Points)")
sessionCloseHour = input.int(16, "Session Close Hour (24h)")
sessionCloseMinute = input.int(0, "Session Close Minute")
// === ADX INPUTS ===
adxLength = input.int(15, title="ADX Length")
adxThreshold = input.float(15, title="Minimum ADX to Trade")
// === INDICATORS ===
sma = ta.sma(close, smaLength)
plot(sma, title="3 SMA", color=color.orange)
// === MANUAL ADX CALCULATION ===
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
trur = ta.rma(ta.tr, adxLength)
plusDI = 100 * ta.rma(plusDM, adxLength) / trur
minusDI = 100 * ta.rma(minusDM, adxLength) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)
plot(adx, title="ADX", color=color.blue)
// === ENTRY CONDITIONS ===
longCondition = ta.crossover(close, sma) and adx > adxThreshold
shortCondition = ta.crossunder(close, sma) and adx > adxThreshold
// === STRATEGY EXECUTION ===
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit", from_entry="Long", limit=close + tpPoints, stop=close - slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"BUY","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close - slPoints) +
',"TP":' + str.tostring(close + tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Exit", from_entry="Short", limit=close - tpPoints, stop=close + slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"SELL","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close + slPoints) +
',"TP":' + str.tostring(close - tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
// === FORCE EXIT AT SESSION CLOSE ===
sessionCloseTime = (hour == sessionCloseHour and minute == sessionCloseMinute)
if (sessionCloseTime)
strategy.close_all(comment="Session Close")
// === NO-REPAINT FUNCTION ===
reso_no_repaint(exp, use, res) =>
use ? request.security(syminfo.tickerid, res, exp[1], lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_on)[0] : exp