Estrategia de negociación cuantitativa basada en el cruce de la doble EMA

El autor:¿ Qué pasa?, Fecha: 2023-11-21 11:41:40
Las etiquetas:

img

Resumen general

Esta estrategia genera señales de negociación mediante el cálculo del cruce entre dos líneas de EMA de períodos diferentes para determinar las tendencias del mercado.

Principios

La estrategia aplica principalmente la teoría de la cruz de oro y la cruz de la muerte de las líneas EMA dobles. Las líneas EMA dobles consisten en una EMA larga y una EMA corta. El parámetro EMA corto se establece en 10 días y el parámetro EMA largo se establece en 21 días.

Cuando la EMA corta cruza la EMA larga, se genera una señal de compra. Cuando la EMA corta cruza por debajo de la EMA larga, se genera una señal de venta. La estrategia también establece umbrales de tasa de crecimiento, abriendo posiciones largas solo cuando el crecimiento excede un umbral positivo y cerrando posiciones solo cuando la disminución excede un umbral negativo.

Específicamente, la condición de compra es cuando la EMA corta es superior a la EMA larga y la tasa de crecimiento de las acciones excede el umbral positivo.

Ventajas

  • Utiliza la teoría de la cruz de oro y la cruz de la muerte de las líneas EMA dobles para su simplicidad y fiabilidad
  • Añade umbrales de tasa de crecimiento para evitar operaciones erróneas durante el débil crecimiento
  • Puede controlar estrictamente la tasa de pérdida máxima
  • Los parámetros de los períodos de EMA pueden ajustarse de forma flexible para diferentes ciclos

Análisis de riesgos

  • Las líneas de la EMA tienen efectos de retraso, posiblemente faltando puntos de reversión de precios
  • Los cruces de líneas tienen cierto retraso, posiblemente faltan los mejores puntos de entrada
  • Se basa en la optimización de parámetros, las configuraciones incorrectas pueden causar exceso de comercio o señales insuficientes

Direcciones de optimización

  • Combinar con otros indicadores como MACD, KD, etc. para mejorar la precisión de la señal
  • Agregue estrategias de stop loss como el stop loss para maximizar las ganancias
  • Optimizar los parámetros de los períodos de EMA para obtener las mejores configuraciones en diferentes productos
  • Incorporar datos en tiempo real y métodos de aprendizaje automático para el ajuste y la optimización de parámetros dinámicos

Resumen de las actividades

La estrategia general es relativamente simple y confiable, utilizando cruces dobles de la EMA para determinar las tendencias de precios y establecer umbrales de tasa de crecimiento para generar señales comerciales. En comparación con los cruces de una sola línea, puede filtrar algunas señales falsas. Pero las propias líneas de la EMA tienen problemas de retraso. La combinación de otros indicadores o el ajuste dinámico de parámetros puede mejorar aún más el rendimiento de la estrategia.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)

Más.