Estrategia de trading cuantitativo basada en la tendencia de ondas


Fecha de creación: 2023-11-28 16:17:31 Última modificación: 2023-11-28 16:17:31
Copiar: 1 Número de Visitas: 715
1
Seguir
1619
Seguidores

Estrategia de trading cuantitativo basada en la tendencia de ondas

Descripción general

Esta estrategia se basa en el diseño de indicadores de tendencias de ondas. Los indicadores de tendencias de ondas, combinados con el canal de precios y la media, pueden identificar eficazmente las tendencias del mercado y emitir señales de compra y venta. Esta estrategia establece una línea de compra y venta por encima de la tendencia de ondas y realiza operaciones de compra o venta cuando la línea de indicadores rompe la línea clave.

Principio de estrategia

  1. Calcula el promedio móvil triangular de los precios ap, y el promedio móvil índice de ap esa。
  2. Calcula el promedio móvil d de la diferencia absoluta entre ap y esa.
  3. Se obtiene el indicador de fluctuación ci。
  4. Calcule el promedio de n2 ciclos de ci, obteniendo el indicador de tendencia de ondas wt1。
  5. Establezca una línea de sobrecompra y una línea de sobreventa.
  6. Cuando en wt1 se cruza la línea de sobreventa, se hace más; cuando en wt1 se cruza la línea de sobrecompra, se hace vacío.

Análisis de las ventajas

  1. El indicador de tendencias de ondas supera la línea de venta y compra, lo que permite capturar los puntos de inflexión de las tendencias del mercado y tomar decisiones de compra y venta con precisión.
  2. Combinado con el canal de precios y la teoría de la línea media, el indicador no produce señales frecuentes.
  3. Se puede usar en cualquier periodo de tiempo y se puede utilizar en diferentes tipos de transacciones.
  4. Los parámetros del indicador son ajustables y la experiencia del usuario es buena.

Riesgos y soluciones

  1. En un mercado con gran volatilidad, los indicadores pueden generar señales erróneas y el riesgo es mayor. Se puede reducir adecuadamente el período de tenencia de posiciones o combinar con otras señales de filtración de indicadores.
  2. No se tiene en cuenta la gestión de la posición y el mecanismo de suspensión de pérdidas, existe el riesgo de pérdidas. Se puede configurar el tamaño de la posición y el bloqueo móvil para controlar el riesgo.

Dirección de optimización

  1. Se puede considerar su uso en combinación con otros indicadores, como KDJ, MACD, etc., para formar una cartera de operaciones y mejorar la estabilidad de la estrategia.
  2. Se pueden diseñar mecanismos automáticos de detención de pérdidas, como el seguimiento de las pérdidas, la detención de la línea de cambio, etc., para controlar las pérdidas individuales.
  3. Se puede combinar con algoritmos de aprendizaje profundo para mejorar la tasa de éxito de la estrategia mediante el entrenamiento de datos de retroalimentación, la optimización automática de los parámetros.

Resumir

Esta estrategia se basa en el indicador de tendencia de la ola, para determinar la tendencia de identificación de la situación de sobreventa y sobreventa, y es una estrategia de seguimiento de tendencias eficaz. En comparación con los indicadores a corto plazo, el indicador de tendencia de la ola reduce las señales erróneas y aumenta la estabilidad.

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


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday")