Estrategia de trading basada en el cruce de medias móviles dobles


Fecha de creación: 2023-12-27 16:07:49 Última modificación: 2023-12-27 16:07:49
Copiar: 2 Número de Visitas: 681
1
Seguir
1623
Seguidores

Estrategia de trading basada en el cruce de medias móviles dobles

Descripción general

Esta estrategia se basa en cruces de oro y cruces de muerte de las medias móviles para generar señales de compra y venta. En concreto, la estrategia utiliza al mismo tiempo las medias móviles de 5 días (EMA) y las medias móviles de 34 días (DEMA). Se genera una señal de compra cuando la EMA de 5 días de corto plazo atraviesa la DEMA de 34 días de largo desde abajo; se genera una señal de venta cuando la EMA de 5 días de corto plazo atraviesa la DEMA de 34 días de largo desde arriba hacia abajo.

Principio de estrategia

  1. Cálculo de la EMA de 5 días y la DEMA de 34 días
  2. Cuando el EMA corto de 5 días cruza el DEMA largo de 34 días desde abajo, se genera una señal de compra
  3. Cuando el EMA de 5 días corto cruza el DEMA de 34 días largo desde arriba hacia abajo, se genera una señal de venta
  4. Se puede optar por negociar sólo en un período de tiempo específico
  5. Se puede elegir si se utiliza el seguimiento de la pérdida

Esta estrategia combina el seguimiento de tendencias y el cruce de líneas medias, con un efecto estable. El promedio móvil, como un indicador de seguimiento de tendencias, puede identificar eficazmente las tendencias del mercado. El uso combinado de EMA y DEMA puede suavizar eficazmente los datos de precios para generar señales de negociación.

Análisis de las ventajas

  1. La estrategia es sencilla, clara y fácil de entender.
  2. El uso combinado de promedios móviles toma en cuenta tanto el juicio de tendencias como el tratamiento suave de los datos de precios
  3. La intersección de las medias a corto y largo plazo puede dar una señal de negociación anticipada en los grandes momentos de cambio del mercado.
  4. La longitud de la línea media se puede ajustar para adaptarse a diferentes variedades y períodos a través de la optimización de parámetros
  5. La integración de los dos factores puede mejorar la estabilidad de la estrategia

Análisis de riesgos

  1. En caso de temblor, puede haber más señales falsas
  2. La longitud de la línea media incorrecta puede causar retraso de la señal
  3. El tiempo de negociación y la configuración inadecuada de los stop-losses pueden afectar los beneficios de la estrategia

Estos riesgos pueden reducirse ajustando la longitud de la línea media, optimizando el tiempo de negociación y estableciendo un stop loss razonable.

Dirección de optimización

  1. Ajuste de los parámetros de longitud de la línea media para adaptarse a diferentes tipos de transacciones y períodos
  2. Optimización de los parámetros de tiempo de negociación para negociar en los períodos de tiempo de mayor actividad
  3. Comparación de las ventajas y desventajas de los sistemas de stop-loss fijo y trazado
  4. Pruebas de impacto de las diferentes formas de cobrar en la estrategia

Resumir

Esta estrategia genera señales de comercio a través de la cruz de dos líneas equiláreas, a la vez que combina el seguimiento de tendencias y el procesamiento suave de datos, es una estrategia de seguimiento de tendencias sencilla y práctica. A través de la optimización de parámetros y la optimización de reglas, se puede adaptar a diferentes variedades y períodos de negociación, dar señales de comercio con anticipación cuando hay grandes cambios en la tendencia y evitar señales erróneas.

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"}]
args: [["v_input_1",false]]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true)
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)