
Chiến lược này sử dụng sự giao thoa của hai đường trung bình di chuyển để đánh giá sự thay đổi của xu hướng thị trường và thực hiện giao dịch mua và bán theo xu hướng. Khi giao dịch trên đường trung bình ngắn hạn vượt qua đường trung bình dài hạn, hãy thực hiện nhiều hơn và khi giao dịch dưới đường trung bình ngắn hạn vượt qua đường trung bình dài hạn, hãy giao dịch theo xu hướng.
Trung tâm của chiến lược là hai đường trung bình di chuyển: một đường trung bình nhanh ((thời gian mặc định là 32) và một đường trung bình chậm ((thời gian mặc định cũng là 32, có thể điều chỉnh thông qua các tham số). Khi giá đóng cửa đi qua / xuống qua các kênh hình thành từ hai đường trung bình, đại diện cho sự đảo ngược xu hướng, chiến lược này tạo ra tín hiệu mua và bán:
Bằng cách này, các chiến lược có thể đi theo xu hướng, giữ nhiều lệnh trong xu hướng tăng và giữ một lệnh trống trong xu hướng giảm cho đến khi có tín hiệu đảo ngược.
Đối với các rủi ro trên, bạn có thể xem xét thêm các bộ lọc thích hợp, chẳng hạn như bộ lọc ATR hoặc độ sóng thực trung bình, giảm giao dịch quá mức trong thị trường biến động; thiết lập dừng hợp lý, kiểm soát tổn thất đơn lẻ; tiếp tục tối ưu hóa các tham số để phù hợp với thị trường. Tuy nhiên, các giới hạn của chính chiến lược khó có thể tránh hoàn toàn.
Các tối ưu hóa trên có thể cải thiện khả năng của chiến lược đối phó với thị trường phức tạp, nhưng cần lưu ý rằng tối ưu hóa quá mức có thể dẫn đến phù hợp với đường cong, gây ra hiệu suất kém trong tương lai.
Chiến lược theo dõi xu hướng hai dòng bằng cách nắm bắt xu hướng bằng cách chéo đường bằng, có tính năng đơn giản, dễ sử dụng và có thể áp dụng rộng rãi. Tuy nhiên, nó không hoạt động tốt trong thị trường biến động, không đáp ứng tốt với tình huống cực đoan và có nhiều khó khăn trong việc tối ưu hóa tham số. Có thể tối ưu hóa chiến lược bằng cách giới thiệu nhiều chỉ số lọc, dừng lỗ động, quản lý vị trí, kết hợp nhiều chu kỳ và tham số tự thích ứng. Tuy nhiên, chiến lược theo dõi xu hướng hai dòng có những hạn chế để tuân thủ hoàn toàn, vẫn cần thận trọng trong thực tế, điều chỉnh linh hoạt theo đặc điểm của thị trường.
/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true)
strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15)
// Backtest Date Range
start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530'))
end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530'))
backtest_range = true
// Inputs
maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA')
sslLen = input(title='SSL Length', defval=32)
showCross = input(title='Show Crossover?', defval=true)
showEntry = input(title='Show Entry?', defval=true)
showTrend = input(title='Show Trend Colors?', defval=true)
// Calc MA for SSL Channel
calc_ma(close, len, type) =>
float result = 0
if type == 'SMA' // Simple
result := ta.sma(close, len)
result
if type == 'EMA' // Exponential
result := ta.ema(close, len)
result
if type == 'WMA' // Weighted
result := ta.wma(close, len)
result
result
// Add SSL Channel
maHigh = calc_ma(high, sslLen, maType)
maLow = calc_ma(low, sslLen, maType)
Hlv = int(na)
Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? maHigh : maLow
sslUp = Hlv < 0 ? maLow : maHigh
ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red)
ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime)
// Conditions
longCondition = ta.crossover(sslUp, sslDown)
shortCondition = ta.crossover(sslDown, sslUp)
// Strategy
if shortCondition
strategy.close('Long', comment='Long Exit', alert_message='JSON')
if longCondition
strategy.close('Short', comment='Short Exit', alert_message='JSON')
if backtest_range and longCondition
strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON')
if backtest_range and shortCondition
strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON')
// Plots
fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')