듀얼 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를 교차하여 트렌드 판단을 이용하고, 다중 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 크로스를 활용하고, 여러 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")