Chiến lược này sử dụng sự chéo chéo của hai đường trung bình động để xác định sự thay đổi trong xu hướng thị trường và đưa ra quyết định mua / bán dựa trên hướng xu hướng. Nó đi dài khi MA ngắn hạn vượt quá MA dài hạn, và đi ngắn khi MA ngắn hạn vượt dưới MA dài hạn, nhằm theo xu hướng.
Cốt lõi của chiến lược này là hai đường trung bình động: MA nhanh (thời gian mặc định 32) và MA chậm (cũng là thời gian mặc định 32), có thể điều chỉnh thông qua các tham số. Khi giá đóng vượt trên / dưới kênh được hình thành bởi hai MA này, nó chỉ ra sự đảo ngược xu hướng và chiến lược tạo ra tín hiệu mua / bán phù hợp:
Thông qua phương pháp chéo MA này, chiến lược có thể theo xu hướng, giữ các vị trí dài trong xu hướng tăng và các vị trí ngắn trong xu hướng giảm, cho đến khi có tín hiệu đảo ngược.
Để giải quyết những rủi ro này, có thể xem xét việc thêm các bộ lọc thích hợp, chẳng hạn như bộ lọc ATR hoặc bộ lọc phạm vi thực tế trung bình, để giảm quá mức giao dịch trong các thị trường dao động; đặt mức dừng lỗ hợp lý để kiểm soát lỗ giao dịch duy nhất; và liên tục tối ưu hóa các tham số để thích nghi với thị trường. Tuy nhiên, những hạn chế vốn có của chiến lược rất khó tránh hoàn toàn.
Các tối ưu hóa trên có thể cải thiện khả năng xử lý thị trường phức tạp của chiến lược, nhưng phải cẩn thận để tránh tối ưu hóa quá mức có thể dẫn đến phù hợp đường cong và hiệu suất tương lai kém.
Phương pháp theo xu hướng MA hai lần nắm bắt xu hướng thông qua các giao lộ MA. Nó đơn giản, dễ sử dụng và có thể áp dụng rộng rãi. Tuy nhiên, nó hoạt động kém trong các thị trường khác nhau, phản ứng không đầy đủ với các chuyển động cực đoan và gặp khó khăn trong tối ưu hóa tham số.
Chiến lược có thể được tối ưu hóa bằng cách giới thiệu nhiều chỉ số lọc hơn, dừng lỗ năng động, kích thước vị trí, phân tích nhiều khung thời gian và các tham số thích nghi.
Nhìn chung, chiến lược này có thể phục vụ như một chiến lược theo xu hướng cơ bản, nhưng nó khó đứng một mình và phù hợp hơn như một phần của danh mục các chiến lược.
/*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')