더블 EMA 브레이크아웃 트레이딩 전략


생성 날짜: 2023-10-16 16:24:00 마지막으로 수정됨: 2023-10-16 16:24:00
복사: 1 클릭수: 738
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 EMA 브레이크아웃 트레이딩 전략

개요

이중 EMA 돌파 거래 전략은 두 개의 서로 다른 기간의 EMA 평균선을 사용하여 거래 신호를 판단하는 트렌드 추적 전략이다. 이 전략은 동시에 추가적인 EMA 지표와 함께 거래 신호 필터를 결합하여 트렌드 상황에서 더 나은 진입 시기를 얻을 수 있다.

원칙

이 전략은 빠른 라인 EMA ((9주기) 와 느린 라인 EMA ((21주기) 의 금색 도매 포크를 사용하여 구매 및 판매 시기를 판단한다. 빠른 라인 상에서 느린 라인을 통과할 때 구매 신호가 발생하고, 빠른 라인 아래에서 느린 라인을 통과할 때 판매 신호가 발생한다. 가짜 신호를 필터링하기 위해 전략은 보조 EMA ((5주기) 와 다른 두 개의 EMA ((1주기, 4주기) 를 도입했다. 보조 EMA는 빠른 라인과 느린 라인 사이에 있고, 1주기 EMA가 4주기 EMA보다 높으면 진정한 거래 신호를 유발할 수 있습니다.

거래 신호가 터지면, 전략은 ATR 값에 따라 중지 손실을 설정합니다. TP1은 ATR의 6배이며, 더 빠른 속도를 얻는 부분적인 이익을 얻습니다. 가격이 TP1을 유발하지 않으면, 빠른 라인 EMA가 보조 EMA를 다시 넘어서면, 직접 포지션을 평행하여 TP2의 정지를 달성합니다.

장점

  • 이중 EMA 조합을 사용하여 가짜 신호를 필터링하여 거래 신호 품질을 향상시킵니다.
  • 보조 EMA 지표는 트렌드 방향을 추가로 검증하고 역행 위험을 줄일 수 있습니다.
  • 이중 스톱 디자인은 빠르고 지속 가능한 트렌드 수익을 창출합니다.
  • ATR의 동적 스톱 스톱은 시장의 변동성에 따라 조정되어 위험을 줄일 수 있습니다.

위험과 최적화

  • EMA 지표는 곡선 조화를 유발할 수 있으며 거래 신호는 지연될 수 있습니다.
  • 단기 EMA 조합은 더 많은 노이즈 트레이딩 신호를 생성할 수 있다.
  • 단선 운영은 갑작스러운 사건에 취약하며, 손실 위험이 높다.

최적화 방향:

  • 여러 EMA 변수 조합을 테스트하여 더 우수한 변수를 찾습니다.
  • 거래량, 변동성 등과 같은 다른 지표 검증을 추가합니다.
  • 제약 범위가 적절히 넓어져 제약이 작동될 확률이 낮아집니다.
  • 이중 정지 비율을 최적화하여 수익률과 자금 사용 효율을 균형을 잡습니다.

요약하다

이중 EMA 돌파 거래 전략은 두 개의 EMA의 교차를 사용하여 트렌드를 판단하고, 다중 EMA 필터링과 ATR 동적 중지 중지 손실을 보조하여 트렌드를 효과적으로 추적 할 수 있습니다. 그러나 EMA 곡선 적합성, 중지 손실 위험과 같은 문제는 주의해야 합니다. 매개 변수 최적화, 위험 관리 등의 조치를 통해 더 안정적인 거래 성과를 얻을 수 있습니다. 이 전략은 어느 정도 기반을 가진 거래자가 트렌드 상황에서 사용하기에 적합하며, 높은 자금 활용 효율을 얻습니다.

Overview

The dual EMA crossover trading strategy utilizes two EMA lines of different periods to generate buy and sell signals by identifying trend direction. It also incorporates additional EMA indicators for signal filtering, allowing better entry timing in trending markets.

Principles

The strategy uses a fast EMA line (9 periods) and a slow EMA line (21 periods) to determine entries. A golden cross where the fast EMA crosses above the slow EMA generates a buy signal, while a death cross with the fast EMA crossing below the slow EMA produces a sell signal. To filter out false signals, the strategy also employs an auxiliary EMA (5 periods) and two more EMAs (1 period, 4 periods). A real trading signal is only triggered when the fast and slow EMAs cross while the auxiliary EMA is between the two, and the 1-period EMA is above the 4-period EMA.

Once a trading signal is triggered, the strategy utilizes ATR values to set stop loss and take profit levels. TP1 is set at 6 x ATR for faster profit taking. If price doesn’t hit TP1, the strategy will close the position directly when the fast EMA crosses back over the auxiliary EMA, realizing TP2.

Advantages

  • Dual EMA design filters false signals and improves signal quality
  • Auxiliary EMA adds trend direction verification, reducing reverse trade risks
  • Dual take profit allows fast profit and sustained trend following
  • Dynamic ATR stop loss/take profit adjusts to market volatility

Risks and Improvements

  • EMAs can lag prices and generate late signals
  • Shorter EMA combos may produce more noise
  • Tighter stops face larger sudden event risks

Improvement directions:

  • Test multiple EMA combos for better parameters
  • Add other confirmation indicators like volume, volatility etc.
  • Widen stop loss to lower stop out odds
  • Optimize take profit ratios for profit vs capital efficiency

Conclusion

The dual EMA crossover strategy leverages EMA crosses for trend direction, along with multiple EMA filtering and dynamic ATR stop loss/profit taking. This allows effective trend following and profit harvesting. However, EMA fitting limitations and stop loss risks require caution. Proper optimization, risk management etc. can lead to more robust performance. The strategy suits experienced traders to achieve high capital efficiency in trending markets.

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