
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.
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.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
Respuesta:
La estrategia se puede optimizar en las siguientes direcciones:
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.
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.
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.
Considere diferentes estrategias de alza. Por ejemplo, el uso de alzas de Martingale en lugar de la alza de cantidad fija original.
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.
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.
/*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()