
Chiến lược này là một hệ thống theo dõi xu hướng động dựa trên kênh trung bình động kép, kết hợp với cơ chế quản lý rủi ro. Chiến lược này sử dụng hai đường trung bình động đơn giản (SMA) để xây dựng một kênh giao dịch, trong đó đường ray trên sử dụng đường trung bình động được tính theo giá cao nhất và đường ray dưới sử dụng đường trung bình động được tính theo giá thấp nhất. Hệ thống sử dụng năm giá đóng cửa liên tiếp của đường K-line phá vỡ đường ray phía trên làm tín hiệu vào lệnh và sử dụng năm giá đóng cửa liên tiếp của đường K-line giảm xuống dưới đường ray phía dưới hoặc giảm 25% so với điểm cao nhất làm tín hiệu thoát lệnh, hiện thực hóa xu hướng động. theo dõi và kiểm soát rủi ro.
Nguyên tắc cốt lõi của chiến lược này là nắm bắt xu hướng giá thông qua kênh trung bình động kép và thiết lập cơ chế vào và thoát lệnh chặt chẽ:
Chiến lược này xây dựng một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh thông qua kênh trung bình động kép, kết hợp với cơ chế xác nhận vào lệnh nghiêm ngặt và cơ chế thoát lệnh kép để theo dõi xu hướng hiệu quả và kiểm soát rủi ro hiệu quả. Ưu điểm của chiến lược này là logic thực hiện rõ ràng và kiểm soát rủi ro hoàn hảo, nhưng vẫn yêu cầu tối ưu hóa tham số cho các môi trường thị trường khác nhau và có thể được cải thiện hơn nữa bằng cách thêm bộ lọc môi trường thị trường, xác nhận nhiều giai đoạn, v.v. Nhìn chung, đây là một chiến lược giao dịch định lượng có cấu trúc hoàn chỉnh và logic chặt chẽ, phù hợp để áp dụng trong môi trường thị trường có xu hướng rõ ràng.
/*backtest
start: 2025-01-02 00:00:00
end: 2025-01-09 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parameters for Moving Averages
upperMALength = input.int(10, title="Upper MA Length")
lowerMALength = input.int(8, title="Lower MA Length")
stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100
// Calculate Moving Averages
upperMA = ta.sma(high, upperMALength)
lowerMA = ta.sma(low, lowerMALength)
// Plot Moving Averages
plot(upperMA, color=color.red, title="Upper Moving Average")
plot(lowerMA, color=color.green, title="Lower Moving Average")
// Initialize variables
var int upperCounter = 0
var int lowerCounter = 0
var float entryPrice = na
var float highestPrice = na
// Update counters based on conditions
if (low <= upperMA)
upperCounter := 0
else
upperCounter += 1
if (high >= lowerMA)
lowerCounter := 0
else
lowerCounter += 1
// Entry condition: 5 consecutive bars above the Upper MA
if (upperCounter == 5 and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
highestPrice := high // Initialize highest price
// Update the highest price after entry
if (strategy.position_size > 0)
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Exit condition: 5 consecutive bars below the Lower MA
if (lowerCounter == 5 and strategy.position_size > 0)
strategy.close("Long", comment="Exit: 5 bars below Lower MA")
// Stop-loss condition: Exit if market closes below 25% of the highest price since entry
stopLossCondition = low < highestPrice * (1 - stopLossPercent)
if (stopLossCondition and strategy.position_size > 0)
strategy.close("Long", comment="Exit: Stop Loss")