# Dual EMA Crossover Trend Strategy

Author: ChaoZhang, Date: 2023-12-29 15:46:15
Tags:

### Overview

This strategy uses the golden cross and death cross of dual EMA indicators to determine the current trend direction, and combines the RSI indicator to avoid missing buy and sell opportunities. It is a typical trend tracking strategy.

### Strategy Principle

1. Calculate the 10-period and 20-period EMA lines, named ma00 and ma01 respectively
2. A buy signal is generated when ma00 crosses above ma01
3. A sell signal is generated when ma00 crosses below ma01
4. At the same time, when price crosses above ma00, if ma00 is above ma01, a buy signal will also be generated
5. Similarly, when price crosses below ma00, if ma00 is below ma01, a sell signal will also be generated
6. Through such dual validation, some buy and sell points can be avoided missing
7. Set stop loss and take profit prices to control risks

1. Using dual EMA to determine can effectively filter false breakouts
2. Dual condition validation avoids missing orders
3. Stop loss and take profit settings are beneficial for risk management

### Risk Analysis

1. The dual EMA strategy belongs to the trend tracking strategy. Frequent buys and sells in sideways markets can easily hit stop loss
2. It cannot accurately determine trend reversal points, which may lead to losses
3. Improper stop loss point settings may amplify losses

### Optimization Directions

1. EMA cycles can be properly optimized to find the best parameter combination
2. Other indicators can be added to improve strategy stability
3. Dynamic stops can be set to adjust stop loss points in real time based on market fluctuations

/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='[STRATEGY][RS]MicuRobert EMA cross V1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=11.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=10)
ma_length01 = input(title='DEMA length:',  defval=20)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
_ema1=ema(_src, _length)
_ema2=ema(_ema1, _length)
_d=_ema1-_ema2
_zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? false : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or