
이 전략은 다중 시간 프레임 분석을 결합한 트렌드 추적 거래 시스템으로, 주로 세 개의 다른 주기에서 지수 이동 평균 ((EMA) 의 교차 신호를 기반으로 하고, 높은 시간 프레임의 지원 및 저항 수준을 필터링에 보조한다. 이 전략의 핵심은 EMA5, EMA8 및 EMA13 사이의 교차 관계를 사용하여 구매 및 판매 신호를 생성하는 데 있습니다.
코드에 대한 심층적인 분석을 통해, 이 전략은 다음과 같이 작동합니다:
신호 생성:
높은 시간대 필터링:
위험 관리:
그래픽 피드백:
이 전략은 다음과 같은 몇 가지 주요 장점을 가지고 있습니다.
다중 신호 확인: EMA5가 동시에 EMA8과 EMA13을 통과하도록 요구하여, 가짜 돌파의 가능성을 줄이고, 신호의 신뢰성을 높인다.
다중 시간 프레임 분석: 상위 시간 프레임 ((1시간) 의 지지와 저항 수준을 통합하여 거래자가 거래 결정을 더 큰 시장 구조의 관점에서 고려하도록 도와줍니다.
스마트 다이내믹 스톱: 고정 스톱과 달리, 추적 스톱 메커니즘은 자금을 보호하면서 수익을 지속적으로 증가시키고 리스크 수익률을 높일 수 있습니다.
명확한 시각적 피드백: 중요한 지표, 신호 및 출구 지점을 차트에 그리는 것으로 거래자가 시장 상태와 전략 논리를 직관적으로 이해할 수 있도록합니다.
양방향 거래 능력: 전략은 다단계 거래와 공수 거래를 동시에 지원하며, 다양한 시장 환경에서 기회를 찾아 수익 잠재력을 극대화 할 수 있습니다.
파라미터 리스크 제어: 트래킹 스톱 로즈 오차량을 사용자에 의해 조정할 수 있다 (<0.01%에서 %), 개인 리스크 선호도와 시장 상황에 따라 리스크 파라미터를 유연하게 설정할 수 있다.
이 전략은 여러 장점이 있지만, 다음과 같은 잠재적인 위험도 있습니다.
흔들리는 시장 위험: 명확한 추세가 없는 가로수지 시장에서, EMA 교차는 빈번한 가짜 신호를 생성하여 연속적인 손실을 초래할 수 있다. 해결책은 시장 구조 또는 변동률 필터를 추가하여 추세가 명확할 때만 거래하는 것이다.
추적 스톱 리스크: 급격한 변동이나 하룻밤 동안의 격차로 인해 가격이 추적 스톱 수준을 뛰어넘을 수 있으며, 실제 스톱 가격이 예상보다 훨씬 낮아질 수 있습니다. 고정 최대 손실 제한을 추가 보호로 추가하는 것을 고려하는 것이 좋습니다.
매개 변수 감수성: 전략의 성능은 선택된 EMA 주기 및 추적 스톱 손실 퍼센트에 크게 의존합니다. 다른 시장과 시간 프레임에는 다른 매개 변수 설정이 필요할 수 있습니다. 매개 변수의 유효성을 검증하기 위해 전체적인 재검토를 실시합니다.
변동율 적응의 부족: 현재 버전의 추적 손실은 고정된 비율을 기반으로 하며, 높은 변동율의 시장에서는 너무 꽉 차 있고, 낮은 변동율의 시장에서는 너무 느슨할 수 있다. ATR에 기반한 추적 손실 조정 거리를 고려한다.
신호 충돌: 특정 시장 조건에서 EMA 교차 신호는 1시간 차트의 지지/저항 수준과 충돌할 수 있으며, 거래 결정에 어려움을 초래합니다. 이 경우 명확한 우선 순위 규칙을 설정하거나 신호가 일치하기를 기다려야 합니다.
코드 분석에 따르면, 전략의 개선이 가능한 방향은 다음과 같습니다.
ATR 다이내믹 스톱 도입: 고정된 퍼센티지 트래킹 스톱을 대체하여 평균 실제 변동량 ((ATR) 에 기반한 다이내믹 스톱을 사용하며, 다양한 시장의 변동 특성에 더 잘 적응한다. 이렇게하면 높은 변동 기간 동안 더 느슨한 스톱 공간을 제공하고 낮은 변동 기간 동안 가격에 더 가깝게 할 수 있다.
트렌드 강도 필터를 추가: 통합 ADX ((평균 방향 지수) 또는 유사한 트렌드 강도 지표, 강한 트렌드가 확인된 경우에만 거래를 실행하고,横盘 시장에서 빈번한 가짜 신호를 피한다.
거래량 확인을 추가: 거래 신호가 평균보다 높은 거래량과 함께 제공되도록 요구하여, 브레이크의 신뢰성을 높이고, 가짜 신호가 계정에 침투하는 것을 줄여줍니다.
다이내믹 리스크 관리를 구현합니다. 계정 규모, 역사 변동성 및 승률에 따라 포지션 크기를 자동으로 조정하여 위험을 통제하면서 자금 성장 잠재력을 최적화합니다.
고 시간 프레임 필터를 최적화한다: 현재 전략은 1시간 차트의 전 K선 고/저점을 지지 저항으로 사용한다. 보다 복잡한 지지 저항 식별 알고리즘을 도입하는 것을 고려할 수 있다. 예를 들어 핵심 구조 영역이나 여러 시간 프레임 지지 저항 조합이다.
시장 상태 분류에 가입: 시장 환경 분류 시스템을 개발 (트렌드, 범위, 높은 변동성 등) 하고, 다른 시장 상태에 따라 전략 매개 변수 또는 거래 논리를 조정하여 적응력을 높인다.
다중 시간 프레임 EMA 교차 트렌드 추적 전략은 고전적인 기술적 분석 요소와 현대적 위험 관리 기술을 결합하여 거래자에게 명확한 구조와 규칙이 명확한 거래 시스템을 제공합니다. 그것의 핵심 장점은 신호 생성 논리가 간단하고 직관적이면서도 손실을 막는 메커니즘을 추적하여 위험을 효과적으로 제어하고 자금을 보호합니다.
이 전략은 단기 EMA의 교차로에서 제공되는 정확한 입문 신호와 더 높은 시간 프레임의 지지 저항 수준을 제공하는 시장 구조의 관점을 결합하여 트레이더가 트렌드 방향이 명확할 때 높은 확률의 거래 기회를 잡을 수 있도록 도와줍니다. 흔들리는 시장에서 도전받을 수 있지만, 제안된 방향의 최적화, 특히 트렌드 강도 필터링과 ATR 기반의 동적 스톱로드를 증가시키는 것은 다양한 시장 환경에서 전략의 안정성과 성능을 크게 향상시킬 수 있습니다.
체계적인 거래 방법을 구축하려는 투자자에게는 이 전략은 개인 위험 선호와 거래 목표에 따라 추가적으로 맞춤화 및 최적화 할 수있는 견고한 기본 프레임 워크를 제공합니다. 전략 규칙을 엄격하게 따르고 거래 규율을 유지함으로써 트레이더는 트렌드가 뚜렷한 시장에서 일관된 수익을 얻을 수 있습니다.
/*backtest
start: 2025-02-25 14:00:00
end: 2025-03-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("EMA Crossover Strategy with S/R and Cross Exits v6", overlay=true, margin_long=100, margin_short=100)
// Eingabeparameter
trailOffset = input.float(0.10, "Trailing Stop Offset (%)", minval=0.01, maxval=1, step=0.01)
// EMA Berechnungen
ema5 = ta.ema(close, 5)
ema8 = ta.ema(close, 8)
ema13 = ta.ema(close, 13)
// Plot der EMAs
plot(ema5, "EMA 5", color.rgb(7, 7, 7), 2)
plot(ema8, "EMA 8", color.new(color.blue, 0), 2)
plot(ema13, "EMA 13", color.new(color.red, 0), 2)
// Unterstützungs- und Widerstandsniveaus aus dem 1-Stunden-Chart
hourlyHigh = request.security(syminfo.tickerid, "60", high[1], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
hourlyLow = request.security(syminfo.tickerid, "60", low[1], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
// Plot der Unterstützungs- und Widerstandsniveaus
plot(hourlyHigh, "Hourly Resistance", color.new(color.red, 0), linewidth=2)
plot(hourlyLow, "Hourly Support", color.new(color.green, 0), linewidth=2)
// Signalerkennung
buySignal = ta.crossover(ema5, ema8) and ta.crossover(ema5, ema13)
sellSignal = ta.crossunder(ema5, ema8) and ta.crossunder(ema5, ema13)
// Trailing Stop Berechnungen
var float longStop = na
var float shortStop = na
var float maxHigh = na
var float minLow = na
if strategy.position_size > 0
if strategy.position_size[1] <= 0
maxHigh := high
longStop := high * (1 - trailOffset)
else
maxHigh := math.max(maxHigh, high)
longStop := math.max(longStop, maxHigh * (1 - trailOffset))
else
maxHigh := na
longStop := na
if strategy.position_size < 0
if strategy.position_size[1] >= 0
minLow := low
shortStop := low * (1 + trailOffset)
else
minLow := math.min(minLow, low)
shortStop := math.min(shortStop, minLow * (1 + trailOffset))
else
minLow := na
shortStop := na
// Ausführung der Orders
if (buySignal)
strategy.entry("Long", strategy.long)
if (sellSignal)
strategy.entry("Short", strategy.short)
// Schließen bei gegenteiligem Signal
if (buySignal)
strategy.close("Short")
if (sellSignal)
strategy.close("Long")
// Trailing Stop Anwendung
strategy.exit("Long Exit", "Long", stop = longStop)
strategy.exit("Short Exit", "Short", stop = shortStop)
// Exit-Punkte im Chart mit Kreuzen markieren
plotshape(series=strategy.position_size[1] > 0 and strategy.position_size == 0, title="Long Exit", location=location.belowbar, color=color.red, style=shape.cross, text="Exit Long", textcolor=color.rgb(5, 5, 5), size=size.small)
plotshape(series=strategy.position_size[1] < 0 and strategy.position_size == 0, title="Short Exit", location=location.abovebar, color=color.green, style=shape.cross, text="Exit Short", textcolor=color.rgb(7, 7, 7), size=size.small)
// Plot der Trailing Stops
plot(strategy.position_size > 0 ? longStop : na, "Long Stop", color.green, style=plot.style_circles)
plot(strategy.position_size < 0 ? shortStop : na, "Short Stop", color.red, style=plot.style_circles)