Basado en la estrategia de seguimiento de tendencias de volatilidad


Fecha de creación: 2024-02-18 10:07:29 Última modificación: 2024-02-18 10:07:29
Copiar: 0 Número de Visitas: 538
1
Seguir
1617
Seguidores

Basado en la estrategia de seguimiento de tendencias de volatilidad

Descripción general

La estrategia utiliza el indicador WaveTrend para determinar la tendencia de los precios y las situaciones de sobreventa y sobreventa, en combinación con la señal de filtración del indicador RSI, y utiliza el seguimiento de tendencias para realizar operaciones inversas en el punto de sobreventa y sobreventa.

Principio de estrategia

La estrategia utiliza el indicador WaveTrend para determinar la dirección de la tendencia de los precios. El indicador WaveTrend se basa en la mejora del indicador Rainbow para determinar la dirección de la tendencia de los precios mediante el cálculo de la diferencia entre la línea media de Heikin-Ashi y el valor absoluto de los precios.

En concreto, la fórmula de WaveTrend en la estrategia es la siguiente:

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

Donde, esa es el promedio de Heikin-Ashi calculado, d es el promedio de la diferencia entre el promedio de Heikin-Ashi y el valor absoluto del precio.

El indicador RSI se utiliza para determinar sobrecompra y sobreventa, y la fórmula para calcular el RSI en el código es:

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; por encima de 70 es zona de sobrecompra y por debajo de 30 es zona de sobreventa.

Combinando estos dos indicadores, cuando el RSI está por debajo de 25, el WaveTrend está por debajo de 60 para la zona de venta excesiva, hacer más señales; cuando el RSI está por encima de 75 y el WaveTrend está por encima de 60 para la zona de compra excesiva, hacer una señal de baja.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El indicador de WaveTrend puede ser usado para determinar la dirección de la tendencia de los precios de manera precisa y confiable.
  2. El filtro del RSI evita operaciones innecesarias y mejora la tasa de ganancias.
  3. El uso de un método de seguimiento de tendencias puede maximizar las ganancias generadas por las tendencias de los precios.
  4. La estrategia es clara y fácil de entender, los parámetros son flexibles y se pueden ajustar según las diferentes variedades y mercados.
  5. Las estrategias son sencillas de implementar, fáciles de verificar en el campo y fáciles de optimizar en el marco.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. Tanto el WaveTrend como el RSI están un poco rezagados y pueden haber perdido el punto de inflexión.
  2. A pesar de las condiciones de filtración, es posible que se produzca una señal errónea en caso de temblor.
  3. Las estrategias de seguimiento de la parada de pérdidas no se han perfeccionado y no pueden controlar eficazmente las pérdidas individuales.
  4. La configuración de los parámetros para que coincidan razonablemente con las características de la variedad y la frecuencia de las transacciones es muy importante.

Respuesta:

  1. La combinación de indicadores de juicio adicionales para optimizar y mejorar la precisión de la señal.
  2. Acompáñese con una estrategia de stop loss para controlar las pérdidas individuales.
  3. Buscar la combinación óptima de parámetros y adaptar la estrategia a las variedades del mercado.

Dirección de optimización

La estrategia se puede optimizar en las siguientes direcciones:

  1. Reemplazar o aumentar los indicadores de juicio para optimizar la precisión de la señal. Por ejemplo, agregar indicadores de juicio como MACD, KD.

  2. Optimización de la configuración de los parámetros para adaptarse a las diferentes variedades de transacciones. Por ejemplo, ajustar el ciclo de suavización para buscar la combinación de parámetros óptima.

  3. Unirse a la estrategia de seguimiento de los límites de pérdidas para controlar eficazmente las pérdidas individuales. Por ejemplo, el límite de porcentaje de saldo, el límite móvil, etc.

  4. Considere diferentes estrategias de alza. Por ejemplo, el uso de alzas de Martingale en lugar de la alza de cantidad fija original.

  5. Optimización de los parámetros del intervalo de adaptabilidad, búsqueda de los mejores parámetros para mejorar la precisión de los juicios.

Resumir

La estrategia tiene una idea clara, utiliza un indicador de volatilidad para determinar la tendencia de los precios y filtra eficazmente las señales de negociación de ruido. La estrategia tiene un gran espacio para la optimización y se puede mejorar desde varios ángulos para que la estrategia sea más estable y confiable.

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