
Bài viết này giới thiệu một chiến lược giao dịch kết hợp hai chỉ số kỹ thuật MACD và Supertrend. Chiến lược này sử dụng tín hiệu chéo của chỉ số MACD và hướng xu hướng của chỉ số Supertrend để đánh giá thời gian vào và ra để kiếm lợi nhuận trong tình huống xu hướng.
Chiến lược này sử dụng chỉ số MACD và chỉ số Supertrend để tạo ra tín hiệu giao dịch. MACD được lấy từ đường trung bình di chuyển nhanh (đặc biệt là ngày 12) trừ đường trung bình di chuyển chậm (đặc biệt là ngày 26), sau đó tính toán đường trung bình di chuyển 9 ngày của MACD làm đường tín hiệu. Khi MACD đi qua đường tín hiệu trên đường, hình thành một ngã tư, là một tín hiệu nhiều; Khi MACD đi qua đường tín hiệu dưới đường, hình thành một ngã tư, là một tín hiệu không.
Bài viết này giới thiệu một chiến lược giao dịch dựa trên chỉ số MACD và chỉ số Supertrend, chiến lược này được đánh giá theo xu hướng của MACD và lọc hướng của Supertrend, giao dịch trong tình huống xu hướng, đồng thời sử dụng giao dịch đồng thời để kiểm soát sự rút lui. Ưu điểm của chiến lược là logic đơn giản, khả năng nắm bắt xu hướng mạnh mẽ, đồng thời có khả năng áp dụng tham số, tín hiệu chậm trễ và rủi ro giao dịch thường xuyên.
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="MACD + Supertrend Strategy", overlay=true)
// MACD Calculation
fastLength = 12
slowLength = 26
signalSmoothing = 9
macdSrc = close
// MACD Line
fastMA = ta.ema(macdSrc, fastLength)
slowMA = ta.ema(macdSrc, slowLength)
macdLine = fastMA - slowMA
// MACD Signal Line
signalMA = ta.ema(macdLine, signalSmoothing)
// MACD Histogram
histogram = macdLine - signalMA
// Supertrend Calculation
supertrendATRLength = 10
supertrendFactor = 3.0
[supertrend, _] = ta.supertrend(supertrendFactor, supertrendATRLength)
// Entry and Exit Conditions
longCondition = (macdLine > signalMA) and (supertrend < close)
shortCondition = (signalMA > macdLine) and (supertrend > close)
// Long Entry
if longCondition
strategy.entry("Long", strategy.long)
// Long Exit (Sell)
if signalMA > macdLine
strategy.close("Long")
// Short Entry
if shortCondition
strategy.entry("Short", strategy.short)
// Short Exit (Cover)
if macdLine > signalMA
strategy.close("Short")
// Close Long Position if short condition is met
if shortCondition
strategy.close("Long")
// Close Short Position if long condition is met
if longCondition
strategy.close("Short")
// Plotting
plotshape(series=longCondition, title="Long Entry Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Long")
plotshape(series=shortCondition, title="Short Entry Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short")
// Alerts
alertcondition(longCondition, title='Long Entry Signal', message='MACD crossover and Supertrend below close price')
alertcondition(signalMA > macdLine, title='Long Exit Signal', message='MACD signal line crosses above MACD line')
alertcondition(shortCondition, title='Short Entry Signal', message='MACD crossunder and Supertrend above close price')
alertcondition(macdLine > signalMA, title='Short Exit Signal', message='MACD line crosses above MACD signal line')