Chiến lược theo dõi độ dốc nến Wavelet

WAVELET SLOPE Trend MEXICAN HAT RICKER
Ngày tạo: 2025-12-17 15:27:18 sửa đổi lần cuối: 2026-01-05 16:20:22
sao chép: 8 Số nhấp chuột: 233
2
tập trung vào
434
Người theo dõi

Chiến lược theo dõi độ dốc nến Wavelet Chiến lược theo dõi độ dốc nến Wavelet

Chuyển đổi sóng nhỏ gặp theo dõi xu hướng, ứng dụng thực tế của thẩm mỹ toán học

Đâ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ể.

Mexican Hat không phải là mũ, mà là bộ lọc Gaussian 7 tham số

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.

Phân tích sóng nhỏ cấp 3: Xu hướng từ 1 phút tiếng ồn đến 8 phú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.

Logic của sự phân tích tỷ lệ lệ lệ nhịp: mua nếu tăng, bán nếu giảm, đơn giản như vậy

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ả.

Có 7 loại sóng nhỏ, nhưng Mexican Hat là giải pháp tốt nhất

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.

Các trường hợp có thể áp dụng: máy gặt của xu hướng đơn phương, cơn ác mộng của sự biến động

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.

Dấu hiệu rủi ro: Thị trường không thể thay đổi dù toán học có tinh tế

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:

  1. Rủi ro thua lỗ liên tục: Có thể có 5-8 lần dừng liên tục trong thị trường bất ổn
  2. Rủi ro về sự chậm trễ: Mặc dù nhanh hơn so với các chỉ số truyền thống, nhưng vẫn có sự chậm trễ 2-3 chu kỳ
  3. Tính nhạy cảm của tham số: thay đổi loại sóng nhỏ và cấp độ phân giải có thể ảnh hưởng đáng kể đến kết quả
  4. Thị trường thích ứng: chiến lược dựa trên tối ưu hóa dữ liệu lịch sử, không đảm bảo hiệu suất trong tương lai

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.

Mã nguồn chiến lược
/*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)