이중 EMA 크로스오버 거래 전략

저자:차오장, 날짜: 2023-10-16 16:24:00
태그:

img

개요

듀얼 EMA 브루킹 거래 전략은 두 개의 다른 주기의 EMA 평균을 사용하여 파는 신호를 판단하는 트렌드 추적 전략이다. 이 전략은 트렌드 시장에 더 나은 입시 시기를 얻기 위해 추가 EMA 지표를 결합하여 거래 신호를 필터링합니다.

원리

이 전략은 빠른 라인 EMA (9주기) 와 느린 라인 EMA (21주기) 의 금포 마구들을 사용하여 구매 및 판매 시기를 결정한다. 빠른 라인에서 느린 라인을 통과할 때 구매 신호가 생성되고 빠른 라인 아래에서 느린 라인을 통과할 때 판매 신호가 생성된다. 위조 신호를 제거하기 위해, 전략은 보조 EMA (5주기) 와 두 개의 추가 EMA (1주기, 4주기) 를 도입한다. 보조 EMA는 빠른 라인에서 느린 마구가 발생하는 동시에, 보조 EMA가 빠른 라인 사이에 있고 1주기가 4주기 EMA보다 높을 때만 진정한 거래 신호를 유발한다.

트레이딩 신호가 촉발되면 전략은 ATR 값에 따라 Stop Loss 및 Stop Loss 위치를 설정한다. TP1은 ATR의 6배로, 더 빠른 속도로 부분 수익을 얻기 위해 사용됩니다. 가격이 TP1을 촉발하지 않으면, 빠른 EMA가 보조 EMA를 다시 넘을 때, 직선 EMA는 직선 EMA를 평평화하여 TP2 Stop Loss을 달성합니다.

장점

  • 이중 EMA 조합을 사용하여 가짜 신호를 필터링하여 거래 신호 품질을 향상시킵니다.
  • 보조 EMA 지표는 추세 방향을 더욱 확인하고 역행 위험성을 줄일 수 있습니다.
  • 이중 스톱 디자인은 빠른 수익과 지속 가능한 수익 트렌드를 추적합니다.
  • ATR 동적 중지 손실 차단제는 시장 변동에 따라 조정하여 위험을 줄일 수 있습니다.

위험과 최적화

  • EMA 지표가 곡선 적합성을 쉽게 만들 수 있으며 거래 신호가 늦어질 수 있습니다.
  • 짧은 주기의 EMA 조합은 더 많은 노이즈 거래 신호를 생성 할 수 있습니다.
  • 단선 운용은 재발의 영향을 받기 쉽고 손실 위험이 높습니다.

최적화 방향:

  • 여러 개의 EMA 변수 조합을 테스트하여 최적의 변수를 찾습니다.
  • 거래량, 변동률 등 다른 지표 검증을 추가합니다.
  • 적정하게 손해배상 범위를 느슨하게 하고 손해배상 발생 가능성을 줄이세요
  • 이중 정지 설정 비율을 최적화하고 수익 속도와 자금 활용 효율성을 균형 잡습니다.

요약

이중 EMA 브레이크 트레이딩 전략은 두 개의 EMA를 교차하여 트렌드 판단을 이용하고, 다중 EMA 필터링과 ATR 동적 스톱 및 스톱 손실을 추가하여 트렌드 수익을 효과적으로 추적할 수 있다. 그러나 EMA 곡선 적합성, 스톱 손실 위험 등의 문제들은 주의가 필요하다. 매개 변수 최적화, 위험 관리 등의 조치로 더 안정적인 거래 성과를 얻을 수 있다. 이 전략은 트렌드 시장에서 높은 자금 활용 효율을 얻기 위해 특정 기반을 가진 거래자가 사용할 수 있는 것이 좋다.

전반적인 설명

이중 EMA 크로스오버 거래 전략은 트렌드 방향을 파악하여 구매 및 판매 신호를 생성하기 위해 서로 다른 기간의 두 EMA 라인을 사용합니다. 또한 신호 필터링을 위해 추가 EMA 지표를 통합하여 트렌딩 시장에 더 나은 입점 시기를 허용합니다.

원칙

이 전략은 엔트리를 결정하기 위해 빠른 EMA 라인 (9 기간) 과 느린 EMA 라인 (21 기간) 을 사용합니다. 빠른 EMA가 느린 EMA 위에 넘어가면 골든 크로스는 구매 신호를 생성하고 느린 EMA 아래에 빠른 EMA가 넘어가면 판매 신호를 생성합니다. 잘못된 신호를 필터링하기 위해 전략은 또한 보조 EMA (5 기간) 과 두 개의 EMA (1 기간, 4 기간) 를 사용합니다. 보조 EMA가 둘 사이에 있고 1 기간 EMA가 4 기간 EMA보다 높을 때 빠른 EMA와 느린 EMA가 넘어가면 진정한 거래 신호가 유발됩니다.

트레이딩 신호가 트리거되면 전략은 ATR 값을 사용하여 스톱 로스를 설정하고 이윤을 취합니다. TP1은 더 빠른 이윤을 얻기 위해 6 x ATR로 설정됩니다. 가격이 TP1에 도달하지 않으면 전략은 빠른 EMA가 보조 EMA를 다시 넘어서 TP2를 실현하면 직접 포지션을 닫습니다.

장점

  • 이중 EMA 설계는 거짓 신호를 필터링하고 신호 품질을 향상시킵니다.
  • 보조 EMA는 트렌드 방향 검증을 추가하여 역 무역 위험을 줄입니다.
  • 이중 취득이 빠른 수익과 지속적인 추세를 허용합니다.
  • 동적 ATR 중지 손실/이익 취득 조정 시장 변동성

