
Chiến lược này là một hệ thống giao dịch định lượng dựa trên phân tích kỹ thuật biểu đồ nến, chủ yếu xác định các cơ hội giao dịch tiềm năng bằng cách phân tích tổng chiều dài của bóng nến trên và dưới. Cốt lõi của chiến lược này là so sánh tổng chiều dài của bóng được tính theo thời gian thực với đường trung bình động đã điều chỉnh độ lệch và tạo ra tín hiệu dài khi chiều dài bóng vượt qua đường trung bình động. Chiến lược này tích hợp nhiều loại đường trung bình động, bao gồm đường trung bình động đơn giản (SMA), đường trung bình động hàm mũ (EMA), đường trung bình động có trọng số (WMA) và đường trung bình động có trọng số khối lượng (VWMA), cung cấp cho các nhà giao dịch không gian lựa chọn tham số linh hoạt.
Logic cốt lõi của chiến lược bao gồm các bước chính sau:
Chiến lược này phân tích chỉ báo kỹ thuật cổ điển về độ dài bóng nến và kết hợp nó với các phương pháp giao dịch định lượng hiện đại để xây dựng một hệ thống giao dịch có logic rõ ràng và tính thực tiễn cao. Ưu điểm cốt lõi của chiến lược này nằm ở tính linh hoạt của thông số và khả năng kiểm soát rủi ro hoàn toàn, nhưng nó cũng có những hạn chế như phụ thuộc nhiều vào môi trường thị trường và độ nhạy của thông số. Bằng cách giới thiệu các chỉ số đa chiều và tối ưu hóa việc quản lý vị thế, chiến lược này vẫn còn nhiều chỗ cần cải thiện. Nhìn chung, đây là một chiến lược giao dịch định lượng có nền tảng vững chắc và logic hợp lý, phù hợp để phát triển và tối ưu hóa hơn nữa.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Daytrading ES Wick Length Strategy", overlay=true)
// Input parameters
ma_length = input.int(20, title="Moving Average Length", minval=1)
ma_type = input.string("VWMA", title="Type of Moving Average", options=["SMA", "EMA", "WMA", "VWMA"])
ma_offset = input.float(10, title="MA Offset (Points)", step=1)
hold_periods = input.int(18, title="Holding Period (Bars)", minval=1)
// Calculating upper and lower wick lengths
upper_wick_length = high - math.max(close, open)
lower_wick_length = math.min(close, open) - low
// Total wick length (upper + lower)
total_wick_length = upper_wick_length + lower_wick_length
// Calculate the moving average based on the selected method
ma = switch ma_type
"SMA" => ta.sma(total_wick_length, ma_length)
"EMA" => ta.ema(total_wick_length, ma_length)
"WMA" => ta.wma(total_wick_length, ma_length)
"VWMA" => ta.vwma(total_wick_length, ma_length)
// Add the offset to the moving average
ma_with_offset = ma + ma_offset
// Entry condition: wick length exceeds MA with offset
long_entry_condition = total_wick_length > ma_with_offset
// Long entry
if (long_entry_condition)
strategy.entry("Long", strategy.long)
// Automatic exit after holding period
if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) >= hold_periods
strategy.close("Long")
// Plot the total wick length as a histogram
plot(total_wick_length, color=color.blue, style=plot.style_histogram, linewidth=2, title="Total Wick Length")
// Plot the moving average with offset
plot(ma_with_offset, color=color.yellow, linewidth=2, title="MA of Wick Length (Offset)")