Estrategia de seguimiento de tendencia de cruce dorado con doble EMA


Fecha de creación: 2023-11-21 15:10:54 Última modificación: 2023-11-21 15:10:54
Copiar: 0 Número de Visitas: 648
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de cruce dorado con doble EMA

Descripción general

La estrategia se basa en el cálculo de las EMA de línea rápida y la EMA de línea lenta, y la comparación de la relación entre la magnitud de los dos EMA para determinar la dirección de la tendencia del mercado. Se trata de una estrategia simple de seguimiento de la tendencia.

Principio de estrategia

El indicador central de la estrategia es el EMA de línea rápida y el EMA de línea lenta. La longitud del EMA de línea rápida se establece en 21 ciclos y la longitud del EMA de línea lenta se establece en 55 ciclos. El EMA de línea rápida responde más rápidamente a los cambios en los precios, reflejando las tendencias recientes a corto plazo; el EMA de línea lenta responde más lentamente a los cambios en los precios, filtrando parte del ruido y reflejando las tendencias a medio y largo plazo.

Cuando la línea rápida EMA cruza la línea lenta EMA, indica que la tendencia a corto plazo se convierte en alza, y la tendencia a medio y largo plazo puede invertirse, lo cual es una señal de ventaja. Cuando la línea rápida EMA cruza la línea lenta EMA, indica que la tendencia a corto plazo se convierte en baja, y la tendencia a medio y largo plazo puede invertirse, lo cual es una señal de ventaja.

A través de la comparación de las EMAs rápidas y lentas, se pueden capturar los puntos de inflexión de tendencias en dos escalas de tiempo, a corto y medio plazo, y es una estrategia típica de seguimiento de tendencias.

Ventajas estratégicas

  1. El plan es simple, claro, fácil de entender y de implementar.
  2. Ajuste de parámetros flexible, línea rápida y línea lenta con un ciclo EMA personalizado
  3. ATR de alto riesgo configurable y controlado

Riesgo estratégico

  1. La elección de los puntos de cruce del doble EMA puede ser incorrecta, con el riesgo de perderse los mejores puntos de entrada
  2. Las señales de invalidez pueden aparecer varias veces cuando las cosas se mueven, lo que conlleva el riesgo de pérdidas.
  3. Los parámetros ATR no están configurados correctamente, lo que puede causar que el parador esté demasiado relajado o demasiado radical

Las medidas de respuesta al riesgo:

  1. Optimización de los parámetros de la línea rápida y lenta de EMA para encontrar la combinación óptima de parámetros
  2. Mecanismos de filtración para evitar señales ineficaces de movimiento
  3. Prueba y optimiza los parámetros de ATR para asegurar que la configuración de la parada de pérdidas sea razonable

Dirección de optimización de la estrategia

  1. Basado en métodos estadísticos para probar la estabilidad de diferentes parámetros del ciclo EMA
  2. Aumentar las condiciones de filtrado para evitar señales no válidas en combinación con otros indicadores
  3. Optimización de los parámetros ATR para obtener el mejor Stop Loss Ratio

Resumir

Esta estrategia es simple, clara y fácil de implementar para juzgar la tendencia del mercado a través del cruce de la línea rápida y la línea lenta EMA. Al mismo tiempo, en combinación con el ATR para establecer un stop loss, el riesgo es controlable. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la optimización de los parámetros y el aumento de las condiciones de filtración.

Código Fuente de la Estrategia
/*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)