3가지 EMA 추세 추종 전략


생성 날짜: 2023-11-10 11:45:30 마지막으로 수정됨: 2023-11-10 11:45:30
복사: 1 클릭수: 723
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

3가지 EMA 추세 추종 전략

개요

세 가지 EMA 트렌드 추적 전략은 EMA 평균을 계산하여 가격 트렌드 방향을 판단하여 트렌드 추적을 구현합니다. 이 전략은 간단하고 쉽게 구현할 수 있으며 트렌드가 명백한 품종에서 효과가 눈에 띄습니다.

전략 원칙

이 전략은 세 개의 다른 주기의 EMA 평균선을 계산하여 10 주기, 20 주기 및 30 주기 EMA . 코드에서 ema 함수를 통해 세 개의 평균선을 계산한다.

전략은 주로 세 개의 평행선의 방향을 판단한다. 세 개의 평행선이 동시에 올라간다면, 다중 신호가 발생한다. 세 개의 평행선이 동시에 내려간다면, 공백 신호가 발생한다.

더하기 및 단축 신호의 구체적인 판단 논리는, ema1, ema2 및 ema3가 지난 K선에서 동시에 상승하면, enter_long은 참이며, 더하기 신호를 발생시킨다. ema1, ema2 및 ema3가 지난 K선에서 동시에 하락하면, enter_short은 참이며, 단축 신호를 발생시킨다.

상위와 하위 신호에 따라, 전략은 상위와 하위 포지션을 구축한다. 평소 포지션 논리는 입시 신호와 달리, ema1, ema2 및 ema3의 현재 K 라인이 동시에 상승하지 않으면, exit_long은 참이고, 평소 포지션은 다. ema1, ema2 및 ema3의 현재 K 라인이 동시에 하락하지 않으면, exit_short은 참이고, 평소 포지션은 비한다.

이렇게, 세 개의 EMA 평균선의 방향 일치성을 판단함으로써, 가격의 전반적인 추세를 판단하고, 트렌드 추적을 구현할 수 있다.

전략적 이점

  • 세 개의 EMA 평균선을 사용하면 트렌드 방향을 더 정확하게 판단 할 수 있습니다. 단일 평균선에 비해 세 개의 평균선은 트렌드를 판단하는 데 더 신뢰할 수 있으며 잘못된 신호가 발생할 확률이 적습니다.

  • EMA는 가격 변화에 더 민감하여 트렌드 전환을 적시에 반영할 수 있다. SMA와 같은 다른 평균선에 비해 EMA는 트렌드 방향을 판단하는데 더 적합하다.

  • 다양한 주기적 EMA를 조합하여, 단기 및 중장기 경향을 병행할 수 있다. 10 주기적 EMA는 단기 경향을 판단하고, 20 주기 및 30 주기적 EMA는 중장기 경향을 판단한다.

  • 전략 구현은 간단하고 이해하기 쉽고, 초보자 학습에 적합하다. 그리고 매개 변수를 최적화할 수 있는 공간이 넓어서, 다른 품종에 맞는 매개 변수를 조정할 수 있다.

  • 전략은 EMA 일률적인 운영에만 기반하고, 자원을 적게 사용하며, 대량으로 배포하고 운영에 적합하다.

전략적 위험

  • 세 개의 EMA 평행선 방향이 일치하는 것은 트렌드를 판단하는 데 필요한 조건이지만 충분하지 않습니다. EMA 평행선 방향이 허위 돌파 할 때 잘못된 신호가 발생합니다.

  • 트렌드 전환 시, EMA는 트렌드 전환점을 적시에 반영하지 못하여 손실을 초래할 수 있습니다.

  • EMA는 가격 변화에 민감하고, 다중 헤드 및 빈 헤드 전환이 자주 있을 때, 자주 입점을 열고, 거래 비용을 증가시킨다.

  • 큰 흔들림 시장에서, EMA 평균선은 방향 전환을 여러 번 발생하여 추세를 정확하게 판단할 수 없으며, 이 전략은 효과가 좋지 않다.

  • 3개의 EMA 평균선 주기 간격을 적절히 확장하여 잘못된 신호의 확률을 줄일 수 있다. 또는 다른 지표에 필터링 가짜 돌파구를 추가할 수 있다.

  • 양 에너지 지표와 같은 트렌드 확인을 결합하여 트렌드 전환점을 식별하고 손실을 줄일 수 있다. 또한 스톱 손실 지점을 적절히 완화 할 수 있다.

  • 적절한 경우 EMA 매개 변수를 증가시켜 평점 포지션 개시 횟수를 줄일 수 있다. 또는 다른 평형 지표로 대체한다.

  • 위기상황을 인식하면 전략을 중단하여 무효 거래를 피할 수 있다.