위험 과 개선

  • EMA는 가격에 차질을 빚고 늦은 신호를 생성 할 수 있습니다.
  • 짧은 EMA 조합은 더 많은 소음을 만들 수 있습니다.
  • 더 긴 정류는 더 큰 갑작스러운 이벤트 위험에 직면합니다.

개선 방향:

  • 더 나은 매개 변수를 위해 여러 EMA 조합을 테스트합니다.
  • 부피, 변동성 등과 같은 다른 확인 지표를 추가합니다.
  • 스톱 아웃 확률을 낮추기 위해 스톱 손실을 넓히고
  • 이윤과 자본 효율에 대한 수익률 비율을 최적화합니다.

결론

이중 EMA 크로스오버 전략은 트렌드 방향에 대해 EMA 크로스를 활용하고, 여러 EMA 필터링과 동적인 ATR 스톱 로스/프로프트 테킹을 이용한다. 이는 효과적인 트렌드 추적과 수익 수확을 가능하게 한다. 그러나, EMA 적합 한계와 스톱 로스 위험은 주의가 필요하다. 적절한 최적화, 리스크 관리 등은 더 강력한 성과를 가져올 수 있다. 이 전략은 트렌딩 시장에서 높은 자본 효율성을 달성하기 위해 경험이 많은 트레이더들에게 적합하다.

[/trans]


/*backtest
start: 2022-10-09 00:00:00
end: 2023-04-13 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/
// @author ADHDCRYPT0

//@version=4
strategy(title = "EMA double crossover", shorttitle = "(TEST) double cross over", overlay = true, default_qty_value = 100, initial_capital = 1000,default_qty_type=strategy.percent_of_equity, pyramiding=0, process_orders_on_close=true)


// Variables
ema_len1 = input(9 , title="Fast EMA")
ema_len2 = input(21, title="Slow EMA")
ema_len3 = input(5, title="Exit EMA")
ema_len4 = input(1, title="FastConf EMA")
ema_len5 = input(4, title="SlowConf EMA")

fastEMA = ema(open, ema_len1)
slowEMA = ema(open, ema_len2)
exitEMA = ema(open, ema_len3)
conf1EMA = ema(open, ema_len4)
conf2EMA = ema(open, ema_len5)
plot(fastEMA, title='fastEMA', transp=0, color=color.green)
plot(slowEMA, title='slowEMA', transp=0, color=color.red  )
plot(exitEMA, title='exitEMA', transp=0, color=color.orange)
plot(conf1EMA, title='conf1EMA', transp=0, color=color.blue)
plot(conf2EMA, title='conf2EMA', transp=0, color=color.black)

vol = volume 
volma = sma(volume,7)
vol_cond = vol>volma

atr = atr(5)


// Entry Conditions and vol_cond
long = crossover(fastEMA, slowEMA) and (conf1EMA > conf2EMA) and (fastEMA < exitEMA)
short= crossunder(fastEMA, slowEMA) and (conf1EMA < conf2EMA) and (fastEMA > exitEMA)

tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

pos = 0.0

if tradeType=="BOTH"
    pos:= long? 1 : short? -1 : pos[1]
if tradeType=="LONG"
    pos:= long? 1 : pos[1]
if tradeType=="SHORT"
    pos:=short? -1 : pos[1]

longCond  = long  and (pos[1]!= 1 or na(pos[1]))
shortCond = short and (pos[1]!=-1 or na(pos[1]))

// EXIT FUNCTIONS //
sl  = input(1, title="Stop Loss (ATR)", minval=0)
tp  = input(6, title="Take Profit 1 (ATR)", minval=0)

// Simple Stop Loss + 2 Take Profits
sl_long   =  valuewhen(longCond , low - atr * sl, 0)
sl_short  =  valuewhen(shortCond, high+ atr * sl, 0)

tp_long  = valuewhen(longCond , high + atr * tp, 0)
tp_short = valuewhen(shortCond, low  - atr * tp, 0)


long_exit = crossover(fastEMA, exitEMA) and pos[1]==1
short_exit= crossover(exitEMA, fastEMA) and pos[1]==-1

if long_exit or short_exit
	pos:=0


// Position Adjustment
long_sl  = low <sl_long [1] and pos[1]==1
short_sl = high>sl_short[1] and pos[1]==-1

if long_sl or short_sl
    pos:=0
    
//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("01 Sep 2002 13:30 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("30 Sep 2099 19:30 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true


// Make sure we are within the bar range, Set up entries and exit conditions
if strategy.equity >0
    strategy.entry("long" , strategy.long , when=longCond  and timeCond and tradeType!="SHORT" , alert_message="INSERT MESSAGE HERE")
    strategy.entry("short", strategy.short, when=shortCond and timeCond and tradeType!="LONG" , alert_message="INSERT MESSAGE HERE")
    
    strategy.exit("SL/TP1", from_entry = "long" , stop=sl_long , limit=tp_long , alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL/TP1", from_entry = "short", stop=sl_short, limit=tp_short, alert_message="INSERT MESSAGE HERE")

    strategy.exit("SL", from_entry = "long" , stop=sl_long, alert_message="INSERT MESSAGE HERE")
    strategy.exit("SL", from_entry = "short", stop=sl_short, alert_message="INSERT MESSAGE HERE")
    
    strategy.close("long", when=long_exit , comment="TP2", alert_message="INSERT MESSAGE HERE")
    strategy.close("short", when=short_exit, comment="TP2", alert_message="INSERT MESSAGE HERE")


더 많은