EMA 크로스오버 추적 전략


생성 날짜: 2023-10-25 17:44:35 마지막으로 수정됨: 2023-10-25 17:44:35
복사: 0 클릭수: 804
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 크로스오버 추적 전략

개요

EMA 교차전략은 두 개의 다른 기간의 EMA 평균선의 교차 상황을 추적하여 가격 경향을 판단하여 구매 및 판매 신호를 생성한다. 짧은 기간의 EMA 상에서 긴 기간의 EMA를 통과 할 때 구매 신호를 생성하고 짧은 기간의 EMA 아래에서 긴 기간의 EMA를 통과 할 때 판매 신호를 생성한다. 이 전략은 동시에 SuperTrend 지표의 위조 돌파구를 결합한다.

전략 원칙

이 전략은 주로 EMA 평균선의 금叉死叉 원칙에 기초한다. EMA 평균선은 가격 데이터 필터링 소음을 평형화하여 EMA 평균선의 교차 상황을 통해 가격 트렌드를 판단한다. 짧은 주기 EMA (계 20주기) 에서 긴 주기 EMA (계 50주기) 를 통과할 때, 단기 가격의 현재 위치가 긴 주기 가격 위에 있는 것을 나타내는 가격의 돌파 상승 트렌드가 존재하고, 구매 신호를 생성한다. 짧은 주기 EMA 아래에서 긴 주기 EMA를 통과할 때, 단기 가격의 하락을 나타내는 가격의 존재하고, 판매 신호를 생성한다.

또한, 이 전략은 SuperTrend 지표와 결합하여 EMA 교차로에서 생성되는 가짜 신호를 필터링한다. SuperTrend 지표는 ATR에 의해 계산된 상승과 하락으로, 실제 트렌드를 더 정확하게 판단할 수 있다. 가격의 SuperTrend 지표의 상승을 돌파할 때 구매 신호를 생성하고, 가격의 SuperTrend 지표의 하락을 돌파할 때 판매를 생성한다. 신호는 SuperTrend 지표가 동시에 구매/판매 신호를 생성할 때만 EMA 교차가 진정한 거래 신호를 생성한다.

이 전략은 다음과 같이 정의됩니다.

  1. 20 EMA가 50 EMA를 통과하고 가격이 SuperTrend의 궤도를 돌파했을 때 구매 신호를 생성합니다.

  2. 20 EMA가 50 EMA를 통과하고 가격이 슈퍼 트렌드 아래로 떨어지면 판매 신호가 발생한다.

EMA를 통해 큰 트렌드를 판단하고, 슈퍼 트렌드 지표 필터링 흔들림과 결합하면 전략 거래 신호의 정확도를 향상시킬 수 있습니다.

우위 분석

EMA 교차 전략은 다음과 같은 장점이 있습니다.

  1. 작업은 간단하고 구현하기 쉽다. 단지 두 개의 EMA 평균선의 교차 상황을 계산하는 것뿐이다.

  2. 가격 변동에 대한 필터링 효과가 있다. EMA는 이동 평균으로서, 일부 잡음을 필터링할 수 있다.

  3. 슈퍼트렌드 지표와 결합하면 더 많은 잡음을 필터링하여 잘못된 신호를 줄일 수 있습니다.

  4. 다양한 시장 환경에 맞게 EMA 주기의 매개 변수를 조정할 수 있다.

  5. 커스터마이징할 수 있는 장단위 포지션, 다양한 거래방법들을 구현할 수 있다.

  6. 다른 시간 주기에서 구현할 수 있고, 다른 유형의 거래자에게 적용된다.

위험 분석

EMA의 교차 전략에는 몇 가지 위험도 있습니다.

  1. 시장이 급격하게 변동할 때, EMA 교차 신호는 늦어질 수 있으며, 가격 변화를 적시에 반영할 수 없습니다.

  2. EMA 평균선은 지연성이 있어 잘못된 신호를 줄 수 있다.

  3. 짧은 주기 EMA와 긴 주기 EMA의 매개 변수가 잘못 설정되어 너무 많은 오류 신호가 발생할 수 있습니다.

  4. 평행선 교차만으로 시장의 실제 흐름을 파악할 수 없고, 어느 정도 맹목성이 존재한다.

  5. 적당한 손실을 방지하는 전략을 선택하고 위험을 통제해야 합니다.

다음의 몇가지가 위험을 줄일 수 있습니다.

  1. EMA 주기 변수를 최적화하고, 적절한 빠른 느린 평균선 주기 를 선택한다.

  2. 적당히 지분 기간을 단축하고 적당히 손실을 중지하십시오.

  3. 이동 평균, K선 형태 등과 같은 다른 지표와 결합하여 종합 판단을 한다.

  4. 거래 빈도를 적절히 조정하여 거래 횟수를 줄여주세요.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. EMA 평균선의 주기적 매개 변수를 최적화하여 다른 주기적 및 시장 환경에 적응한다. 자기 적응 매개 변수 최적화 메커니즘을 도입할 수 있다.

  2. SMA, KWMA 등과 같은 다른 평평선 지표를 시도하십시오.

  3. 더 많은 지표와 결합하여 포트폴리오 거래를하고, MACD, RSI 등과 같은 다중 인자 모델을 형성한다. 기기 학습 알고리즘을 도입하여 변수 최적화 및 무게 조정한다.

  4. 리스크를 통제하기 위해, 스톱포드, 스톱포드 비율, 스톱포드 추적과 같은 스톱포드 전략을 추가하십시오.

  5. 거래량 필터링을 도입하여 거래량 지표와 함께 가짜 신호를 방지합니다.

  6. 전략적 출구를 최적화하고, 출구 규칙을 설정한다. 예를 들어, K선 형태를 결합하고, 돌파구와 같은 EXIT signals.

  7. 더 높은 시간 주기에서 트렌드를 확인하고, 더 낮은 시간 주기에서 진입하여 트렌드 추적을 구현한다.

요약하다

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")