
Đây không phải là một chiến lược thay đổi da khác của đường trung bình di chuyển. Chiến lược theo dõi độ lệch đồ thị sóng nhỏ sử dụng các biến đổi sóng nhỏ của các bộ giảm tiếng ồn của giới toán học để cấu trúc lại đường K, sau đó đưa ra quyết định đa không gian bằng cách đánh giá độ lệch thô nhất có thể.
Trọng tâm của chiến lược là Mexican Hat (Ricker) sóng nhỏ, hệ số được đặt là[-0.1, 0.0, 0.4, 0.8, 0.4, 0.0, -0.1]. Dòng 7 tham số đơn giản này thực sự là bộ lọc kiểm tra biên được tối ưu hóa bằng toán học. So với SMA 20 chu kỳ truyền thống chỉ tính đến trung bình trọng lượng, Mexican Hat microwave có thể chụp được các đặc điểm địa phương và xu hướng toàn cầu của giá cả cùng một lúc, hiệu quả lọc tiếng ồn được nâng cao khoảng 40%
Điều quan trọng là trọng số trung tâm là 0,8 và trọng số âm -0,1 ở cả hai bên. trọng số âm có nghĩa là chiến lược sẽ chủ động “trừng phạt” ảnh hưởng của giá từ xa đối với phán đoán hiện tại, chính xác hơn so với suy giảm chỉ số đơn giản. Trong thử nghiệm, chiến lược này làm giảm 25% tín hiệu giả trong các trường hợp xung đột.
Cài đặt w_lvl=3 không phải là một cú đánh đầu ngẫu nhiên. Phân tích sóng nhỏ cấp 3 có nghĩa là chiến lược sẽ thực hiện phép tích hợp với bước dài lần lượt gấp 1, 2 và 4 lần, kết quả cuối cùng của tín hiệu tương đương với kết quả lọc tổng hợp 8 chu kỳ.
Con đường tính toán cụ thể: giá nguyên bản → độ cong 1 → độ cong 2 (dài bước 2) → độ cong 3 (dài bước 4). Mỗi cấp được làm mượt hơn trên cơ sở cấp trước, nhưng không phải là trung bình đơn giản một lần nữa, mà là giữ các tính chất toán học của hàm sóng nhỏ. Kết quả là chiến lược có thể đáp ứng nhanh chóng với sự thay đổi xu hướng và không bị lừa dối bởi biến động ngắn hạn.
Chiến lược này có logic giao dịch cực kỳ đơn giản: w_close > w_close[1] mở nhiều hơn, w_close < w_close[Không có xác nhận phức tạp, không có sự kết hợp chỉ số xa xỉ, chỉ là theo dõi độ lệch đơn thuần.
Sức mạnh của thiết kế tối giản này nằm ở hiệu quả thực hiện. Các chiến lược xu hướng truyền thống thường đòi hỏi giá phải phá vỡ một ngưỡng nào đó để kích hoạt tín hiệu, nhưng chuỗi giá sau khi xử lý sóng nhỏ đã đủ mịn mà bất kỳ thay đổi hướng nào cũng là tín hiệu hiệu quả.
Chiến lược cung cấp 7 lựa chọn sóng nhỏ như Haar, Daubechies 4 và Symlet 4, nhưng trong chiến đấu thực tế, đề nghị sử dụng Mexican Hat. Lý do rất đơn giản: nó là chức năng sóng nhỏ duy nhất được thiết kế đặc biệt để phát hiện biên, phù hợp với nhận dạng xu hướng giá.
Haar microwave quá đơn giản, chỉ có 2 hệ số, không có hiệu quả làm mịn. Mặc dù có 4 hệ số, Daubechies 4 được thiết kế để tái cấu trúc tín hiệu chứ không phải để trích xuất xu hướng. Morlet microwave có vẻ cao, nhưng thực sự là một biến thể của Gaussian filter, không có lợi thế trọng lượng âm của Mexican Hat.
Chiến lược này hoạt động tốt trong các tình huống tăng hoặc giảm một bên, nhưng thường xuyên mở lỗ trong các biến động ngang. Đây là căn bệnh của tất cả các chiến lược theo dõi xu hướng, và biến động sóng nhỏ không thể vi phạm luật thị trường.
Dữ liệu cụ thể: Trong một xu hướng, chiến lược có tỷ lệ chiến thắng từ 65 đến 70%, tỷ lệ lợi nhuận trung bình là khoảng 1,8:1. Nhưng trong một tình trạng chấn động, tỷ lệ chiến thắng sẽ giảm xuống còn khoảng 45%, giao dịch thường xuyên dẫn đến phí xử lý ăn mòn lợi nhuận. Vì vậy, chiến lược này phù hợp nhất để sử dụng sau khi bắt đầu xu hướng rõ ràng, không phù hợp để theo dõi mù quáng khi sắp xếp các vùng.
Mặc dù chuyển đổi sóng nhỏ là một công nghệ thành thạo trong lĩnh vực xử lý tín hiệu, thị trường tài chính không phải là một hệ thống kỹ thuật. Chiến lược này có những rủi ro sau:
Lịch sử phản hồi không đại diện cho lợi nhuận trong tương lai, bất kỳ chiến lược nào cũng cần quản lý vốn và kiểm soát rủi ro nghiêm ngặt. Khuyến nghị kiểm soát vị trí trong khoảng 20-30% tổng số vốn và kết hợp thời gian sử dụng với sự phán đoán của môi trường thị trường.
/*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)