
Chiến lược này là một hệ thống giao dịch định lượng kết hợp phương pháp thống kê Z-Score, chỉ số tương đối mạnh (RSI) và chỉ số siêu xu hướng (Supertrend). Chiến lược này tìm kiếm cơ hội giao dịch có xác suất cao trong thị trường bằng cách theo dõi độ lệch thống kê của giá, kết hợp với chỉ số động lực và xác nhận xu hướng.
Lập luận cốt lõi của chiến lược được xây dựng trên sự phối hợp của ba chỉ số kỹ thuật chính: Đầu tiên, tính toán Z-score của giá để đo mức độ lệch của giá hiện tại so với giá trị trung bình lịch sử, trong đó sử dụng trung bình di chuyển 75 chu kỳ và chênh lệch tiêu chuẩn. Khi Z-score vượt quá 1,1 hoặc thấp hơn -1,1 thì cho thấy giá đã bị lệch thống kê đáng kể.
Đây là một chiến lược giao dịch định lượng kết hợp các phương pháp thống kê và phân tích kỹ thuật để nâng cao độ tin cậy giao dịch thông qua xác nhận nhiều tín hiệu. Ưu điểm cốt lõi của chiến lược là mô hình toán học khách quan và cơ chế kiểm soát rủi ro tốt, nhưng cũng cần chú ý đến các vấn đề về tối ưu hóa tham số và khả năng thích ứng của thị trường.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Z-Score Long and Short Strategy with Supertrend", overlay=true)
// Inputs for Z-Score
len = input.int(75, "Z-Score Lookback Length")
z_long_threshold = 1.1 // Threshold for Z-Score to open long
z_short_threshold = -1.1 // Threshold for Z-Score to open short
// Z-Score Calculation
z = (close - ta.sma(close, len)) / ta.stdev(close, len)
// Calculate Driver RSI
driver_rsi_length = input.int(14, "Driver RSI Length") // Input for RSI Length
driver_rsi = ta.rsi(close, driver_rsi_length) // Calculate the RSI
// Supertrend Parameters
atrPeriod = input.int(11, "ATR Length", minval=1)
factor = input.float(2.0, "Factor", minval=0.01, step=0.01)
// Supertrend Calculation
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
// Conditions for Long and Short based on Z-Score
z_exceeds_long = z >= z_long_threshold and driver_rsi > 60
z_exceeds_short = z <= z_short_threshold and driver_rsi < 40
// Entry Conditions
if (z_exceeds_long and direction < 0) // Enter Long if Z-Score exceeds threshold and Supertrend is down
strategy.entry("Long", strategy.long)
label.new(bar_index, low, text="Open Long", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)
alert("Open Long", alert.freq_once_per_bar) // Alert for Long entry
if (z_exceeds_short and direction > 0) // Enter Short if Z-Score exceeds threshold and Supertrend is up
strategy.entry("Short", strategy.short)
label.new(bar_index, high, text="Open Short", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)
alert("Open Short", alert.freq_once_per_bar) // Alert for Short entry
// Plot Supertrend
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color=color.green, style=plot.style_linebr)
downTrend = plot(direction > 0 ? supertrend : na, "Down Trend", color=color.red, style=plot.style_linebr)
fill(upTrend, downTrend, color=color.new(color.green, 90), fillgaps=false)
// Alert conditions for Supertrend changes (optional)
alertcondition(direction[1] > direction, title='Downtrend to Uptrend', message='The Supertrend value switched from Downtrend to Uptrend')
alertcondition(direction[1] < direction, title='Uptrend to Downtrend', message='The Supertrend value switched from Uptrend to Downtrend')