Chiến lược theo xu hướng điểm số Z sử dụng điểm số Z, một thước đo thống kê đo lường độ lệch của một giá so với mức trung bình động, bình thường hóa so với độ lệch chuẩn của nó. Chiến lược này nổi bật do tính đơn giản và hiệu quả của nó, đặc biệt là trong các thị trường mà các biến động giá thường quay trở lại mức trung bình. Không giống như các hệ thống phức tạp hơn có thể dựa trên vô số chỉ số, chiến lược Z-Trend tập trung vào các biến động giá rõ ràng, có ý nghĩa thống kê, làm cho nó lý tưởng cho các nhà giao dịch thích cách tiếp cận hợp lý, dựa trên dữ liệu.
Trung tâm của chiến lược này là tính toán điểm số Z. Nó được lấy ra bằng cách lấy sự khác biệt giữa giá hiện tại và Mức trung bình chuyển động (EMA) của giá trên một chiều dài được xác định bởi người dùng, sau đó chia nó cho độ lệch chuẩn của giá trên cùng một chiều dài:
z = (x - μ) / σ
Trong đó x là giá hiện tại, μ là trung bình EMA và σ là độ lệch chuẩn.
Các tín hiệu giao dịch được tạo ra dựa trên điểm số Z vượt qua các ngưỡng được xác định trước:
Những rủi ro này có thể được quản lý và giảm thiểu thông qua phân tích thị trường liên tục, tối ưu hóa tham số và thực hiện thận trọng dựa trên kiểm tra hậu quả.
Chiến lược theo dõi xu hướng Z-Score, với tính đơn giản, mạnh mẽ và linh hoạt của nó, cung cấp một quan điểm độc đáo để nắm bắt các cơ hội xu hướng. Thông qua cài đặt tham số thích hợp, quản lý rủi ro thận trọng và tối ưu hóa liên tục, chiến lược này có thể là một công cụ mạnh mẽ cho các nhà giao dịch định lượng để điều hướng các thị trường luôn thay đổi với sự tự tin.
/*backtest start: 2023-04-23 00:00:00 end: 2024-04-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PresentTrading // This strategy employs a statistical approach by using a Z-score, which measures the deviation of the price from its moving average normalized by the standard deviation. // Very simple and effective approach //@version=5 strategy('Price Based Z-Trend - strategy [presentTrading]',shorttitle = 'Price Based Z-Trend - strategy [presentTrading]', overlay=false, precision=3, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000) // User-definable parameters for the Z-score calculation and bar coloring tradeDirection = input.string("Both", "Trading Direction", options=["Long", "Short", "Both"]) // User selects trading direction priceDeviationLength = input.int(100, "Standard Deviation Length", step=1) // Length for standard deviation calculation priceAverageLength = input.int(100, "Average Length", step=1) // Length for moving average calculation Threshold = input.float(1, "Threshold", step=0.1) // Number of standard deviations for Z-score threshold priceBar = input(title='Bar Color', defval=true) // Toggle for coloring price bars based on Z-score // Z-score calculation based on user input for the price source (typically the closing price) priceSource = input(close, title="Source") priceZScore = (priceSource - ta.ema(priceSource, priceAverageLength)) / ta.stdev(priceSource, priceDeviationLength) // Z-score calculation // Conditions for entering and exiting trades based on Z-score crossovers priceLongCondition = ta.crossover(priceZScore, Threshold) // Condition to enter long positions priceExitLongCondition = ta.crossunder(priceZScore, -Threshold) // Condition to exit long positions longEntryCondition = ta.crossover(priceZScore, Threshold) longExitCondition = ta.crossunder(priceZScore, -Threshold) shortEntryCondition = ta.crossunder(priceZScore, -Threshold) shortExitCondition = ta.crossover(priceZScore, Threshold) // Strategy conditions and execution based on Z-score crossovers and trading direction if (tradeDirection == "Long" or tradeDirection == "Both") and longEntryCondition strategy.entry("Long", strategy.long) // Enter a long position if (tradeDirection == "Long" or tradeDirection == "Both") and longExitCondition strategy.close("Long") // Close the long position if (tradeDirection == "Short" or tradeDirection == "Both") and shortEntryCondition strategy.entry("Short", strategy.short) // Enter a short position if (tradeDirection == "Short" or tradeDirection == "Both") and shortExitCondition strategy.close("Short") // Close the short position // Dynamic Thresholds Visualization using 'plot' plot(Threshold, "Dynamic Entry Threshold", color=color.new(color.green, 50)) plot(-Threshold, "Dynamic Short Entry Threshold", color=color.new(color.red, 50)) // Color-coding Z-Score priceZScoreColor = priceZScore > Threshold ? color.green : priceZScore < -Threshold ? color.red : color.blue plot(priceZScore, "Z-Score", color=priceZScoreColor) // Lines hline(0, color=color.rgb(255, 255, 255, 50), linestyle=hline.style_dotted) // Bar Color priceBarColor = priceZScore > Threshold ? color.green : priceZScore > 0 ? color.lime : priceZScore < Threshold ? color.maroon : priceZScore < 0 ? color.red : color.black barcolor(priceBar ? priceBarColor : na)