Chiến lược này là một hệ thống giao dịch định lượng kết hợp các phương pháp thống kê Z-Score, Chỉ số sức mạnh tương đối (RSI) và chỉ số siêu xu hướng. Chiến lược theo dõi độ lệch giá thống kê, kết hợp các chỉ số động lực và xác nhận xu hướng để xác định các cơ hội giao dịch có khả năng cao trên thị trường. Chiến lược này không chỉ nắm bắt các cơ hội mua quá nhiều và bán quá nhiều trên thị trường mà còn lọc các tín hiệu sai thông qua xác nhận xu hướng, cho phép giao dịch hai chiều.
Các chỉ số RSI được đưa ra để xác nhận động lực, đòi hỏi RSI phải phù hợp với hướng (RSI>60 cho các vị trí dài, RSI<40 cho các vị trí ngắn). Cuối cùng, chỉ số Supertrend phục vụ như một bộ lọc xu hướng, được tính trên cơ sở ATR 11 giai đoạn và nhân tố nhân 2,0.
Đâ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, sử dụng nhiều xác nhận tín hiệu để cải thiện độ tin cậy giao dịch. Những lợi thế cốt lõi của chiến lược nằm trong mô hình toán học khách quan và cơ chế kiểm soát rủi ro toàn diện, trong khi phải chú ý đến tối ưu hóa tham số và khả năng thích nghi thị trường. Thông qua các hướng tối ưu hóa được đề xuất, có nhiều chỗ để cải thiện hơn nữa, đặc biệt là trong việc thích nghi năng động với môi trường thị trường và kiểm soát rủi ro. Chiến lược này phù hợp với các thị trường có biến động cao và xu hướng rõ ràng, làm cho nó trở thành một cân nhắc xứng đáng cho các nhà giao dịch định lượng theo đuổi lợi nhuận ổn định.
/*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')