최적화 방향

  • 사이클 최적화: 세 가지 EMA의 사이클 파라미터를 다른 품종 특성에 맞게 조정한다.

  • 필터 조건: MA, BOLL 등의 지표를 추가하여 EMA 가짜 돌파구를 피한다.

  • 트레일링 스톱: 트레일링 스톱은 트레일링 스톱을 추적하여 수익을 보호합니다.

  • 자금 관리: 포지션 관리를 최적화하고, 단일 손실이 전체에 미치는 영향을 줄인다.

  • 시장상태 판단: 변동률과 같은 지표에 따라 시장의 흔들림 정도를 판단하고, 제어 전략의 참여도를 판단한다.

  • 매개 변수 적응: EMA 주기의 매개 변수가 시장 변화에 따라 자동으로 최적화되어 전략의 융통성을 향상시킵니다.

요약하다

세 가지 EMA 트렌드 추적 전략은 EMA 평평선 방향으로 가격 트렌드를 판단하여 자동 추적 트렌드를 거래한다. 이 전략은 간단하고 실용적이며, 변수 조정 공간이 넓으며, 품종 특성에 맞게 최적화 할 수 있다. 또한 약간의 위험이 있으며, 가짜 EMA 돌파구를 예방하고, 흔들리는 시장의 영향을 주의해야 한다. 지속적인 최적화를 통해 이 전략은 안정적이고 신뢰할 수 있는 트렌드 추적 전략이 될 수 있다.

전략 소스 코드
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
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/
// © QuantCT

//@version=4
strategy("PMA Strategy Idea",
         shorttitle="PMA", 
         overlay=true,
         pyramiding=0,     
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         initial_capital=1000,           
         commission_type=strategy.commission.percent, 
         commission_value=0.075)
         
// ____ Inputs

ema1_period = input(title="EMA1 Period", defval=10)
ema2_period = input(title="EMA2 Period", defval=20)
ema3_period = input(title="EMA3 Period", defval=30)
long_only = input(title="Long Only", defval=false)
slp = input(title="Stop-loss (%)", minval=1.0, maxval=25.0, defval=5.0)
use_sl = input(title="Use Stop-Loss", defval=false)

// ____ Logic

ema1 = ema(hlc3, ema1_period)
ema2 = ema(hlc3, ema2_period)
ema3 = ema(hlc3, ema3_period)
    
enter_long = (rising(ema1, 1) and rising(ema2, 1) and rising(ema3, 1))
exit_long = not enter_long
enter_short = (falling(ema1, 1) and falling(ema2, 1) and falling(ema3, 1))
exit_short = not enter_short

strategy.entry("Long", strategy.long, when=enter_long)
strategy.close("Long", when=exit_long) 
if (not long_only)
    strategy.entry("Short", strategy.short, when=enter_short)
    strategy.close("Short", when=exit_short) 

// ____ SL

sl_long = strategy.position_avg_price * (1- (slp/100))
sl_short = strategy.position_avg_price * (1 + (slp/100))
if (use_sl)
    strategy.exit(id="SL", from_entry="Long", stop=sl_long)
    strategy.exit(id="SL", from_entry="Short", stop=sl_short)

// ____ Plots

colors = 
 enter_long ? #27D600 :
 enter_short ? #E30202 :
 color.orange

ema1_plot = plot(ema1, color=colors)
ema2_plot = plot(ema2, color=colors)
ema3_plot = plot(ema3, color=colors)
fill(ema1_plot, ema3_plot, color=colors, transp=50)