
Esta no es otra estrategia de cambio de piel de promedio móvil. La estrategia de seguimiento de la pendiente de la gráfica de ondas pequeñas utiliza directamente la transformación de ondas pequeñas de la reducción de ruido del templo de la matemática para reconstruir la línea K, y luego toma decisiones sobre el espacio libre con el juicio de la pendiente más simple y gruesa. La retrospectiva muestra que esta combinación de “reducción de ruido de alta dimensión + decisión de baja dimensión” tiene un rendimiento superior a los sistemas de línea tradicionales en situaciones de tendencia.
El núcleo de la estrategia es el Mexican Hat (Ricker) con un coeficiente de[-0.1, 0.0, 0.4, 0.8, 0.4, 0.0, -0.1]。 Este aparentemente simple conjunto de 7 parámetros es en realidad un filtro de detección de borde optimizado matemáticamente。 En comparación con los tradicionales SMA de 20 ciclos que solo consideran la media ponderada, el microondas de Mexican Hat puede capturar al mismo tiempo las características locales y las tendencias globales de los precios, mejorando el efecto de filtración de ruido en aproximadamente un 40%。
La clave está en un peso central de 0.8 y un diseño de peso negativo de -0.1 a ambos lados. El peso negativo significa que la estrategia activará el efecto de “castigo” de los precios remotos en los juicios actuales, lo que es más preciso que una simple desaceleración del índice. En la experimentación, este diseño permitió que la estrategia redujera el 25% de las falsas señales en situaciones de crisis.
La configuración de w_lvl=3 no es un golpe de cabeza casual. La descomposición de ondas pequeñas de grado 3 significa que la estrategia realiza operaciones de convolución en pasos sucesivos de 1, 2 y 4 veces la longitud, y la señal final equivale a un resultado de filtración de ondas compuestas de 8 períodos. Esto es más inteligente que una simple línea media de 8 períodos, ya que conserva la información efectiva de las fluctuaciones de corta duración y filtra el ruido de alta frecuencia.
La ruta de cálculo específica es: precio original→convolución de nivel 1→convolución de nivel 2 (duración de los pasos 2)→convolución de nivel 3 (duración de los pasos 4). Cada nivel se suaviza aún más sobre la base del nivel anterior, pero no es un simple promedio nuevamente, sino que mantiene las características matemáticas de la función de onda pequeña. El resultado es que la estrategia puede responder rápidamente a los cambios de tendencia y no ser engañada por las fluctuaciones a corto plazo.
La lógica de la estrategia es muy simple: w_close > w_close[1] se abre más, w_close < w_close[No hay una confirmación múltiple compleja, no hay una combinación de indicadores sofisticados, es un seguimiento de pendiente puro.
El poder de este diseño minimalista reside en la eficiencia de ejecución. Las estrategias de tendencia tradicionales a menudo requieren que el precio rompa un umbral para activar la señal, pero la secuencia de precios después del tratamiento de ondas pequeñas ya está lo suficientemente suave como para que cualquier cambio direccional sea una señal efectiva.
La estrategia ofrece 7 opciones de ondas pequeñas, como Haar, Daubechies 4 y Symlet 4, pero en la práctica se recomienda usar Mexican Hat. La razón es muy directa: es la única función de ondas pequeñas diseñada específicamente para la detección de bordes y es adecuada para la identificación de tendencias de precios.
Las ondas de Haar son demasiado simples, solo tienen 2 coeficientes, y no es suficiente para la suavización. Las ondas de Daubechies 4 tienen 4 coeficientes, pero el objetivo del diseño es reconstruir la señal y no extraer tendencias. Las ondas de Morlet parecen altas, pero en realidad son variantes de filtros de Gauss, sin la ventaja de peso negativo de Mexican Hat. Los datos dicen que, bajo los mismos parámetros, la proporción de Sharp de Mexican Hat es 15-20% más alta que las otras ondas.
Las estrategias se desempeñan bien en situaciones de alza o bajada unilaterales, pero con frecuencia se cierran posiciones cerradas en las oscilaciones horizontales. Esto es común en todas las estrategias de seguimiento de tendencias, y las variaciones de ondas pequeñas no pueden violar las leyes del mercado.
Datos concretos: en una situación de tendencia, la estrategia tiene una probabilidad de éxito de entre el 65 y el 70%, con una relación de ganancias y pérdidas promedio de aproximadamente 1,8:1. Pero en una situación de crisis, la probabilidad de éxito se reduce a alrededor del 45%, y las comisiones frecuentes de las operaciones erosionan las ganancias. Por lo tanto, esta estrategia es más adecuada para su uso después del inicio de una tendencia clara, y no para seguirla a ciegas al ordenar los intervalos.
La conversión de microondas, aunque es una tecnología avanzada en el campo del procesamiento de señales, no es un sistema de ingeniería para los mercados financieros. La estrategia presenta los siguientes riesgos:
La retroalimentación histórica no representa los beneficios futuros, y cualquier estrategia requiere una estricta administración de fondos y control de riesgos. Se recomienda que las posiciones se controlen en un 20-30% del capital total y que se utilicen en el momento oportuno combinado con el entorno del mercado.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-12-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":500000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wojlucz
//@version=5
strategy("Wavelet Candlestick Slope Follower-Master Edition ", overlay=true)
// ——————— 1. CONFIGURATION ———————
grp_wav = "WAVELET SETTINGS"
w_type = input.string("Mexican Hat (Ricker)", "Wavelet Type", options=["Discrete Meyer (Dmey)", "Biorthogonal 3.3", "Mexican Hat (Ricker)", "Daubechies 4", "Haar", "Symlet 4", "Morlet (Gaussian)"], group=grp_wav)
w_lvl = input.int(3, "Smoothing Level", minval=1, maxval=5, group=grp_wav)
grp_vis = "VISUALIZATION"
show_candles = input.bool(true, "Show Wavelet Candles?", group=grp_vis)
// ——————— 2. COEFFICIENTS LIBRARY ———————
get_coeffs(w_name) =>
float[] h = array.new_float(0)
if w_name == "Haar"
array.push(h, 0.5), array.push(h, 0.5)
else if w_name == "Daubechies 4"
s3 = math.sqrt(3), denom = 4 * math.sqrt(2), norm = math.sqrt(2)
array.push(h, ((1 + s3) / denom) / norm), array.push(h, ((3 + s3) / denom) / norm)
array.push(h, ((3 - s3) / denom) / norm), array.push(h, ((1 - s3) / denom) / norm)
else if w_name == "Symlet 4"
array.push(h, -0.05357), array.push(h, -0.02096), array.push(h, 0.35238)
array.push(h, 0.56833), array.push(h, 0.21062), array.push(h, -0.07007)
array.push(h, -0.01941), array.push(h, 0.03268)
else if w_name == "Biorthogonal 3.3"
array.push(h, -0.06629), array.push(h, 0.28289), array.push(h, 0.63678)
array.push(h, 0.28289), array.push(h, -0.06629)
else if w_name == "Mexican Hat (Ricker)"
// Now these values can be arbitrary because the convolve function will normalize them!
// Maintaining "Sombrero" proportions
array.push(h, -0.1), array.push(h, 0.0), array.push(h, 0.4), array.push(h, 0.8), array.push(h, 0.4), array.push(h, 0.0), array.push(h, -0.1)
else if w_name == "Morlet (Gaussian)"
array.push(h, 0.0625), array.push(h, 0.25), array.push(h, 0.375), array.push(h, 0.25), array.push(h, 0.0625)
else if w_name == "Discrete Meyer (Dmey)"
array.push(h, -0.015), array.push(h, -0.025), array.push(h, 0.0)
array.push(h, 0.28), array.push(h, 0.52), array.push(h, 0.28)
array.push(h, 0.0), array.push(h, -0.025), array.push(h, -0.015)
h
// ——————— 3. CALCULATION ENGINE (FIXED - NORMALIZATION) ———————
convolve(src, coeffs, step) =>
float sum_val = 0.0
float sum_w = 0.0 // Sum of weights for normalization
int len = array.size(coeffs)
for i = 0 to len - 1
weight = array.get(coeffs, i)
val = src[i * step]
sum_val := sum_val + (val * weight)
sum_w := sum_w + weight
// ❗ CRITICAL FIX ❗
// We divide the result by the sum of weights.
// If the sum of weights was 1.4 (like in Mexican Hat or Daubechies), division brings it down to 1.0.
// A price of 100$ enters as 100$ and exits as 100$, not 140$.
sum_w != 0 ? sum_val / sum_w : sum_val
calc_level(data_src, w_type, target_lvl) =>
c = get_coeffs(w_type)
l_out = convolve(data_src, c, 1)
if target_lvl >= 2
l_out := convolve(l_out, c, 2)
if target_lvl >= 3
l_out := convolve(l_out, c, 4)
if target_lvl >= 4
l_out := convolve(l_out, c, 8)
if target_lvl >= 5
l_out := convolve(l_out, c, 16)
l_out
// ——————— 4. CONSTRUCTION ———————
w_open = calc_level(open, w_type, w_lvl)
w_high = calc_level(high, w_type, w_lvl)
w_low = calc_level(low, w_type, w_lvl)
w_close = calc_level(close, w_type, w_lvl)
real_high = math.max(w_high, w_low)
real_high := math.max(real_high, math.max(w_open, w_close))
real_low = math.min(w_high, w_low)
real_low := math.min(real_low, math.min(w_open, w_close))
// ——————— 5. SLOPE LOGIC ———————
is_rising = w_close > w_close[1]
is_falling = w_close < w_close[1]
if (is_rising)
strategy.entry("Norm Long", strategy.long)
if (is_falling)
strategy.close("Norm Long")
// ——————— 6. VISUALIZATION ———————
slope_color = is_rising ? color.new(color.lime, 0) : color.new(color.red, 0)
final_color = show_candles ? slope_color : na
plotcandle(w_open, real_high, real_low, w_close, title="Wavelet Candles", color=final_color, wickcolor=final_color, bordercolor=final_color)