
Esta não é mais uma estratégia de troca de pele de média móvel. A estratégia de rastreamento de inclinação do gráfico de ondas pequenas usa diretamente a transformação de ondas pequenas do templo de redução de ruído do mundo da matemática para reconstruir a linha K e, em seguida, tomar uma decisão sobre o espaço-tempo com o julgamento de inclinação mais simples e grosseiro. O retrospectivo mostra que essa combinação de “redução de ruído de alta dimensão + decisão de baixa dimensão” tem melhor desempenho em situações de tendência do que o sistema de linha tradicional.
O núcleo da estratégia é o Mexican Hat (Ricker) onde o coeficiente é:[-0.1, 0.0, 0.4, 0.8, 0.4, 0.0, -0.1]. Este aparentemente simples conjunto de 7 parâmetros, na verdade é um filtro de detecção de borda matematicamente otimizado. Em comparação com o tradicional SMA de 20 ciclos, que considera apenas a média ponderada, o microondas do chapéu mexicano pode capturar simultaneamente características locais e tendências globais dos preços, melhorando a eficiência de filtragem de ruído em cerca de 40%.
A chave está no peso central de 0,8 e no design de peso negativo de -0,1 em ambos os lados. O peso negativo significa que a estratégia “penaliza” ativamente o efeito do preço remoto sobre o julgamento atual, o que é mais preciso do que um simples declínio do índice. Em experimentação, a estratégia reduziu em 25% os falsos sinais em situações de choque.
A configuração w_lvl=3 não é um cabeçalho aleatório. A decomposição de ondas pequenas de grau 3 significa que a estratégia executa operações de convulsão em passos de 1, 2 e 4 vezes mais longos, e o sinal final equivale ao resultado de um filtro de onda composto de 8 ciclos. Isso é mais inteligente do que uma simples linha média de 8 ciclos, pois retém informações efetivas sobre oscilações de curto prazo, enquanto filtra o ruído de alta frequência.
O caminho específico de cálculo é: preço original→convolução de 1o nível→convolução de 2o nível ((duração de passo 2)→convolução de 3o nível ((duração de passo 4)). Cada nível é suavizado ainda mais com base no nível anterior, mas não é uma média simples novamente, mas mantém as características matemáticas da função de pequena onda. O resultado é que a estratégia pode responder rapidamente às mudanças de tendência e não ser enganada por flutuações de curto prazo.
A lógica de negociação da estratégia é extremamente simples: w_close > w_close[1] abrindo mais, w_close < w_close[Sem comprovação múltipla complexa, sem combinação de indicadores sofisticados, apenas rastreamento de inclinação.
O poder deste design minimalista reside na eficiência de execução. As estratégias de tendência tradicionais geralmente requerem que o preço quebre um determinado limiar para disparar o sinal, mas a sequência de preços após o processamento de pequenas ondas já é suave o suficiente para que qualquer mudança de direção seja um sinal eficaz. O retrospecto mostra que o sinal desse design é retardado 2-3 ciclos mais rápido do que o tradicional MACD Gold Fork Dead Fork.
A estratégia oferece 7 opções de ondas menores, como Haar, Daubechies 4 e Symlet 4, mas a recomendação de combate é usar o Mexican Hat. A razão é direta: é a única função de ondas menores projetada especificamente para detecção de borda e é naturalmente adequada para a identificação de tendências de preço.
A onda de Haar é muito simples, com apenas dois coeficientes, e suaviza insuficientemente. Apesar de ter quatro coeficientes, o Daubechies 4 foi projetado para reconstituir sinais e não para extrair tendências. A onda de Morlet parece ser alta, mas é na verdade uma variante do filtro de Gauss, sem a vantagem de peso negativo do Mexican Hat.
A estratégia funciona bem em um único movimento ascendente ou descendente, mas é frequente abrir posições vazias em um movimento horizontal. Esta é a doença comum de todas as estratégias de acompanhamento de tendências, e a variação de pequenas ondas não pode violar as leis do mercado.
Dados específicos: Em uma tendência, a taxa de vitória da estratégia pode chegar a 65-70%, com uma relação de lucro/desavantagem média de cerca de 1,8:1. Mas, em uma situação de turbulência, a taxa de vitória pode cair para cerca de 45%, e as taxas de comércio frequentes corroem os lucros. Portanto, esta estratégia é mais adequada para ser usada após o início de uma tendência clara e não para ser seguida cegamente durante o ajuste de intervalos.
O micro-ondas, embora seja uma tecnologia avançada no campo do processamento de sinais, não é um sistema de engenharia para o mercado financeiro. A estratégia apresenta os seguintes riscos:
A retrospectiva histórica não representa o rendimento futuro, e qualquer estratégia requer um rigoroso gerenciamento de fundos e controle de risco. Recomenda-se que as posições sejam controladas em 20-30% do capital total e combinadas com o julgamento do tempo de uso do ambiente de 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)