Estrategia de seguimiento de tendencias de la EMA con doble cruz de oro

El autor:¿ Qué pasa?, Fecha: 2023-11-21 15:10:54
Las etiquetas:

img

Resumen general

Esta estrategia calcula la línea EMA rápida y la línea EMA lenta y compara la relación de tamaño entre las dos EMA para determinar la dirección de tendencia del mercado. Pertenece a una estrategia de seguimiento de tendencias simple. Cuando la EMA rápida cruza por encima de la EMA lenta, vaya largo. Cuando la EMA rápida cruza por debajo de la EMA lenta, vaya corto. Es una típica estrategia de cruz dorada dual EMA.

Estrategia lógica

Los indicadores centrales de esta estrategia son la EMA rápida y la EMA lenta. La longitud de la EMA rápida se establece en 21 períodos y la longitud de la EMA lenta se establece en 55 períodos. La EMA rápida puede responder a los cambios de precios más rápido, reflejando la tendencia reciente a corto plazo; la EMA lenta responde más lentamente a los cambios de precios, filtrando algo de ruido y reflejando la tendencia a mediano y largo plazo.

Cuando la EMA rápida cruza por encima de la EMA lenta, indica que la tendencia a corto plazo se ha invertido hacia arriba y la tendencia a mediano y largo plazo puede haberse invertido, lo que es una señal para ir largo.

Al comparar las EMA rápidas y lentas, capta los puntos de reversión de la tendencia en dos escalas de tiempo, a corto plazo y a mediano y largo plazo, que es una estrategia típica de seguimiento de tendencias.

Ventajas

  1. Lógica sencilla y clara, fácil de entender e implementar
  2. Ajuste de parámetros flexible, los períodos EMA rápidos y lentos se pueden personalizar
  3. Los riesgos de pérdida y ganancia de ATR configurables para riesgos controlables

Los riesgos

  1. Sincronización inadecuada de los cruces de la EMA, riesgo de falta del mejor punto de entrada
  2. Las señales no válidas frecuentes durante la consolidación del mercado, que causan pérdidas
  3. Configuración incorrecta de los parámetros ATR, que conduce a paradas demasiado sueltas o demasiado agresivas

Gestión de riesgos:

  1. Optimizar los parámetros de línea rápida y lenta de la EMA para encontrar combinaciones óptimas
  2. Añadir mecanismos de filtrado para evitar señales no válidas de la consolidación del mercado
  3. Prueba y optimización de los parámetros de ATR para garantizar un stop loss razonable y obtener beneficios

Áreas de mejora

  1. Estabilidad de ensayo de los diferentes parámetros del período de EMA basados en métodos estadísticos
  2. Añadir condiciones de filtrado combinadas con otros indicadores para evitar señales no válidas
  3. Optimizar los parámetros ATR para obtener la mejor relación stop loss/take profit

Resumen de las actividades

Esta estrategia juzga la tendencia basada en los cruces de la EMA, que es simple y clara de implementar. Con las paradas basadas en ATR, los riesgos son controlables. Se pueden hacer mejoras adicionales en la estabilidad y la rentabilidad a través de la optimización de parámetros y condiciones de filtrado.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)
 


Más.