Estrategia de tendencia de cruce de la muerte con cruce dorado y doble EMA


Fecha de creación: 2023-12-29 15:46:15 Última modificación: 2023-12-29 15:46:15
Copiar: 1 Número de Visitas: 701
1
Seguir
1621
Seguidores

Estrategia de tendencia de cruce de la muerte con cruce dorado y doble EMA

Descripción general

La estrategia utiliza el doble EMA para determinar la dirección de la tendencia actual y, en combinación con el RSI, evita perder oportunidades de compra y venta, lo que es una estrategia típica de seguimiento de tendencias.

Principio de estrategia

  1. Calcula el promedio de EMA de los períodos 10 y 20, denominados ma00 y ma01 respectivamente
  2. Cuando el ma00 lleva el ma01 genera una señal de compra
  3. Cuando el ma00 baja por el ma01 genera una señal de venta
  4. Al mismo tiempo, cuando el precio sube a ma00, si ma00 es más alto que ma01 también se genera una señal de compra
  5. Similarmente, cuando el precio está por debajo de ma00, si ma00 está por debajo de ma01 también generará una señal de venta
  6. Con este doble juicio, se puede evitar perder algunos puntos de venta.
  7. Establecer precios de stop loss y stop-loss para controlar el riesgo

Análisis de las ventajas

  1. El uso de un doble juicio de EMA para filtrar efectivamente las brechas falsas
  2. Evita la doble conditionalidad
  3. La configuración de la parada de pérdidas es favorable para el control de riesgos

Análisis de riesgos

  1. La estrategia de doble línea media EMA es una estrategia de seguimiento de tendencias, que se compra y vende con frecuencia en situaciones de crisis y es fácil de detener
  2. No se puede determinar con precisión el punto de inflexión de la tendencia, lo que puede causar pérdidas
  3. La configuración incorrecta de los puntos de parada puede aumentar las pérdidas

Dirección de optimización

  1. Se puede optimizar adecuadamente el ciclo EMA para buscar la combinación de parámetros óptima
  2. Se pueden agregar otros indicadores para mejorar la estabilidad de la estrategia
  3. Se puede configurar un stop loss dinámico que ajuste el stop loss en tiempo real a las fluctuaciones del mercado
Código Fuente de la Estrategia
/*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_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?color.gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
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)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
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)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
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)
buy_ts = buy_appex - sl
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)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? false : low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
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 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)

//What i add .!
pos = iff(ma01 < ma00 , 1,
	    iff(ma01 > ma00 , -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
plot(ma00, color=red, title="MA")
plot(ma01, color=blue, title="EMA")