Estrategia de ruptura de la cruz dorada de doble EMA


Fecha de creación: 2023-12-20 16:34:58 Última modificación: 2023-12-20 16:34:58
Copiar: 1 Número de Visitas: 719
1
Seguir
1621
Seguidores

Estrategia de ruptura de la cruz dorada de doble EMA

Descripción general

Esta estrategia es una estrategia de seguimiento de tendencias para realizar operaciones de cruce de oro y cruce de muerte basadas en las medias móviles de índice de 5 minutos y 34 minutos (EMA). Cuando la línea rápida atraviese la línea lenta desde abajo, abra una posición larga; Cuando la línea rápida atraviese la línea lenta desde arriba, abra una posición vacía.

Principio de estrategia

  1. La línea rápida EMA5 y la lenta EMA34 constituyen la señal de negociación. La línea rápida EMA5 responde a los cambios recientes en el precio, y la línea lenta EMA34 responde a los cambios intermedios en el precio.
  2. Cuando la línea rápida atraviesa la línea lenta, se cruza por el oro, lo que indica que el corto plazo es mejor que el medio plazo, por lo que tiene más opciones.
  3. Cuando la línea rápida atraviesa la línea lenta, se cruza para la muerte, lo que significa que las tendencias a corto plazo son peores que las tendencias a medio plazo.
  4. Establezca un Stop Loss para bloquear las ganancias y controlar el riesgo.

Análisis de las ventajas

  1. El uso de filtros de doble EMA para evitar falsas brechas.
  2. Seguir las tendencias a medio plazo y aumentar las oportunidades de ganancias.
  3. Configuración de paradas de pérdidas para un control efectivo del riesgo.

Análisis de riesgos

  1. Los EMAs dobles son retrasados y pueden perder oportunidades de negociación a corto plazo.
  2. El punto de parada es demasiado alto y el riesgo de pérdidas se expande.
  3. Los puntos de parada son demasiado pequeños para maximizar las oportunidades de ganancias.

Dirección de optimización

  1. Optimización de los parámetros EMA para encontrar la combinación óptima de parámetros.
  2. Optimización de los puntos de parada de las paradas, para bloquear las más ricas.
  3. Añadir filtros de otros indicadores, como MACD, KDJ, etc., para mejorar la precisión de la señal.

Resumir

Esta estrategia genera señales de negociación mediante el cruce de oro y el cruce de muerte de las medias móviles de doble EMA y establece un stop loss para controlar el riesgo. Es una estrategia de seguimiento de tendencias a medio plazo simple y efectiva. Optimizar los parámetros de stop loss e introducir señales de filtración de otros indicadores puede aumentar aún más la rentabilidad estable de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', 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?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=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
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 ? low <= buy_entry_price - sl: 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 ? high >= sel_entry_price + sl : 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)