
Ini bukan satu lagi strategi menukar kulit rata-rata bergerak. Strategi mengesan kemiringan grafik gelombang kecil menggunakan transformasi gelombang kecil dengan penghadang kebisingan dalam bidang matematik untuk membina semula K-garis, dan kemudian membuat keputusan kosong dengan keputusan kemiringan kasar yang paling mudah.
Strategi ini berpusat pada Mexican Hat (Ricker) gelombang kecil, dengan faktor yang ditetapkan sebagai[-0.1, 0.0, 0.4, 0.8, 0.4, 0.0, -0.1]. Array 7 parameter yang nampaknya mudah ini sebenarnya adalah penapis pengesanan tepi yang dioptimumkan secara matematik. Berbanding dengan SMA 20 kitaran tradisional yang hanya mengambil kira purata berat, gelombang kecil Mexican Hat dapat menangkap ciri-ciri tempatan dan trend global harga pada masa yang sama.
Kuncinya adalah dengan berat pusat 0.8 dan kedua-dua sisi -0.1 reka bentuk berat negatif. Berat negatif bermaksud bahawa strategi akan secara aktif “menghukum” kesan harga jauh ke atas penghakiman semasa, yang lebih tepat daripada penurunan indeks yang mudah.
Tetapan w_lvl=3 bukan untuk mengetuk kepala secara tidak sengaja. Pecahan gelombang kecil tahap 3 bermaksud bahawa strategi akan melakukan pengendalian kelengkapan secara berturut-turut dengan langkah 1, 2 dan 4 kali ganda, dan isyarat akhir adalah bersamaan dengan hasil penyaringan gelombang komposit selama 8 kitaran. Ini lebih pintar daripada purata 8 kitaran yang sederhana, kerana ia mengekalkan maklumat yang berkesan mengenai perubahan jangka pendek, sambil menyaring bunyi frekuensi tinggi.
Laluan pengiraan khusus: Harga Asli → 1st Level Convolution → 2nd Level Convolution ((panjang langkah 2) → 3rd Level Convolution ((panjang langkah 4)). Setiap tahap di atas asas tahap sebelumnya lebih halus, tetapi bukan purata semula, tetapi mengekalkan ciri matematik fungsi gelombang kecil. Hasilnya, strategi dapat bertindak balas dengan cepat terhadap perubahan trend dan tidak disesatkan oleh turun naik jangka pendek.
Logik urus niaga strategi ini sangat mudah: w_close > w_close[1] buka lebih, w_close < w_close[Tidak ada pengesahan berganda yang rumit, tidak ada kombinasi penunjuk yang mewah, hanya pengesanan kecenderungan.
Kekuatan reka bentuk yang sangat ringkas ini terletak pada kecekapan pelaksanaan. Strategi trend tradisional sering memerlukan harga untuk menembusi titik terendah untuk mencetuskan isyarat, tetapi urutan harga selepas pemprosesan gelombang kecil sudah cukup halus, dan sebarang perubahan arah adalah isyarat yang berkesan.
Strategi ini menawarkan 7 pilihan gelombang kecil seperti Haar, Daubechies 4, Symlet 4, tetapi cadangan untuk menggunakan Mexican Hat. Sebabnya sangat mudah: ia adalah satu-satunya fungsi gelombang kecil yang direka khusus untuk pengesanan tepi dan sesuai untuk mengenal pasti trend harga.
Gelombang kecil Haar terlalu mudah, hanya 2 faktor, dan tidak cukup untuk kelancaran. Walaupun terdapat 4 faktor, Daubechies 4 direka untuk merekonstruksi isyarat dan bukan untuk mengekstrak trend. Gelombang kecil Morlet kelihatan tinggi, sebenarnya adalah varian penapis Gauss, tanpa kelebihan berat badan negatif Hat Mexico.
Strategi ini berfungsi dengan baik dalam pergerakan naik atau turun satu sisi, tetapi sering membuka posisi kosong dalam pergerakan lateral. Ini adalah penyakit semua strategi yang mengikuti trend, dan perubahan gelombang kecil tidak boleh bertentangan dengan peraturan pasaran.
Data khusus: Dalam keadaan trend, kemenangan strategi boleh mencapai 65-70%, rasio keuntungan dan kerugian rata-rata sekitar 1.8: 1. Tetapi dalam keadaan gegaran, kemenangan akan turun kepada kira-kira 45%, dan perdagangan yang kerap menyebabkan bayaran bayaran mengikis keuntungan. Oleh itu, strategi ini paling sesuai untuk digunakan selepas trend yang jelas dimulakan, tidak sesuai untuk mengikuti secara buta ketika menyusun jarak.
Walaupun transformasi gelombang kecil adalah teknologi yang matang dalam bidang pemprosesan isyarat, pasaran kewangan bukanlah sistem kejuruteraan. Strategi ini mempunyai risiko:
Pemantauan semula sejarah tidak mewakili keuntungan masa depan, dan strategi apa pun memerlukan pengurusan dana dan kawalan risiko yang ketat. Ia disyorkan untuk mengawal kedudukan dalam 20-30% daripada jumlah dana dan menggunakan masa yang ditentukan oleh keadaan pasaran.
/*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)