Chiến lược giao dịch thống kê giá được tối ưu hóa theo động lượng dựa trên sự giao thoa điểm Z được làm mịn

Z-SCORE SMA stdev PNL Momentum Filter
Ngày tạo: 2025-06-03 10:44:56 sửa đổi lần cuối: 2025-06-03 10:44:56
sao chép: 0 Số nhấp chuột: 330
2
tập trung vào
319
Người theo dõi

Chiến lược giao dịch thống kê giá được tối ưu hóa theo động lượng dựa trên sự giao thoa điểm Z được làm mịn Chiến lược giao dịch thống kê giá được tối ưu hóa theo động lượng dựa trên sự giao thoa điểm Z được làm mịn

Tổng quan

Chiến lược này dựa trên khái niệm thống kê Z-Score, được sử dụng để xác định sai lệch thống kê của giá so với trung bình địa phương của nó. Chiến lược này tính Z-Score của giá đóng cửa, sau đó áp dụng trung bình di chuyển ngắn hạn và dài hạn để làm mỏng Z-Score.

Nguyên tắc chiến lược

Cốt lõi của chiến lược là tính toán và áp dụng điểm Z. Điểm Z là một số liệu thống kê được sử dụng để đo độ lệch của một điểm dữ liệu so với trung bình của mẫu, bằng đơn vị chênh lệch tiêu chuẩn. Trong chiến lược này, công thức tính điểm Z là: Z = (giá đóng cửa - SMA ((giá đóng cửa, N)) / STDEV ((giá đóng cửa, N)) Trong đó, N là chu kỳ cơ bản do người dùng định nghĩa.

Quá trình thực hiện chính sách như sau:

  1. Tính toán điểm Z nguyên bản của giá đóng cửa
  2. Sử dụng tỷ lệ Z nguyên bản để làm mịn ngắn hạn (SMA)
  3. Ứng dụng độ mịn lâu dài (SMA) đối với Z-rating nguyên thủy
  4. Khi mặc xếp hạng Z dài hạn trên điểm Z ngắn hạn, nếu đáp ứng các điều kiện bổ sung, hãy mở thêm
  5. Khi mặc Z-rating dài hạn dưới mức Z-rating ngắn hạn, nếu đáp ứng các điều kiện bổ sung, thì sẽ bằng phẳng

Các điều kiện bổ sung bao gồm:

  • Tín hiệu khoảng cách: số lượng nhỏ nhất của K dây phải được khoảng cách giữa hai loại tín hiệu giống nhau (inbound hoặc outbound)
  • Bộ lọc động lực: Không được vào sân khi có ba hoặc nhiều đường K tăng liên tiếp; Không được ra sân khi có ba hoặc nhiều đường K giảm liên tiếp

Lợi thế chiến lược

  1. Thống kê cơ bảnZ-scoring là một công cụ thống kê đã được phát triển có thể xác định hiệu quả mức độ giá lệch khỏi trung bình của nó, phù hợp để nắm bắt cơ hội giá quay trở lại trung bình.
  2. Xử lý mịn: Giảm tiếng ồn, cải thiện chất lượng tín hiệu bằng cách áp dụng độ mịn ngắn và dài hạn cho Z-rating nguyên bản.
  3. Kiểm soát khoảng cách tín hiệu: Bằng cách thiết lập khoảng cách tín hiệu tối thiểu, hiệu quả giảm giao dịch quá mức và tín hiệu lặp lại.
  4. Bộ lọc động lựcTrong một số trường hợp, các nhà đầu tư đã sử dụng các phương pháp này để ngăn chặn sự mất mát không cần thiết trong một xu hướng mạnh bằng cách cấm giao dịch ngược trong xu hướng mạnh.
  5. Tính đơn giảnChiến lược chỉ sử dụng dữ liệu giá đóng cửa, không phụ thuộc vào các chỉ số phức tạp, dễ hiểu và thực hiện.
  6. Theo dõi lợi nhuận trong thời gian thựcTrong đó có bảng hiển thị lợi nhuận chưa thực hiện trong thời gian thực, giúp các nhà giao dịch theo dõi tình trạng nắm giữ.
  7. Sự linh hoạt của tham số: Người dùng có thể điều chỉnh chu kỳ cơ bản Z-rating và tham số trơn để cải thiện khả năng thích ứng cho các thị trường và khung thời gian khác nhau.

Rủi ro chiến lược

  1. Nguy cơ giả định thống kê: Xếp hạng Z giả định phân bố giá gần như chính xác, có thể không hoạt động tốt trong môi trường thị trường không chính xác.
  2. Độ nhạy tham số: Z đánh giá chu kỳ cơ bản và lựa chọn tham số trơn có ảnh hưởng đáng kể đến hiệu suất chiến lược, lựa chọn tham số không đúng có thể dẫn đến quá phù hợp hoặc trễ tín hiệu.
  3. Hạn chế một yếu tốChiến lược chỉ dựa trên tín hiệu tạo chéo Z-score, thiếu các chỉ số xác nhận khác, có thể dẫn đến tín hiệu giả.
  4. Sự phụ thuộc vào môi trường thị trườngTrong một thị trường có xu hướng mạnh, chiến lược dựa trên giá trị trung bình có thể liên tục tạo ra tín hiệu sai.
  5. Tín hiệu bị chậm.Do sử dụng đường trung bình di chuyển trơn, tín hiệu có thể bị chậm trễ, bỏ lỡ điểm vào hoặc ra sân tốt nhất.

Giải pháp:

  • Kiểm tra lại các môi trường thị trường khác nhau để tìm ra sự kết hợp tối ưu
  • Kết hợp với bộ lọc xu hướng, giảm hoặc cấm giao dịch trong thị trường xu hướng mạnh
  • Thêm các chỉ số xác nhận bổ sung như phân tích khối lượng giao dịch hoặc các chỉ số kỹ thuật khác
  • Xem xét sử dụng tham số thích ứng, tự động điều chỉnh tham số Z-score theo biến động của thị trường

Hướng tối ưu hóa

  1. Nhận biết và tích hợp xu hướng: Thêm thành phần nhận dạng xu hướng, điều chỉnh hành động chiến lược trong thị trường có xu hướng rõ ràng. Điều này có thể được thực hiện thông qua đường trung bình di chuyển dài hạn hoặc chỉ số ADX, tránh phát sinh tín hiệu quay trở lại trung bình sai trong xu hướng mạnh.
  2. Điều chỉnh biến động: thực hiện điều chỉnh thích ứng của tham số xếp hạng Z, tự động tối ưu hóa chu kỳ cơ bản và tham số mài mòn theo biến động của thị trường. Điều này sẽ nâng cao tính bền vững của chiến lược trong các môi trường thị trường khác nhau.
  3. Phân tích nhiều khung thời gian: Tích hợp tín hiệu Z-rating của khung thời gian cao hơn để xác nhận, chỉ giao dịch khi nhiều tín hiệu khung thời gian phù hợp, giảm tín hiệu giả.
  4. Cơ chế ngăn chặn thiệt hại: Thực hiện dừng động dựa trên phạm vi dao động của Z-rating, cải thiện khả năng quản lý rủi ro. Ví dụ, có thể đặt dừng lỗ thành số nhân lệch lạc cụ thể của Z-rating đầu vào.
  5. Một phần lợi nhuận: Thực hiện chiến lược thu lợi nhuận theo giai đoạn, phá vỡ một phần khi điểm Z đạt đến mức giảm giá nhất định, tối ưu hóa quản lý vốn.
  6. Xác nhận giao hàng: Thêm phân tích khối lượng giao dịch để xác nhận giao dịch, chỉ thực hiện giao dịch khi tín hiệu xếp hạng Z được hỗ trợ bởi khối lượng giao dịch, cải thiện chất lượng tín hiệu.
  7. Gói chỉ số: Kết hợp điểm Z với các chỉ số thống kê hoặc kỹ thuật khác, như RSI hoặc Brinband, để tạo ra mô hình quyết định đa yếu tố, tăng cường độ tin cậy của chiến lược.

Tóm tắt

Chiến lược giao dịch thống kê giá tối ưu hóa động lực dựa trên chéo xếp hạng Z là một hệ thống giao dịch đơn giản dựa trên các nguyên tắc thống kê, tập trung vào việc bắt được sự lệch và hồi phục của giá so với giá trung bình địa phương của nó. Bằng cách xử lý trơn tru, kiểm soát khoảng cách tín hiệu và lọc động lực, chiến lược này có hiệu quả làm giảm giao dịch tiếng ồn và cải thiện chất lượng tín hiệu.

Tuy nhiên, chiến lược cũng có một số hạn chế, chẳng hạn như sự phụ thuộc vào giả định thống kê, nhạy cảm tham số và quyết định yếu tố đơn. Bằng cách thêm các biện pháp tối ưu hóa như nhận dạng xu hướng, điều chỉnh biến động, phân tích nhiều khung thời gian, cơ chế dừng lỗ, xác nhận khối lượng giao dịch và kết hợp nhiều yếu tố, bạn có thể nâng cao đáng kể tính thô lỗ và hiệu suất của chiến lược.

Nhìn chung, đây là một nền tảng lý thuyết vững chắc, tạo ra một khung chiến lược đơn giản, dễ hiểu và mở rộng, phù hợp với các thành phần cơ bản của hệ thống giao dịch hoặc công cụ giáo dục để giúp các nhà giao dịch hiểu được các ứng dụng của thống kê trong giao dịch.

Mã nguồn chiến lược
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Price Statistical Strategy-Z Score V 1.01", overlay=true)

// === Enable / Disable Z-Score Strategy Block ===
enableZScore = input.bool(true, title="Enable Smoothed Z-Score Strategy", tooltip="When enabled, this block calculates a smoothed Z-Score of the closing price and generates entry/exit signals based on crossover behavior between short-term and long-term smoothed Z-Scores.\n\nRecommended for quick and classic detection of price deviation from mean.\nSensitive to outliers. Best suited for relatively normal-distributed market conditions.")

// === Z-Score Parameters ===
zBaseLength = input.int(3, minval=1, title="Z-Score Base Period")
shortSmooth = input.int(3, title="Short-Term Smoothing")
longSmooth = input.int(5, title="Long-Term Smoothing")

// === Z-Score Calculation Function ===
f_zscore(src, length) =>
    mean = ta.sma(src, length)
    std_dev = ta.stdev(src, length)
    z = (src - mean) / std_dev
    z

// === Z-Score Logic ===
zRaw = f_zscore(close, zBaseLength)
zShort = ta.sma(zRaw, shortSmooth)
zLong = ta.sma(zRaw, longSmooth)


// === Minimum gap between identical signals ===
gapBars = input.int(5, minval=1, title="Bars gap between identical signals", tooltip="Minimum number of bars required between two identical signals (entry or exit). Helps reduce signal noise.")


// === Candle-based momentum filters ===
bullish_3bars = close > close[1] and close[1] > close[2] and close[2] > close[3] and close[3] > close[4]
bearish_3bars = close < close[1] and close[1] < close[2] and close[2] < close[3] and close[3] < close[4]

// === Entry and Exit Logic with minimum signal gap and candle momentum filter ===
var int lastEntryBar = na
var int lastExitBar  = na

if enableZScore
    longCondition = (zShort > zLong)
    exitCondition = (zShort < zLong)

    if longCondition and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars) and not bullish_3bars
        strategy.entry("Z Score", strategy.long)
        lastEntryBar := bar_index

    if exitCondition and (na(lastExitBar) or bar_index - lastExitBar > gapBars) and not bearish_3bars
        strategy.close("Z Score", comment="Z Score")
        lastExitBar := bar_index

// === Real-time PnL Table for Last Open Position ===
var table positionTable = table.new(position.bottom_right, 2, 2, border_width=1)

// Header Labels
table.cell(positionTable, 0, 0, "Entry Price", text_color=color.white, bgcolor=color.gray)
table.cell(positionTable, 1, 0, "Unrealized PnL (%)", text_color=color.white, bgcolor=color.gray)

// Values (only when position is open)
isLong        = strategy.position_size > 0
entryPrice    = strategy.position_avg_price
unrealizedPnL = isLong ? (close - entryPrice) / entryPrice * 100 : na

// Define dynamic text color for PnL
pnlColor = unrealizedPnL > 0 ? color.green : unrealizedPnL < 0 ? color.red : color.gray

// Update Table Content
if isLong
    table.cell(positionTable, 0, 1, str.tostring(entryPrice, "#.####"), text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, str.tostring(unrealizedPnL, "#.##") + " %", text_color=pnlColor, bgcolor=color.new(pnlColor, 90))
else
    table.cell(positionTable, 0, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))
    table.cell(positionTable, 1, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))