Estrategia de seguimiento de la tendencia a la volatilidad

El autor:¿ Qué pasa?, Fecha: 2024-02-18 10:07:29
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador WaveTrend para determinar las tendencias de precios y situaciones de sobrecompra/sobreventa. Combina el indicador RSI para filtrar señales y adopta un método de seguimiento de tendencias para realizar operaciones contrarias a la tendencia en niveles de sobrecompra/sobreventa.

Estrategia lógica

La estrategia utiliza el indicador WaveTrend para determinar la dirección de la tendencia del precio. El indicador WaveTrend se mejora basado en el indicador Rainbow. Juzga la dirección de la tendencia del precio calculando la diferencia entre el promedio móvil de Heikin-Ashi y el valor absoluto del precio. Genera señales comerciales combinando el indicador RSI para determinar situaciones de sobrecompra / sobreventa.

Específicamente, la fórmula WaveTrend en la estrategia es:

esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10) 
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

Donde esa es la media móvil calculada de Heikin-Ashi, d es la media de la diferencia entre la media móvil de Heikin-Ashi y el valor absoluto del precio. ci es el denominado rango adaptativo, que refleja la volatilidad de los precios. wt es la media móvil de ci, que determina la dirección de la tendencia de los precios y es el indicador clave para el largo y corto.

El indicador RSI se utiliza para determinar situaciones de sobrecompra/sobreventa.

rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) 

Su valor estándar es 0-100.

Combinado con estos dos indicadores, cuando el RSI está por debajo de 25 y la tendencia de onda está por debajo de -60, se vende en exceso para ir largo.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El indicador WaveTrend puede determinar con precisión y confiabilidad la dirección de la tendencia del precio.
  2. Los filtros RSI pueden evitar operaciones innecesarias y mejorar la tasa de ganancia.
  3. El método de seguimiento de tendencias puede maximizar las ganancias de la captura de tendencias de precios.
  4. La idea de la estrategia es simple y clara, los parámetros son flexibles para adaptarse a diferentes productos y mercados.
  5. Fácil de implementar y probar en el comercio en vivo, bueno para una mayor optimización.

Análisis de riesgos

También hay algunos riesgos:

  1. Tanto WaveTrend como el RSI tienen algún retraso, pueden perder puntos de inversión de precios.
  2. A pesar de los filtros, todavía pueden ocurrir señales falsas en los mercados laterales.
  3. Falta de un método de stop loss eficaz para controlar las pérdidas individuales.
  4. El ajuste razonable de los parámetros debe coincidir con las características y la frecuencia de negociación.

Soluciones:

  1. Añadir indicadores para la optimización de combinaciones para mejorar la precisión de la señal.
  2. Añadir estrategias de stop loss para controlar pérdidas individuales.
  3. Encuentra combinaciones óptimas de parámetros para adaptar la estrategia.

Direcciones de optimización

La estrategia se puede optimizar en las siguientes direcciones:

  1. Cambiar o añadir indicadores de juicio para mejorar la precisión de la señal, por ejemplo, MACD, KD, etc.

  2. Optimizar la configuración de los parámetros para adaptar los diferentes productos, por ejemplo, ajustar los períodos de fluidez.

  3. Las pérdidas de liquidación se calcularán de acuerdo con el tipo de liquidación.

  4. Considere diferentes estrategias de pirámide, por ejemplo, Martingale en lugar de cantidad fija.

  5. Optimizar los parámetros del rango adaptativo para mejorar la precisión del juicio.

Conclusión

La idea general de la estrategia es clara, utilizando indicadores de volatilidad para determinar las tendencias de precios y filtrar el ruido de manera efectiva. Hay espacio para la optimización en múltiples aspectos para hacer que la estrategia sea más robusta.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Más.