EMA의 크로스오버 추적 전략

저자:차오장, 날짜: 2023-10-25 17:44:35
태그:

img

전반적인 설명

EMA 크로스오버 전략은 서로 다른 기간의 두 EMA 라인의 크로스오버를 추적하여 구매 및 판매 신호를 생성합니다. 짧은 기간 EMA가 더 긴 기간 EMA를 넘을 때 구매 신호가 생성됩니다. 짧은 기간 EMA가 더 긴 기간 EMA를 넘을 때 판매 신호가 생성됩니다. 이 전략은 또한 가짜 브레이크오프를 필터링하기 위해 슈퍼 트렌드 지표를 통합합니다.

전략 논리

이 전략은 주로 EMA 라인의 황금 십자가와 죽음의 십자가를 기반으로합니다. EMA 라인은 가격 데이터를 매끄럽게하고 소음을 필터 할 수 있습니다. EMA 라인 사이의 크로스오버는 가격 트렌드 변화를 나타냅니다. 짧은 기간 EMA (20 기간) 가 더 긴 기간 EMA (50 기간) 를 넘을 때 단기 가격이 이제 장기 가격보다 높다는 것을 의미하며 상승 트렌드를 의미하며 구매 신호를 생성합니다. 짧은 기간 EMA가 더 긴 기간 EMA를 넘을 때 단기 가격이 장기 가격보다 낮다는 것을 의미하며 하락 트렌드를 의미하며 판매 신호를 생성합니다.

또한 이 전략은 EMA 크로스오버에 의해 생성된 잘못된 신호를 필터링하기 위해 슈퍼트렌드 지표를 사용합니다. 슈퍼트렌드 지표는 실제 트렌드를 더 잘 정의하는 상부 및 하부 밴드를 그리기 위해 ATR을 기반으로 계산됩니다. 가격이 슈퍼트렌드 상부 밴드 이상으로 넘어지면 구매 신호가 생성됩니다. 가격이 슈퍼트렌드 하부 밴드 아래로 넘어지면 판매 신호가 생성됩니다. EMA 크로스오버 신호는 슈퍼트렌드 신호에 의해 확인 될 때만 유효합니다. 이것은 가격 변동으로 인한 잘못된 신호를 제거하는 데 도움이됩니다.

구체적으로, 전략 입시 논리는 다음과 같이 정의됩니다.

  1. 20EMA가 50EMA를 넘어서고 가격이 슈퍼트렌드 상단 범위를 넘어서면 구매 신호를 생성합니다.

  2. 20EMA가 50EMA 아래로 넘어가고, 가격이 슈퍼트렌드 하위 범위를 넘으면 판매 신호를 생성합니다.

주요 트렌드 방향을 결정하기 위해 EMA 크로스오버를 SuperTrend 필터와 결합하여 거래 신호의 정확성을 향상시킬 수 있습니다.

장점

EMA의 크로스오버 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 간단하게 구현할 수 있습니다. 두 개의 EMA 크로스오버를 계산하는 것만으로 충분합니다.

  2. 소음 필터링 효과를 제공합니다. 이동 평균으로 EMA는 소음을 필터링 할 수 있습니다.

  3. 슈퍼트렌드와 결합하면 가격 변동으로 인한 잘못된 신호를 더욱 줄일 수 있습니다.

  4. EMA 기간은 다른 시장 환경에 맞게 조정될 수 있습니다.

  5. 길거나 짧은 방향 거래에 맞게 조정할 수 있습니다. 다양한 거래 접근법에 적용됩니다.

  6. 다양한 트레이딩 스타일을 위해 다른 시간 프레임에서 구현 할 수 있습니다.

위험성

또한 EMA의 크로스오버 전략과 관련된 몇 가지 위험이 있습니다.

  1. EMA의 크로스오버 신호는 극심한 가격 변동이 있을 때 지연될 수 있으며, 가격 변화를 적시에 반영할 수 없습니다.

  2. EMA 라인은 지연 효과를 가지고 있으며 잘못된 신호를 생성 할 수 있습니다.

  3. 부적절한 EMA 기간 설정은 과도한 잘못된 신호로 이어질 수 있습니다.

  4. 크로스오버만으로는 실제 트렌드를 결정할 수 없습니다.

  5. 적절한 리스크 관리, 즉 스톱 로스 같은 것이 리스크를 통제하는 데 필요합니다.

