
Descripción general: Se trata de una estrategia de seguimiento de tendencias aplicando el indicador de ondas. Se obtiene una línea de ondas calculando el promedio móvil del precio promedio y el promedio móvil de la diferencia de precios absoluta. La estrategia genera señales de transacción mediante la supervisión de la intersección de la línea de ondas con la zona de sobreventa y sobreventa.
Principio de la estrategia:
Calcular el precio medio ap = (el precio más alto + el precio más bajo + el precio de cierre) / 3
Calcula el EMA de ap para n1 ciclos, obteniendo esa
Calcula el n1 ciclo EMA de la diferencia absoluta entre ap y esa, obteniendo d
Cálculo de las líneas de onda: ci={ap-esa}/{0.015}*d)
Calcula el EMA de n2 ciclos ci y obtienes la línea de onda terminal tci, owt1
Calcula el SMA de 4 periodos de wT1 y obtienes wT2
Trazar líneas horizontales de las zonas de sobrecompra y venta obLevel 1⁄2 y osLevel 1⁄2
Cuando el wt1 atraviesa la línea obLevel2 genera una señal de compra; cuando el wt1 atraviesa la línea osLevel2 genera una señal de venta
Añadir el filtro de media línea emaFilter y el filtro de volumen de transacción como condiciones de filtrado para evitar señales erróneas
Establecer el Stop Loss Ratio después de la entrada y la salida de la posición
Análisis de las ventajas:
Las líneas de ondas manejan mejor la conversión de espacio múltiple y pueden capturar tendencias de manera efectiva
Combinación de filtración doble de línea media y volumen de transacciones, con una mayor fiabilidad
El uso de múltiples conjuntos de parámetros evita las limitaciones de un solo indicador
Configuración de un Stop Loss para bloquear parte de las ganancias y controlar el riesgo
Riesgos y defectos:
La elección de los parámetros puede causar bajo rendimiento o exceso de ajuste en algunos casos
No hay una guía clara sobre la elección de los parámetros óptimos, se necesita prueba y error
No se han incluido condiciones de mercado más amplias en la señal
Si se utiliza en un mercado de rango limitado o con fluctuaciones, existe el riesgo de un efecto de fuegos artificiales
Falta de reglas de salida además de ganancias/pérdidas
La dirección de la optimización:
Testar conjuntos de parámetros en varios marcos de tiempo y activos para encontrar el valor óptimo
Combinación de indicadores de volatilidad para evitar señales en períodos de baja volatilidad
Añadir indicadores adicionales como el RSI para mejorar la precisión de la señal
Construir un modelo de aprendizaje automático para encontrar los parámetros óptimos para un activo específico
Expulsión reforzada mediante la adición de un trazado de stop loss o una salida basada en un evento de expansión de volatilidad súbita
En resumen:
Esta es una estrategia que combina la línea de ondas y el diseño de indicadores auxiliares. Utiliza la línea de ondas para identificar eficazmente las conversiones de tendencia, además de la filtración de la línea media y el volumen de transacción para evitar señales erróneas, y puede obtener la mayor parte de la tendencia de la línea media y larga.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false)
// Paramètres
n1 = input(10, title="Channel Length")
n2 = input(21, title="Average Length")
obLevel1 = input(60, title="Over Bought Level 1")
obLevel2 = input(53, title="Over Bought Level 2")
osLevel1 = input(-65, title="Over Sold Level 1")
osLevel2 = input(-60, title="Over Sold Level 2")
takeProfitPercentage = input(1, title="Take Profit (%)")
stopLossPercentage = input(0.50, title="Stop Loss (%)")
// Calculs
ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
// Tracé des lignes
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)
plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)
// Tracé de la différence entre wt1 et wt2 en bleu
hline(0, "Zero Line", color=color.gray)
// Conditions d'entrée long et court
longCondition = ta.crossover(wt1, obLevel2)
shortCondition = ta.crossunder(wt1, osLevel2)
// Tracé des signaux d'achat et de vente
plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")
// Conditions d'entrée et de sortie
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
// Niveaux de prise de profit pour les positions longues et courtes
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100)
// Vérification si les niveaux de prise de profit sont atteints
longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel
shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel
// Tracé des formes de prise de profit
plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long")
plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short")
// Niveaux de stop loss pour les positions longues et courtes
longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100)
shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100)
// Vérification si les niveaux de stop loss sont atteints
longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel
shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel
// Tracé des formes de stop loss
plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long")
plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short")
// Fermeture des positions en cas de prise de profit ou de stop loss
strategy.close("Long", when=longTakeProfitReached or longStopLossReached)
strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)