Estrategia de negociación cuantitativa basada en la tendencia de la ola

El autor:¿ Qué pasa?, Fecha: 2023-11-28 16:17:31
Las etiquetas:

img

Resumen general

Esta estrategia está diseñada sobre la base del indicador de tendencia de onda. El indicador de tendencia de onda combina el canal de precios y la media móvil para identificar eficazmente las tendencias del mercado y generar señales comerciales. Esta estrategia entra en posiciones largas o cortas cuando la línea de tendencia de onda cruza los niveles clave que representan el estado de sobrecompra o sobreventa.

Estrategia lógica

  1. Calcule el promedio móvil triangular ap del precio, así como el promedio móvil exponencial esa de ap.
  2. Calcule el promedio móvil exponencial d de la diferencia absoluta entre ap y esa.
  3. Derivar el indicador de volatilidad ci.
  4. Calcule la media móvil del período n2 de ci para obtener el indicador de tendencia de onda wt1.
  5. Establecer las líneas de umbral de sobrecompra y sobreventa.
  6. Ir largo cuando wt1 cruza por encima de la línea de sobreventa, ir corto cuando wt1 cruza por debajo de la línea de sobrecompra.

Análisis de ventajas

  1. Las rupturas de tendencia de los niveles de sobrecompra / sobreventa atrapan efectivamente los puntos de inversión de tendencia y generan señales comerciales precisas.
  2. Combinando el canal de precios y las teorías de la media móvil, el indicador evita señales falsas frecuentes.
  3. Aplicable a todos los plazos y a la variedad de instrumentos de negociación.
  4. Los parámetros personalizables proporcionan una buena experiencia de usuario.

Riesgos y soluciones

  1. Los cambios significativos pueden causar malas señales, un alto riesgo. Puede utilizar períodos de espera más cortos o combinarse con otros indicadores para filtrar la señal.
  2. No hay dimensionamiento de posiciones y mecanismos de stop loss, riesgos de pérdidas.

Direcciones de optimización

  1. Considere combinarlo con otros indicadores como KDJ y MACD para formar combinaciones de estrategias, mejorando la estabilidad.
  2. Diseñar un stop loss automático como trailing stops, volatilidad se detiene para limitar por pérdida de comercio.
  3. Utilice algoritmos de aprendizaje automático en datos históricos para ajustar automáticamente los parámetros y mejorar el rendimiento de la estrategia.

Conclusión

Esta estrategia identifica tendencias y niveles de sobrecompra/sobreventa utilizando el indicador de tendencia de onda, formando una tendencia efectiva siguiendo la estrategia. En comparación con los osciladores a corto plazo, la tendencia de onda evita señales falsas y proporciona una mejor estabilidad. Con métodos adecuados de control de riesgos, puede lograr ganancias constantes. Se puede esperar un mayor impulso del rendimiento de los parámetros y el ajuste del modelo.


/*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") 

Más.