위험 을 줄일 수 있는 몇 가지 방법:

  1. EMA 기간을 최적화하여 빠른 라인과 느린 라인을 더 잘 맞출 수 있습니다.

  2. 보유 기간을 단축하고, 적절한 스톱 로스를 적용합니다.

  3. 다른 지표들과 결합해 움직인 평균, 촛불 패턴을 통해 종합적인 판단을 할 수 있습니다.

  4. 거래 빈도를 더 적은 거래량으로 조정합니다.

개선

이 전략은 다음과 같은 측면에서 강화되고 최적화 될 수 있습니다.

  1. 다른 주기와 시장 환경에 대한 EMA 기간을 최적화하십시오. 적응성 최적화 메커니즘을 도입하십시오.

  2. SMA, KWMA와 같은 다른 이동 평균 지표를 테스트합니다.

  3. MACD, RSI와 같은 다변수 모델을 형성하기 위해 더 많은 기술적 지표를 통합합니다. 매개 변수와 무게를 최적화하기 위해 기계 학습 알고리즘을 적용합니다.

  4. 스톱 로스 기술을 추가합니다. 스톱 로스 후속, 스톱 로스 비율 등. 위험을 통제하기 위해서요.

  5. 부진 신호를 피하기 위해 부진 표시기와 작동하는 부피 필터를 도입하십시오.

  6. 출구 규칙을 설정하여 출구를 최적화하고, 차트 패턴, 브레이크아웃 등과 결합합니다.

  7. 높은 시간 프레임에서 트렌드를 확인 하 고, 트렌드를 따르기 위해 낮은 시간 프레임에 거래를 입력 합니다.

결론

EMA 크로스오버 전략은 간단하고 실용적인 트렌드 추적 시스템이다. 중장기 트렌드를 식별하고 타이밍 신호를 생성할 수 있다. 슈퍼트렌드 필터와 결합하면 가짜 트레이드를 효과적으로 줄일 수 있다. 그러나 지연 및 잘못된 신호와 같은 위험은 여전히 존재한다. 전략은 매개 변수 최적화, 스톱 로스, 인디케이터 조합 등을 통해 향상될 수 있다. EMA 크로스오버 전략은 사용하기 쉽고 중장기 트렌드 추적에 적합하며 초보자 트레이더에게 효과적이다.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alokbothra

//@version=5
strategy("Ema Crossover", overlay=true, initial_capital = 1000)
start = timestamp(2021,1,1,0,0)
end = timestamp(2023,10,30,0,0)
plot (ta.ema(close,20), title = "Ema 20", color = color.green , linewidth = 2)
plot (ta.ema(close,50), title = "Ema 50", color = color.red, linewidth = 2 )

//supertrend 1
Periods = input(title='ATR Period', defval=11)
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = close - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn =close+ Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
changeCond = trend != trend[1]

longonly = input.bool(defval = true, title = 'Long Only')
shortonly = input.bool(defval = true, title = 'Short Only')

longCondition = (ta.ema(close, 20) >= ta.ema(close, 50)) 
shortCondition = (ta.ema(close, 20) <= ta.ema(close, 50))
long = (trend == 1)
short = (trend == -1)
sell= short
cover= long
if time >= start and time < end
    if longonly
        if ((longCondition) and (long))
            strategy.entry ("Long Entry", strategy.long, comment ="Long Entry")
        if strategy.position_size > 0
            strategy.close("Long Entry", when = sell, comment = "Long Exit")
    if shortonly
        if ((shortCondition) and (short))
            strategy.entry("Short Entry", strategy.short, comment = "Short Entry")
        if strategy.position_size < 0
            strategy.close("Short Entry", when = cover, comment = "Short Exit")


더 많은